给 DSH Desktop 用的插件:主题、工具、扩展。每个插件都放在自己的文件夹里,用 DSH 官方命令安装。
数据截至 2026/10/15 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
dsh plugin --profile web add Sovero/dsh_plugins状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
安装兼容性检查需源码安装仓库根目录无 package.json,浅层子目录有 4 份 dsh 插件清单(dsh-client-voice-eternia/package.json、dsh-ocean-theme/package.json、dsh-poslanik-deep-space/package.json 等),无法唯一定位安装名
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/11 22:22:49
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
查看扫描证据(共 141 处,展示前 94 条)
- 执行外部命令来自配置/变量dsh-client-voice-eternia/lib/capture.js:84
execFile(bin, args, { timeout: timeoutMs, windowsHide: true, maxBuffer: 4 << 20 }, (error, stdout, stderr) => { - 写入本地文件dsh-client-voice-eternia/lib/capture.js:206
mkdirSync(WORK_DIR, { recursive: true }) - 执行外部命令来自配置/变量dsh-client-voice-eternia/lib/capture.js:223
const child = spawn(bin, [ - 写入本地文件dsh-client-voice-eternia/lib/capture.js:233
const sink = createWriteStream(file) - 读取本地文件dsh-client-voice-eternia/lib/capture.js:428
raw = readFileSync(session.file) - 执行外部命令固定命令dsh-client-voice-eternia/lib/capture.js:492
spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], { windowsHide: true, stdio: 'ignore' }) - 删除本地文件dsh-client-voice-eternia/lib/capture.js:580
rmSync(file, { force: true }) - 发起网络请求dsh-client-voice-eternia/lib/client.js:1011
const response = await fetch(url, { - 发起网络请求dsh-client-voice-eternia/lib/client.js:1045
const response = await fetch(`${API_PREFIX}/record/phrase`, { method: 'GET' }) - 发起网络请求dsh-client-voice-eternia/lib/client.js:1077
const response = await fetch(`${API_PREFIX}/record/status`, { method: 'GET' }) - 发起网络请求dsh-client-voice-eternia/lib/client.js:1095
const response = await fetch(`${API_PREFIX}/config`, { method: 'GET' }) - 发起网络请求dsh-client-voice-eternia/lib/client.js:1116
const response = await fetch(`${API_PREFIX}/config`, { - 发起网络请求dsh-client-voice-eternia/lib/client.js:1137
const response = await fetch(`${API_PREFIX}/transcribe`, { - 写入剪贴板dsh-client-voice-eternia/lib/client.js:2974
void navigator.clipboard?.writeText(pending).catch(() => {}) - 读取本地文件dsh-client-voice-eternia/lib/index.js:194
if (!existsSync(file)) return {} - 读取本地文件dsh-client-voice-eternia/lib/index.js:197
text = readFileSync(file, 'utf8') - 发起网络请求dsh-client-voice-eternia/lib/index.js:301
const response = await fetch(`${base}/chat/completions`, { - 发起网络请求dsh-client-voice-eternia/lib/index.js:358
const response = await fetch(`${base}/chat/completions`, { - 读取本地文件dsh-client-voice-eternia/lib/index.js:494
if (existsSync(file)) { - 读取本地文件dsh-client-voice-eternia/lib/index.js:496
const parsed = JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件dsh-client-voice-eternia/lib/index.js:575
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件dsh-client-voice-eternia/lib/index.js:602
writeFileSync(file, JSON.stringify(flat, null, 2), 'utf8') - 读取本地文件dsh-client-voice-eternia/lib/index.js:727
text = readFileSync(join(profileDir, file), 'utf8') - 执行外部命令来自配置/变量dsh-client-voice-eternia/lib/speech.js:95
execFile(shell, ['-NoProfile', '-NonInteractive', '-Command', script], - 写入本地文件dsh-client-voice-eternia/lib/speech.js:125
mkdirSync(WORK_DIR, { recursive: true }) - 写入本地文件dsh-client-voice-eternia/lib/speech.js:129
writeFileSync(file, `${clean}`, 'utf8') - 执行外部命令来自配置/变量dsh-client-voice-eternia/lib/speech.js:148
const child = spawn(shell, ['-NoProfile', '-NonInteractive', '-Command', script], - 删除本地文件dsh-client-voice-eternia/lib/speech.js:155
rmSync(file, { force: true }) - 执行外部命令固定命令dsh-client-voice-eternia/lib/speech.js:181
spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], - 执行外部命令来自配置/变量dsh-client-voice-eternia/src/capture.js:84
execFile(bin, args, { timeout: timeoutMs, windowsHide: true, maxBuffer: 4 << 20 }, (error, stdout, stderr) => { - 写入本地文件dsh-client-voice-eternia/src/capture.js:206
mkdirSync(WORK_DIR, { recursive: true }) - 执行外部命令来自配置/变量dsh-client-voice-eternia/src/capture.js:223
const child = spawn(bin, [ - 写入本地文件dsh-client-voice-eternia/src/capture.js:233
const sink = createWriteStream(file) - 读取本地文件dsh-client-voice-eternia/src/capture.js:428
raw = readFileSync(session.file) - 执行外部命令固定命令dsh-client-voice-eternia/src/capture.js:492
spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], { windowsHide: true, stdio: 'ignore' }) - 删除本地文件dsh-client-voice-eternia/src/capture.js:580
rmSync(file, { force: true }) - 读取本地文件dsh-client-voice-eternia/src/index.js:194
if (!existsSync(file)) return {} - 读取本地文件dsh-client-voice-eternia/src/index.js:197
text = readFileSync(file, 'utf8') - 发起网络请求dsh-client-voice-eternia/src/index.js:301
const response = await fetch(`${base}/chat/completions`, { - 发起网络请求dsh-client-voice-eternia/src/index.js:358
const response = await fetch(`${base}/chat/completions`, { - 读取本地文件dsh-client-voice-eternia/src/index.js:494
if (existsSync(file)) { - 读取本地文件dsh-client-voice-eternia/src/index.js:496
const parsed = JSON.parse(readFileSync(file, 'utf8')) - 写入本地文件dsh-client-voice-eternia/src/index.js:575
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件dsh-client-voice-eternia/src/index.js:602
writeFileSync(file, JSON.stringify(flat, null, 2), 'utf8') - 读取本地文件dsh-client-voice-eternia/src/index.js:727
text = readFileSync(join(profileDir, file), 'utf8') - 执行外部命令来自配置/变量dsh-client-voice-eternia/src/speech.js:95
execFile(shell, ['-NoProfile', '-NonInteractive', '-Command', script], - 写入本地文件dsh-client-voice-eternia/src/speech.js:125
mkdirSync(WORK_DIR, { recursive: true }) - 写入本地文件dsh-client-voice-eternia/src/speech.js:129
writeFileSync(file, `${clean}`, 'utf8') - 执行外部命令来自配置/变量dsh-client-voice-eternia/src/speech.js:148
const child = spawn(shell, ['-NoProfile', '-NonInteractive', '-Command', script], - 删除本地文件dsh-client-voice-eternia/src/speech.js:155
rmSync(file, { force: true }) - 执行外部命令固定命令dsh-client-voice-eternia/src/speech.js:181
spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], - 读取本地文件dsh-ekspert/src/bootstrap.ts:25
return JSON.parse(readFileSync(pkgPath, "utf-8")).version || "0.0.0"; - 读取本地文件dsh-ekspert/src/bootstrap.ts:52
if (!existsSync(root)) mkdirSync(root, { recursive: true }); - 写入本地文件dsh-ekspert/src/bootstrap.ts:52
if (!existsSync(root)) mkdirSync(root, { recursive: true }); - 读取本地文件dsh-ekspert/src/bootstrap.ts:53
if (!existsSync(zhRoot)) mkdirSync(zhRoot, { recursive: true }); - 写入本地文件dsh-ekspert/src/bootstrap.ts:53
if (!existsSync(zhRoot)) mkdirSync(zhRoot, { recursive: true }); - 读取本地文件dsh-ekspert/src/bootstrap.ts:56
if (existsSync(SNAPSHOT_DIR)) { - 读取本地文件dsh-ekspert/src/bootstrap.ts:57
for (const division of readdirSync(SNAPSHOT_DIR, { withFileTypes: true })) { - 读取本地文件dsh-ekspert/src/bootstrap.ts:65
if (!existsSync(dstDiv)) mkdirSync(dstDiv, { recursive: true }); - 写入本地文件dsh-ekspert/src/bootstrap.ts:65
if (!existsSync(dstDiv)) mkdirSync(dstDiv, { recursive: true }); - 写入本地文件dsh-ekspert/src/bootstrap.ts:66
if (!existsSync(zhDiv)) mkdirSync(zhDiv, { recursive: true }); - 读取本地文件dsh-ekspert/src/catalog.ts:107
if (!existsSync(root)) return { experts: 0, divisions: 0 }; - 读取本地文件dsh-ekspert/src/catalog.ts:111
for (const div of readdirSync(root, { withFileTypes: true })) { - 读取本地文件dsh-ekspert/src/catalog.ts:116
for (const file of readdirSync(divPath)) { - 读取本地文件dsh-ekspert/src/catalog.ts:201
return readFileSync(path, "utf-8"); - 读取本地文件dsh-ekspert/src/catalog.ts:248
if (existsSync(labelsPath)) { - 读取本地文件dsh-ekspert/src/catalog.ts:250
labels = JSON.parse(readFileSync(labelsPath, "utf-8")); - 读取本地文件dsh-ekspert/src/fetch-assets.ts:40
const content = readFileSync(ROSTER_PATH, "utf-8"); - 读取本地文件dsh-ekspert/src/fetch-assets.ts:72
if (!existsSync(marker)) return "missing"; - 读取本地文件dsh-ekspert/src/fetch-assets.ts:74
const content = readFileSync(marker, "utf-8"); - 读取本地文件dsh-ekspert/src/fetch-assets.ts:97
if (!existsSync(packDir)) mkdirSync(packDir, { recursive: true }); - 写入本地文件dsh-ekspert/src/fetch-assets.ts:97
if (!existsSync(packDir)) mkdirSync(packDir, { recursive: true }); - 发起网络请求dsh-ekspert/src/fetch-assets.ts:99
const response = await fetch(url); - 写入本地文件dsh-ekspert/src/fetch-assets.ts:105
const writer = createWriteStream(tarballPath); - 删除本地文件dsh-ekspert/src/fetch-assets.ts:126
rmSync(tarballPath); - 写入本地文件dsh-ekspert/src/fetch-assets.ts:129
writeFileSync(join(packDir, ".assets-ready"), JSON.stringify({ - 读取本地文件dsh-ekspert/src/index.ts:288
return statSync(path).mtimeMs; - 写入本地文件dsh-ekspert/src/index.ts:492
mkdirSync(dirname(path), { recursive: true }); - 读取本地文件dsh-ekspert/src/index.ts:508
const content = readFileSync(path, "utf-8"); - 读取本地文件dsh-ekspert/src/index.ts:542
if (existsSync(labelsPath)) labels = JSON.parse(readFileSync(labelsPath, "utf-8")); - 读取本地文件dsh-ekspert/src/index.ts:542
if (existsSync(labelsPath)) labels = JSON.parse(readFileSync(labelsPath, "utf-8")); - 读取本地文件dsh-ekspert/src/index.ts:547
if (existsSync(zhLabelsPath)) zhLabels = JSON.parse(readFileSync(zhLabelsPath, "utf-8")); - 读取本地文件dsh-ekspert/src/index.ts:547
if (existsSync(zhLabelsPath)) zhLabels = JSON.parse(readFileSync(zhLabelsPath, "utf-8")); - 删除本地文件递归dsh-ekspert/src/index.ts:577
rmSync(divPath, { recursive: true }); - 发起网络请求dsh-poslanik-deep-space/lib/client.js:3364
const request = () => window.fetch(STATE_PATH, { method: 'GET' }).then((response) => { - 发起网络请求dsh-restart-buttons/lib/client.js:175
fetch('/dsh-restart-buttons/status') - 发起网络请求dsh-restart-buttons/lib/client.js:243
fetch('/dsh-restart-buttons/restart', { - 写入本地文件dsh-restart-buttons/lib/paths.mjs:47
mkdirSync(dirname(file), { recursive: true }) - 写入本地文件dsh-restart-buttons/lib/paths.mjs:48
appendFileSync(file, `${text}\n`) - 写入本地文件dsh-restart-buttons/lib/restart.mjs:90
mkdirSync(dirname(logPath), { recursive: true }) - 写入本地文件dsh-restart-buttons/lib/restart.mjs:93
appendFileSync(logPath, `${JSON.stringify(entry)}\n`) - 执行外部命令固定命令dsh-restart-buttons/lib/restart.mjs:182
const result = spawnSync('tasklist', ['/FI', `PID eq ${pid}`, '/FO', 'CSV', '/NH'], { - 执行外部命令来自配置/变量dsh-restart-buttons/lib/restart.mjs:199
child = spawn(executable, argv, { detached: true, stdio: 'ignore', windowsHide: true, ...options }) - 执行外部命令固定命令dsh-restart-buttons/lib/restart.mjs:347
const result = spawnSync('taskkill', quitArgv, { stdio: 'ignore', windowsHide: true })
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
功能亮点
- 主题合集
- 工具与扩展
- 独立文件夹安装
dsh 桌面插件主题
README
由 DeepSeek 最新模型翻译生成展开完整文档(README 剩余 1 节)
DSH 插件 给 DSH Desktop 用的插件:主题、工具、扩展。每个插件都放在自己的文件夹里,用 DSH 官方命令安装。 | 插件 | 做什么 | 版本 | | dsh-poslanik-deep-space | 「深空」主题:星星、星云、矮星、恒星、黑洞、行星、拖着尾迹的飞船、彗星、流星。鼠标移动会给空间带来电磁扰动。设置面板支持双语。 | 1.4.0 | | dsh-ocean-theme | 「海洋」主题:成群的小鱼、鲸鱼、鲨鱼、水母、海带、珊瑚,还有沉在海底的船。鼠标移动会在水里荡开涟漪。深色和浅色两套配色。 | 1.0.1 | | dsh-client-voice-eternia | 「Eternia 之声」语音输入:输入面板上有两个按钮——麦克风用来听写,对话按钮用来语音聊天。识别俄语语音,不用按 Enter 就能发送句子,用本地音色朗读回复,还有语音波形图。界面支持三种语言。 | 0.2.1 | | dsh-restart-buttons | 侧边栏底部的「重启」按钮:重启界面,以及在 Windows 上通过独立 worker 完整重启 DSH Desktop。两步确认,四重安全防护,双语标签。 | 1.0.0 | | dsh-veil-of-ulgard | 「乌尔加德之幕」主题:死城上空的夜——三层塔楼、帷幕后的月亮、迷雾、乌鸦与灰烬。探求者的活灯笼跟着光标走,驱散黑暗,它照到的灰烬会重新燃起。月亮细节丰富,带环形山,窗户里有灯光,黑暗分层。左侧栏有自己的设置面板,支持俄语和英语。深色和浅色两套配色。 | 1.3.0 | Claude Code 模组 除了 DSH 插件,这里还有一套 Claude Code 模组。 | 套装 | 做什么 | 版本 | | claude-code-sovero-mods | 市场 sovero-mods,包含五个模组:pulse(Claude 在忙什么、忙了多久)、next-step(「下一步」「运行」「提交」按钮)、course(项目优先级摆在眼前也记在心里)、key-vault(消息里的密钥送进加密存储)、expert-teams(用 /team 调用专家团队)。接入方式和详情见套装 README。 | 0.1.0 | 安装 DSH 插件 从这个仓库安装(要指定插件的子路径): dsh plugin --profile web add github:Sovero/dsh_plugins#path:dsh-poslanik-deep-space dsh plugin --profile web add github:Sovero/dsh_plugins#path:dsh-ocean-theme dsh plugin --profile web add github:Sovero/dsh_plugins#path:dsh-client-voice-eternia dsh plugin --profile web add github:Sovero/dsh_plugins#path:dsh-restart-buttons dsh plugin --profile web add github:Sovero/dsh_plugins#path:dsh-veil-of-ulgard 安装后重启 DSH Desktop:主机在启动时才会组装配置档配置。卸载用 dsh plugin --profile web remove <插件标识符>。 如果 DSH 版本不支持子路径,解压发布包,从本地路径安装: dsh plugin --profile web add /absolute/path/to/dsh-poslanik-deep-space dsh plugin --profile web add /absolute/path/to/dsh-ocean-theme dsh plugin --profile web add /absolute/path/to/dsh-client-voice-eternia dsh plugin --profile web add /absolute/path/to/dsh-restart-buttons dsh plugin --profile web add /absolute/path/to/dsh-veil-of-ulgard 许可证 MIT — 见插件旁边的 LICENSE。
预览分享卡片长什么样 ↓
给 DSH Desktop 用的插件:主题、工具、扩展。每个插件都放在自己的文件夹里,用 DSH 官方命令安装。
相关插件 · UI / 主题
这是你的仓库?认领条目