修复桌面客户端桌宠贴图加载失败,让模型完整显示
29.6/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/27 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add wmq199711180/dsh-pet-live2d-fix该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · desktop
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 11 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 67 处,展示前 48 条)
- 读取本地文件lib/index.js:85
return JSON.parse(readFileSync(file, 'utf8')) - 读取本地文件lib/index.js:337
if (existsSync(file)) return file - 读取本地文件lib/index.js:341
for (const entry of readdirSync(dir, { withFileTypes: true })) { - 读取本地文件lib/index.js:349
const hit = readdirSync(root).find((name) => name.toLowerCase().endsWith('.cdi3.json')) - 读取本地文件lib/index.js:393
if (!existsSync(manifestFile)) return undefined - 读取本地文件lib/index.js:402
if (!existsSync(modelFile)) return undefined - 写入本地文件lib/index.js:632
mkdirSync(petsRoot(), { recursive: true }) - 写入本地文件lib/index.js:633
writeFileSync(join(petsRoot(), SYNC_RECORD), JSON.stringify(record, null, 2) + '\n') - 写入本地文件lib/index.js:714
mkdirSync(dirname(target), { recursive: true }) - 发起网络请求lib/index.js:1024
const upstream = await fetch(CORE_CDN, { redirect: 'follow' }) - 写入本地文件lib/index.js:1032
mkdirSync(dirname(cachePath), { recursive: true }) - 写入本地文件lib/index.js:1033
writeFileSync(cachePath, bytes) - 读取本地文件lib/desktop.js:48
return JSON.parse(readFileSync(join(HERE, '..', 'package.json'), 'utf8')).version ?? '0.0.0' - 读取本地文件lib/desktop.js:68
if (existsSync(candidate)) return candidate - 读取本地文件lib/desktop.js:99
if ((statSync(path).mode & 0o111) !== 0) return true - 写入本地文件lib/desktop.js:100
chmodSync(path, 0o755) - 读取本地文件lib/desktop.js:141
const stat = statSync(path) - 读取本地文件lib/desktop.js:188
const version = JSON.parse(readFileSync(join(pack, 'package.json'), 'utf8')).version - 发起网络请求lib/desktop.js:254
const response = await fetch(registry + '/' + encodeURIComponent(name), { headers: { accept: 'application/json' } }) - 发起网络请求lib/desktop.js:267
const response = await fetch(tarballUrl) - 写入本地文件lib/desktop.js:294
mkdirSync(dirname(target), { recursive: true }) - 写入本地文件lib/desktop.js:295
writeFileSync(target, inner) - 写入本地文件lib/desktop.js:296
if (process.platform !== 'win32') chmodSync(target, 0o755) - 读取本地文件lib/display.js:37
const parsed = JSON.parse(readFileSync(preferencePath(home), 'utf8')) - 写入本地文件lib/display.js:48
mkdirSync(home, { recursive: true }) - 写入本地文件lib/display.js:49
writeFileSync(preferencePath(home), JSON.stringify(current, null, 2) + '\n') - 执行外部命令固定命令lib/display.js:226
spawnSync('taskkill', ['/pid', String(childPid), '/T', '/F'], { - 执行外部命令来自配置/变量lib/display.js:274
child = spawn(binary.path, ['--attach', dshUrl, '--from-plugin'], { - 读取本地文件lib/display.js:423
file: existsSync(preferencePath(home)), - 读取本地文件lib/settings.js:44
parsed = JSON.parse(readFileSync(settingsPath(home), 'utf8')) - 写入本地文件lib/settings.js:92
mkdirSync(dirname(settingsPath(home)), { recursive: true }) - 写入本地文件lib/settings.js:93
writeFileSync(settingsPath(home), JSON.stringify(next, null, 2) + '\n') - 写入本地文件lib/sound-files.js:169
if (create) mkdirSync(home, { recursive: true }) - 读取本地文件lib/sound-files.js:171
if (create && !existsSync(dir)) mkdirSync(dir, { mode: 0o700 }) - 写入本地文件lib/sound-files.js:171
if (create && !existsSync(dir)) mkdirSync(dir, { mode: 0o700 }) - 读取本地文件lib/sound-files.js:172
const stat = lstatSync(dir) - 读取本地文件lib/sound-files.js:185
const stat = lstatSync(path) - 读取本地文件lib/sound-files.js:187
const bytes = readFileSync(path) - 读取本地文件lib/sound-files.js:196
if (existsSync(path) && (lstatSync(path).isSymbolicLink() || !lstatSync(path).isFile())) throw new Error('unsafe-path') - 读取本地文件lib/sound-files.js:196
if (existsSync(path) && (lstatSync(path).isSymbolicLink() || !lstatSync(path).isFile())) throw new Error('unsafe-path') - 写入本地文件lib/sound-files.js:200
writeFileSync(fd, bytes) - 写入本地文件lib/sound-files.js:202
renameSync(temp, path) - 删除本地文件lib/sound-files.js:205
try { unlinkSync(temp) } catch { } - 删除本地文件lib/sound-files.js:220
unlinkSync(path) - 发起网络请求lib/live2d-vendor.js:17
`,t.accessibleText&&(r.innerText=t.accessibleText)),r.style.width=`${sx}px`,r.style.height=`${sx}px`,r.style.backgroundColor=this.debug?"rgba(255,255, - 发起网络请求lib/live2d-vendor.js:905
`)x();else if(!C&&T){let B=T.xAdvance+(T.kerning?.[o]||0)+u;n.width+=B,n.spaceWidth=B,n.spacesIndex.push(n.charPositions.length),n.chars.push(b)}}else - 发起网络请求lib/live2d-vendor.js:906
${c}`);throw c instanceof Error&&c.stack&&(d.stack=c.stack),d}}};qP.defaultOptions={onProgress:void 0,onError:void 0,strategy:"throw",retryCount:3,ret - 发起网络请求lib/live2d-vendor.js:955
`,pn=null,Fa=class{constructor(){pn||(pn=URL.createObjectURL(new Blob([BR],{type:"application/javascript"}))),this.worker=new Worker(pn)}};Fa.revokeOb
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH Live2D 插件:为什么 fork 后请求会返回 403?
README
由 DeepSeek 最新模型翻译生成dsh-pet-live2d(桌面客户端修复版)
给 DeepSeek Harness 用的 Live2D 桌宠,自带 DS鲸鱼娘。
这是 A8Chann/dsh-pet-live2d 的 fork,只干一件事:修好官方桌面客户端(DSH NEXT / Electron,页面 origin 是 dsh-app://app)下贴图全部 403、模型只剩骨架的问题。
在浏览器里跑 dsh web 的用户用原版就够了;这个 fork 是给桌面客户端的。
装它
插件 → 添加插件 → dsh-pet-live2d-fix → 安装 → 立即启用
装完重启一次 DSH(客户端 bundle 不做热重载)。首次显示时宿主会去 Live2D 官方 CDN 取一次 Cubism Core 并缓存到 $DSH_HOME/pets/.runtime/,那一下需要联网,之后离线可用。
不要和原版 dsh-pet-live2d 同时装:两者用同一组 HTTP 路由(/api/live2d-pet/)和同一个宠物 id,会打架。
展开完整文档(README 剩余 1 节)
dsh-pet-live2d(桌面客户端修复版) 给 DeepSeek Harness 用的 Live2D 桌宠,自带 DS鲸鱼娘。 这是 A8Chann/dsh-pet-live2d 的 fork,只干一件事:修好官方桌面客户端(DSH NEXT / Electron,页面 origin 是 dsh-app://app)下贴图全部 403、模型只剩骨架的问题。 在浏览器里跑 dsh web 的用户用原版就够了;这个 fork 是给桌面客户端的。 装它 插件 → 添加插件 → dsh-pet-live2d-fix → 安装 → 立即启用 装完重启一次 DSH(客户端 bundle 不做热重载)。首次显示时宿主会去 Live2D 官方 CDN 取一次 Cubism Core 并缓存到 $DSH_HOME/pets/.runtime/,那一下需要联网,之后离线可用。 不要和原版 dsh-pet-live2d 同时装:两者用同一组 HTTP 路由(/api/live2d-pet/)和同一个宠物 id,会打架。 修了什么 官方桌面客户端的 Host 有一道原生令牌闸:页面主线程发出的请求会带上令牌,而 Pixi 取贴图是在 blob Worker 里发出的,Worker 不在那个 frame 上、没有令牌 —— 于是 GET /api/live2d-pet/asset/<pet>/textures/.png 全部 403 Forbidden,moc3 能加载、贴图全丢,看上去就是"装了但只有一坨骨架"。 修法(两处,改动很小): 1. 宿主半区 lib/index.js:asset 路由接受 ?inline-textures=1。带这个参数请求模型 JSON 时,把 FileReferences.Textures 就地换写成 data:image/png;base64,... 再返回。 2. 浏览器半区 lib/client.js:在 dsh-app: 协议下给模型地址自动挂上这个参数。 贴图因此变成绝对 data: 地址,Worker 在本地解码,不联网、不过闸。基准地址仍是正常的模型地址,相对路径(moc3 / physics / motions)照常解析。 另外把 package.json 的包名、cordis.patch.yml 的插件行、lib/client.js 的模块 id 与 PACKAGE_NAME 改成了 scoped 名,避免和原版冲突。 完整 diff 见 ../patches/。 与原版的关系 - 版本:基于 3.3.3,功能与原版一致 - 原版文档(配置、装扮、相位、自制宠物):README.upstream.md - 上游仓库:https://github.com/A8Chann/dsh-pet-live2d - 这个修复也提过给上游:合并后请优先用原版 许可(重要) | 部分 | 许可 | | 插件代码(含本 fork 的修改) | MIT,见 LICENSE | | DS鲸鱼娘模型(pets/ds-whale-girl/) | CC BY-NC-SA 4.0:署名、非商业、相同方式共享 | | Cubism Core | Live2D 专有,不随包分发,运行时从官方 CDN 取 | 非商业:个人使用、公司内部使用都没问题;拿去做商业产品需要分别取得三位作者授权。 署名与版权链见 NOTICE.md。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
wmq199711180/dsh-pet-live2d-fix
修复桌面客户端桌宠贴图加载失败,让模型完整显示
相关插件 · 桌面端
Codex 任务面板chuspeeism/dashi-taskboard
现代化可灵活嵌入的任务面板,支持 Codex、DeepSeek Harness
★ 3,409已汉化DSH
71.7
多智能体自进化开发平台Prism-Shadow/penguin-harness
统一、稳定的 Agent 自进化框架全自动优化:任意模型 · 任意算法 · 任意 Benchmark
★ 3,125已汉化DSH
71.1
桌面宠物PC2005-cloud/dsh-pet
DSH 桌面宠物:一行命令装好即用的透明动画小桌宠,支持多开、大小位置随心配置;还内置 DIY 素材链,能用 AI…
★ 5,465已汉化DSH
71
多端 Agent 工作台GCWing/OpenBitFun
OpenBitFun 是一个高度可定制的开源 Agent 工作台,让任务按你的方式持续推进。
★ 3,457已汉化DSH
70.8
DSH Desktopanywhere-labs/dsh-desktop
为 DeepSeek Harness DSH 插件生态打造的现代化桌面端解决方案。万物皆「插件」,桌面本身也是「插件」。
★ 34,710已汉化DSH
70.7
桌面宠物伴侣OpenPetsHQ/openpets
桌面伴侣平台,带宠物、插件,还能选配本地智能体集成。
★ 1,378已汉化DSH
70.2
这是你的仓库?认领条目