🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

透窗壁纸 969246694/dsh-transparent

DeepSeek Harnessv1.4.6
96924669437 天前有提交已提供中文文档扫描:含敏感能力

让桌面客户端窗口半透明,透出你的壁纸

30.7/100
综合分
1
GitHub 星标
82
npm 周下载
—/5
用户评分

数据截至 2026/9/29 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-transparent
npm 源 · dsh-transparent 的发布者账号已校验与本仓库一致

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/10/27·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 37 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✓npm 包dsh-transparent @ 1.4.6
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/13 14:48:53

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 24 处,展示前 15 条)
  • 读取本地文件
    lib/index.js:39
    const pkg = JSON.parse(readFileSync(join(here, '..', 'package.json'), 'utf8'))
  • 读取本地文件
    lib/index.js:66
    if (!existsSync(script)) {
  • 执行外部命令固定命令
    lib/index.js:89
    child = spawn('powershell.exe', args, { windowsHide: true, stdio: ['ignore', 'pipe', 'pipe'] })
  • 写入本地文件
    lib/index.js:213
    appendFileSync(logPath, new Date().toISOString() + ' ' + line + '\n')
  • 发起网络请求
    lib/index.js:358
    const res = await fetch(url, { headers: { accept: 'application/json' } })
  • 读取本地文件
    build.mjs:20
    if (!existsSync(srcCss)) {
  • 读取本地文件
    build.mjs:25
    const lines = readFileSync(srcCss, 'utf8').split(/ ? /)
  • 读取本地文件
    build.mjs:68
    const template = readFileSync(templatePath, 'utf8')
  • 写入本地文件
    build.mjs:79
    writeFileSync(outPath, out, 'utf8')
  • 读取本地文件
    verify.mjs:20
    const pkg = JSON.parse(readFileSync(join(here, 'package.json'), 'utf8'))
  • 读取本地文件
    verify.mjs:32
    if (!existsSync(hostPath)) {
  • 读取本地文件
    verify.mjs:35
    const src = readFileSync(hostPath, 'utf8')
  • 读取本地文件
    verify.mjs:64
    const src = readFileSync(hostPath, 'utf8')
  • 读取本地文件
    verify.mjs:73
    const absent = vendored.filter((f) => !existsSync(resolve(here, 'lib/vendor', f)))
  • 读取本地文件
    verify.mjs:122
    if (!clientPath || !existsSync(clientPath)) {
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 窗口半透明
  • 透出桌面壁纸
  • 液态玻璃输入框

非官方 DSH 桌面插件:让窗口半透明,透出你的壁纸。仅支持 Windows。还带了个真会折射的液态玻璃输入框,可惜应用布局让它几乎看不见——详见 README。

v1.4.02026-09-28
· dsh-transparent 1.4.0 — 设置面板终于能渲染了 · 问题出在哪 1.3.3 注册了 Config schema,却什么都没显示。schema 是被接受了——宿主报告 status: "schema"——但 schema 本身渲染不出任何东西。 Plugins 页面只给注册过配置的 bundle 画配置,而注册是浏览器端的事: ctx.inject(['slots'], (child) => child.slots.register( { name: 'plugins.bundle.config', key: 'dsh-transparent' }, Panel)) 页面随后把这一段渲染在 bundle 的描述和它的行之间——也就是你指定的位置,读者会去找的位置。 · 怎么读、怎么写 值来自 ctx.remote.settings,即宿主自己的配置 API: · describe() → 每个命名空间的当前值和修订号 · mutate(ns, ops, revision) → 按路径定位的编辑 读到的修订号会回传,所以写入是比较并交换——并发编辑会被报告出来,而不是悄悄覆盖。 · 为什么 slot 服务是可选的 它用 ctx.inject([...]) 请求,而不是写进插件的 inject 列表。硬依赖会让整个插件在服务缺席时无法生效——而生效正是让窗口变半透明的那一步。面板可选,窗口不可选。每条失败路径都让插件继续运行。 · 三次尝试 | | 问题 | |---|---| | 1.3.0 | 手写 schema 缺了 ~standard → 插件启动失败 | | 1.3.2 | schema 解析不了 → 没有表单 | | 1.4.0 | — | 前两次都在让宿主端把选项描述出来。两次都没管画选项的那一端。 重启客户端即可加载。
v1.3.32026-09-28
· dsh-transparent 1.3.3 — 设置 schema 现在真正能解析了 1.3.2 猜的是:应用对模块解析的重写,也许能让配置档插件导入 @deepseek-ai/schemastery。重启给出了答案: --- activated v1.3.2 (options: 0) 重写覆盖的是插件入口的模块说明符——内置插件正是靠包名加载——但不会延伸到配置档插件内部的 import。带守卫的 import 起了作用:插件跑起来了,只是没有设置表单。 · 修复 schemastery 和它唯一的运行时依赖现在内置到 lib/vendor/ 下: | 文件 | 来源 | 版本 | 许可证 | |---|---|---|---| | schemastery.mjs | @deepseek-ai/schemastery | 3.18.4 | MIT | | cosmokit.mjs | @deepseek-ai/cosmokit | 1.8.5 | MIT | 改写了一处 import 路径。两份许可证一并复制,NOTICE.md 记录来源、版本和具体改动。插件保持零依赖——样式表和精灵图内联也是同一个理由。 包体积 55.8 kB,17 个文件。 · 本地验证过,不是猜的 Config exists true Config['~standard'].validate function <- 它缺失导致 1.3.0 出问题 volatile fields resolve to { get() } <- readValue 存在的原因 defaults applied alpha 215 verify.mjs 断言这四项,还断言内置文件确实在包里——所以缺了 lib/vendor/ 会在 CI 里失败,而不是等到加载时。34 项检查,全部通过。 · 更新之后 重启客户端。设置界面应该会显示四个控件:alpha、darkTheme、updateCheck、updateSource。 如果没有,日志行会告诉你属于哪种情况: --- activated v1.3.3 (options: 4) settings form available --- activated v1.3.3 (options: 0) plugin fine, no form
v1.3.22026-09-28
· dsh-transparent 1.3.2 — 修复 1.3.0 的启动失败 装了 1.3.0 或 1.3.1 的话,插件根本起不来。应用会报「启动失败」。抱歉,这是我的锅,原因也很具体。 · 出了什么问题 1.3.0 声明了一份手写的 Config schema。设置服务读这份 schema 只用到三样东西——meta.volatile、type/dict 和 toJSON()——每一样都对着真正的 schemastery schema 验证过,全部通过。 加载时还多用一个东西,光读设置服务永远发现不了: function resolveConfig(runtime, config) { if (!runtime.Config) return config const result = runtime.Config['~standard'].validate(config) // Standard Schema ... } Config 要通过 Standard Schema 接口校验。schemastery 提供这个接口,手写的对象没有。缺了它,加载时就抛错,整个插件跟着挂掉。 我只验证了碰巧在读的那个消费方,没验证加载器。 · 修复 别再仿造 schema,直接用真的: · Config 现在改用 @deepseek-ai/schemastery 的 z.object({...})。 · 导入加了保护。宿主侧只有这一处依赖应用如何为配置档插件解析模块。万一哪天解析不了,插件照样能跑,只是没有设置表单——降级,而不是宕机。 · 如果你在 1.3.0 / 1.3.1 升级到 1.3.2 并重启客户端。只重新启用插件不够:宿主侧在启动时只导入一次,开关切换复用的是缓存模块。 · 验证 verify.mjs 现在会检查任何导出的 Config 上有没有 ~standard.validate——这正是插件能用和不能用的分界线——并检查导入是否保持保护。在纯 Node 里导入解析不了,所以检查报告的是降级,而不是直接失败,这同时也证明回退路径能走通。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-transparent 让 DSH 桌面客户端的窗口变半透明,透出你的桌面壁纸。 面向 DeepSeek Harness 桌面客户端的非官方插件。仅支持 Windows。 插件里也确实包含一套真正会折射的液态玻璃实现。但安装前请注意:在这个应用的布局下,折射几乎看不出来——因为没有任何内容会从输入框后面经过。你实际能看到的效果就是「窗口变半透明」。请读下面的 已知限制,那段很短,而且是实话。 它做什么 | 效果 | 状态 | 实现在哪 | | 窗口变半透明,桌面壁纸透出来 | 有效 | 宿主半包(Node)启动一个 PowerShell 助手,设置 Win32/DWM 窗口属性 | | 应用的不透明背景被清掉 | 有效 | 客户端半包(CSS) | | 输入框折射背景,而不只是模糊 | 已实现,但实际几乎看不出 | 客户端半包:运行时生成 SVG 位移贴图,通过 backdrop-filter: url() 引用 | 为什么玻璃看不出来 折射必须有东西可弯。把一片纯色做位移等于什么都没发生——每个像素都一样,挪动它们不会带来任何变化。 所以要让效果显现,需要两件事同时成立,而现在只成立了一件: 1. 页面不能是不透明的。 ✅ 壁纸确实到了屏幕上(靠窗口半透明)。 2. 必须有内容从输入框后面经过。 ❌ 输入框独占窗口底部一行,消息列表的底边在它上方。
展开完整文档(README 剩余 1 节)
dsh-transparent

让 DSH 桌面客户端的窗口变半透明,透出你的桌面壁纸。

面向 DeepSeek Harness 桌面客户端的非官方插件。仅支持 Windows。

插件里也确实包含一套真正会折射的液态玻璃实现。但安装前请注意:在这个应用的布局下,折射几乎看不出来——因为没有任何内容会从输入框后面经过。你实际能看到的效果就是「窗口变半透明」。请读下面的 已知限制,那段很短,而且是实话。

它做什么

| 效果 | 状态 | 实现在哪 |
| 窗口变半透明,桌面壁纸透出来 | 有效 | 宿主半包(Node)启动一个 PowerShell 助手,设置 Win32/DWM 窗口属性 |
| 应用的不透明背景被清掉 | 有效 | 客户端半包(CSS) |
| 输入框折射背景,而不只是模糊 | 已实现,但实际几乎看不出 | 客户端半包:运行时生成 SVG 位移贴图,通过 backdrop-filter: url() 引用 |

为什么玻璃看不出来

折射必须有东西可弯。把一片纯色做位移等于什么都没发生——每个像素都一样,挪动它们不会带来任何变化。

所以要让效果显现,需要两件事同时成立,而现在只成立了一件:

1. 页面不能是不透明的。 ✅ 壁纸确实到了屏幕上(靠窗口半透明)。
2. 必须有内容从输入框后面经过。 ❌ 输入框独占窗口底部一行,消息列表的底边在它上方。没有任何东西会滚到它后面,透镜没有东西可弯。

折射本身是真实且验证过的——输入框的 backdrop-filter 确实解析成 url(#dsh-transparent-liquid),用同样的滤镜渲染滚动的文字会得到明显的扭曲。是应用的布局把那些文字挡在了透镜之外。

要让它可见,就得改应用的布局,让消息列表延伸到输入框后面。这件事尝试了三次,回退了三次,详见「已知限制」。

安装

从 npm 装(推荐) —— 这是唯一不需要访问 GitHub 的方式。在「添加插件」对话框里,把安装源设为 中国大陆镜像源(registry.npmmirror.com),然后填包名:

dsh-transparent

从 GitHub 装 —— 需要能访问 github.com:

plugin_manager install_bundle https://github.com/969246694/dsh-transparent

锁定版本而不是跟随 main:

plugin_manager install_bundle https://github.com/969246694/dsh-transparent#v1.0.0

从本地路径装 —— 适用于克隆下来的仓库或解压出的压缩包:

plugin_manager install_bundle

然后重启客户端。窗口透明度会在启动时自动应用,不需要手动跑任何脚本。

为什么镜像源只对 npm 那条路有用:GitHub 地址被归类为 git 规格,由 git 拉取,完全绕过 npm——所以「安装源」那个设置对它无效。这也正是这个包要发布到 npm 的原因。

配置

这些选项会出现在应用自己的设置界面里——不用手改 YAML。插件通过声明 Config 结构来获得表单。

cordis.patch.yml 依然有效,并提供初始值:

config:
alpha: 215 # 整窗不透明度 darkTheme: true # 强制界面使用黑夜主题 updateCheck: true # 有新版本时在 Console 提示 updateSource: "" # 自定义检查更新的地址

为什么这个结构是手写的。 声明配置结构通常要写 z.object({...})(来自 @deepseek-ai/schemastery),但装在 /node_modules 下的插件根本 import 不到这个包——它在应用包内部,从插件位置解析会直接 ERR_MODULE_NOT_FOUND。

所以这里用一个普通对象,形如设置服务读取的样子:type、dict、meta.volatile,以及返回 schemastery { uid, refs } 格式的 toJSON()。插件保持零依赖。

另外:只有标了 volatile 的字段才能在界面上编辑,而 volatile 会改变字段的传递形态——apply() 收到的是 { get() } 而不是值本身。所以每个选项都经过一个小helper解包。

更新

插件管理器没有更新入口,也没有版本检查——代码里完全没有 outdated / upgrade / checkForUpdate 这类路径。应用本身永远不会告诉你出了新版本,所以宿主半包每次启动问一次你 profile 配置的 registry,有新版就在 Console 说一句:

[transparent] v1.2.1 is available (running 1.2.0) — reinstall the plugin to update

检查只花一个小请求,失败是静默的——离线、私有源、线路不通,都不值得报警告。

它只提示,从不安装。 要更新:在插件管理器里重装一次,或执行 install_bundle dsh-transparent——那会重跑 pnpm 并取范围内的最新版。无论哪种方式,新版本都要重启后才开始运行。

工作副本不会被检查:只有装在 node_modules 下(即发布安装的位置)才会检查,所以从仓库直接跑不会被误认为已安装的版本。

updateSource 可以把检查指向别处——任何返回 {"version":"x.y.z"} 的地址(插件会自动拼 /latest)。

darkTheme

白天主题下的透明会发灰——壁纸透上来的是一片灰,而不是玻璃感——所以插件在激活时把主题固定为黑夜。默认 true;改成 false 就完全不动你的选择。

它是通过宿主的设置服务写入 ui-theme.preference 这个持久设置的,所以重启后依然生效、也会反映在设置界面里。写入前会先读一次:已经是黑夜就不写;写入时带上读到的 revision 做 CAS,不会悄悄覆盖你中途改过的值。

⚠️ 卸载插件不会把之前的偏好还原。 如果你希望自己的选择被尊重,请设 darkTheme: false。

| alpha | 效果 |
| 255 | 窗口完全不透明。看不到壁纸,内容最清晰 |
| 215 | 默认。壁纸可见,内容略微变淡 |
| 150 | 壁纸明显,内容明显变淡 |

设计令牌在 dsh-transparent.css:

| 令牌 | 含义 | 默认值 |
| --tp-blur | 折射前的模糊量 | 2px |
| --tp-saturate | 折射后背景的饱和度 | 130% |
| --tp-lift | 明度提升 | 1.12 |
| --tp-lens | 折射强度(位移像素数) | 55 |
| --tp-glass-fill | 玻璃底色 | rgb(19 19 19 / 0.30) |
| --tp-rim | 边缘高光强度 | 0.10 |

改 dsh-transparent.css,跑 node build.mjs,客户端半包会热更新。

液态玻璃是怎么做的

模糊不是液态玻璃,折射才是。 真实的透镜沿着形状的法线弯折背景:上下边缘竖向弯、两侧横向弯、四角斜向弯,而中间平坦处完全不弯。

这段描述就是一张法线贴图,而 feDisplacementMap 正是它的消费者:红通道是 x 偏移,绿通道是 y 偏移,128 表示"不偏移"。正因为贴图以 128 为中心构建,玻璃中间对背景不做任何改动,而边缘把它弯折——这是机制本身,不是需要记住的约定。

贴图用 canvas 在运行时生成,并且按输入框自己的宽高比:

1. 画一个圆角矩形(白底黑背)
2. 模糊它 —— 这个斜面代替玻璃的厚度
3. 对斜面做 Sobel —— 得到每个像素的表面法线
4. 把 (128 + dx, 128 + dy) 写进红和绿通道

宽高比的影响比看上去大得多。 贴图通过 preserveAspectRatio="none" 铺满元素,而输入框是极宽极扁的条(约 10:1)。如果生成 3:1 的贴图再拉伸,竖直方向的斜面会被压缩好几倍——而上下边缘恰恰是这种长条上产生折射的地方。比例错了,玻璃就是平的,而且不报任何错。

color-interpolation-filters 必须是 sRGB。默认的 linearRGB 会把位移抹平,结果退化成普通模糊。

架构

样式由 CSS 结构选择器表达,而不是用 JavaScript 给元素打标记。

这个选择是整套设计的核心,而它是从一次失败里得出的。 用 data-* 属性标记元素、再为它们生成 CSS,无法避免闪烁:

应用重渲染时替换掉自己的元素 → 新元素没有标记 → 规则不再生效 → 插件发现,于是重新应用

只要"重新应用"存在,就存在"没应用上"的那一帧。 唯一能关掉这个窗口的办法,是删掉重新应用本身。

所以客户端半包只做两件事,各一次:

1. 探测输入框卡片在可编辑元素之上第几层,然后追加一条对应深度的 :has() 规则。深度是应用组件树的属性,与重渲染无关,探测一次就够。链上每一步都是直接子代关系,所以只命中唯一一个元素——不会嵌套,不会叠加。
2. 生成折射贴图,这是 CSS 确实表达不了的。

没有 MutationObserver、没有调度器、没有限流、没有补标记。 输入框被替换一千次,浏览器就匹配一千次,而我们一行代码都不跑。

仓库结构

dsh-transparent.css 设计令牌 + 结构规则(唯一真源) build.mjs 把 CSS 拼进 lib/client.js,带守卫 verify.mjs 30+ 项检查,跑在桩上,不需要浏览器 lib/index.js 宿主半包 —— Node,启动窗口助手 lib/client.template.js 客户端半包 —— 经典脚本,含 __CSS__ 占位符 lib/client.js build.mjs 生成的产物 —— 不要直接改 assets/window-glass.ps1 Win32/DWM 助手,由宿主半包调用

三个值得知道的坑

1. .ps1 必须是纯 ASCII。
powershell.exe 在没有 BOM 时按 ANSI 读取脚本。UTF-8 无 BOM 的文件会让非 ASCII 注释变成乱码,而字符串里混进一个异常字节足以让解析直接失败——这里就真的发生过一次,原因是中文注释。assets/window-glass.ps1 里没有任何非 ASCII 字符,请保持这样。

2. 客户端半包运行在陷阱之下。
在动态求值的客户端半包里,setTimeout、setInterval、clearTimeout、clearInterval、fetch 和 require 被替换成了会抛异常的陷阱。所有定时行为必须用 requestAnimationFrame。verify.mjs 会在它们被调用时让构建失败。

3. 停用一个功能意味着删除它的样式表,而不只是不再写入。
已注入的 元素不会因为 bundle 不再写它就消失。在代码里撤掉规则、而页面里那个元素还在,旧规则就依然生效。插件因此会在激活时显式删除残留样式表。

已知限制

- 窗口透明仅支持 Windows。 其他平台上客户端半包照常工作,只是跳过透明度。
- 壁纸无法被折射。 backdrop-filter 只看得见页面内部的内容。桌面由操作系统在浏览器之外合成,所以玻璃折射的是应用自身的内容——文字、代码块、卡片——但永远不会是壁纸本身。这不是调参问题,是 API 的边界。
- 聊天文字不会经过输入框后面。 输入框独占窗口底部一行,消息列表的底边在它上方,所以没有东西会滚到玻璃后面。要做到这一点必须修改应用的布局——尝试过三次,回退了三次。详见下文。
- 如果应用改变了 DOM 深度,:has() 选择器会停止匹配,玻璃安静地消失。这是退化,不是闪烁。

排错

客户端半包在启动时打印一行:

[transparent] v1.0.0 via style tag | selector div:has(...) | card 952x98 ratio 9.7:1 | depth 3

玻璃没出现就先看这一行。depth 0 表示没找到输入框。

Console 里可用的入口:

window.__tp.layout() // 打印输入框周围的层级链
window.__tp.depth() // 输入框深度,找不到返回 0
window.__tp.retry() // 重新探测并安装
window.__tp.diag() // 溢出状态与插件自身节点

宿主半包的活动记录在 %TEMP%\dsh-transparent.log。

开发

node build.mjs # 把 CSS 拼进客户端 bundle(带守卫)
node verify.mjs # 契约、打包、陷阱、YAML 检查

build.mjs 拒绝输出在 CSS 里声明 backdrop-filter 的主题,也拒绝使用裸容器选择器。这两条规则的存在,都是因为在开发中破坏过它们并造成了肉眼可见的破坏。

关于尝试过又撤回的东西,如实记录

让聊天文字滚到玻璃后面这件事,尝试了三次,回退了三次。每一次都破坏了布局,最严重的一次把侧栏压成了一字宽。

每次的原因都一样:在看不见的情况下修改另一个应用的布局。 一个"取输入框之外最高的可滚动元素"的辅助函数,取到的是布局包装器而不是消息列表;而验证类名后缀唯一,完全不能说明这个元素是对的。

写在这里,是因为读者有权知道这个插件里哪些部分是承重的、哪些是放弃了尝试,而不是从 issue 列表里去考古。

许可

MIT —— 见 LICENSE。
非官方,与 DeepSeek 无关 —— 见 NOTICE.md。
预览分享卡片长什么样 ↓969246694/dsh-transparent
分享 · DeepSeek Harness Hub
969246694/dsh-transparent

让桌面客户端窗口半透明,透出你的壁纸

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部