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

皮肤市场 kingOfSoySauce/dsh-skin-market

DeepSeek Harnessv0.1.71
kingOfSoySauce0 天前有提交已提供中文文档扫描:含敏感能力ui

DSH皮肤市场Skin Market 已收录五百+皮肤、桌宠、开屏动画等;有便捷的社区收录入口,并且已有多位开发者提交皮肤;有在线页面方便在线浏;有方便安装管理本地皮肤的插件

66/100
综合分
295
GitHub 星标
5,141
npm 周下载
—/5
用户评分

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

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

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · market
装得上吗
本站已在 dsh 0.2.1-rc.2 下真实安装成功
非静态推断
L5 · 运行时冒烟等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 0 天前
档位由哪些信号合成

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过
展开查看检查明细 ↓

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

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/29 15:33:59

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 97 处,展示前 66 条)
  • 读取本地文件
    lib/commands.js:91
    if (existsSync(exe))
  • 读取本地文件
    lib/commands.js:98
    if (existsSync(bin))
  • 读取本地文件
    lib/commands.js:112
    if (existsSync(script))
  • 执行外部命令来自配置/变量
    lib/commands.js:184
    return spawn(file, [...args], { ...spawnOptions, shell: false });
  • 执行外部命令来自配置/变量
    lib/commands.js:187
    return spawn(process.env.ComSpec ?? 'cmd.exe', ['/d', '/s', '/c', `"${commandLine}"`], {
  • 执行外部命令固定命令
    lib/commands.js:254
    const cleanup = spawn('taskkill', ['/pid', String(child.pid), '/t', '/f'], { stdio: 'ignore', windowsHide: true });
  • 读取本地文件
    lib/profile.js:24
    return JSON.parse(readFileSync(file, 'utf8'));
  • 写入本地文件
    lib/profile.js:34
    mkdirSync(dirname(file), { recursive: true });
  • 写入本地文件
    lib/profile.js:36
    writeFileSync(temporary, value);
  • 写入本地文件
    lib/profile.js:37
    renameSync(temporary, file);
  • 读取本地文件
    lib/profile.js:178
    return statSync(join(packageDir(profileDir, packageName), 'package.json')).mtime.toISOString();
  • 读取本地文件
    lib/profile.js:186
    if (!existsSync(file))
  • 读取本地文件
    lib/profile.js:192
    if (!existsSync(file))
  • 读取本地文件
    lib/profile.js:196
    value = parse(readFileSync(file, 'utf8'));
  • 读取本地文件
    lib/profile.js:233
    lock = parse(readFileSync(pnpmLockfile(profileDir), 'utf8'));
  • 删除本地文件
    lib/profile.js:1426
    unlinkSync(file);
  • 删除本地文件
    lib/profile.js:1437
    unlinkSync(file);
  • 写入本地文件
    lib/profile.js:1515
    writeFileSync(file, snapshot.contents);
  • 删除本地文件
    lib/profile.js:1517
    unlinkSync(file);
  • 读取本地文件
    lib/runtime.js:16
    const value = JSON.parse(readFileSync(file, 'utf8'));
  • 读取本地文件
    lib/runtime.js:59
    if (existsSync(candidate)) {
  • 删除本地文件递归
    lib/lifecycle.js:49
    rmSync(directory, { recursive: true, force: true });
  • 写入本地文件
    lib/lifecycle.js:967
    writeFileSync(join(directory, 'package.json'), '{"private":true}\n', 'utf8');
  • 写入本地文件
    lib/lifecycle.js:968
    writeFileSync(join(directory, '.npmrc'), PNPM_FETCH_CONFIG, 'utf8');
  • 写入本地文件
    lib/lifecycle.js:971
    writeFileSync(join(directory, 'pnpm-workspace.yaml'), 'packages:\n - .\n', 'utf8');
  • 读取本地文件
    lib/install-resolution.js:116
    return JSON.parse(readFileSync(file, 'utf8'));
  • 读取本地文件
    lib/install-resolution.js:124
    return statSync(path).isDirectory();
  • 读取本地文件
    lib/install-resolution.js:134
    if (!existsSync(nodeModules))
  • 读取本地文件
    lib/install-resolution.js:137
    for (const entry of readdirSync(nodeModules, { withFileTypes: true })) {
  • 读取本地文件
    lib/install-resolution.js:142
    for (const child of readdirSync(scopeDir, { withFileTypes: true })) {
  • 读取本地文件
    lib/install-resolution.js:159
    for (const entry of readdirSync(root, { withFileTypes: true })) {
  • 读取本地文件
    lib/catalog.js:11
    const schema = JSON.parse(readFileSync(new URL('../registry/skin.schema.json', import.meta.url), 'utf8'));
  • 读取本地文件
    lib/catalog.js:15
    return validateCatalog(JSON.parse(readFileSync(file, 'utf8')));
  • 发起网络请求
    lib/catalog.js:99
    this.fetcher = options.fetcher ?? ((url, init) => fetch(url, init));
  • 读取本地文件
    lib/catalog.js:102
    if (!this.preferBundled && existsSync(file)) {
  • 读取本地文件
    lib/catalog.js:104
    const cached = validateCatalog(JSON.parse(readFileSync(file, 'utf8')));
  • 读取本地文件
    lib/self-update.js:120
    const value = JSON.parse(readFileSync(packageFile, 'utf8'));
  • 读取本地文件
    lib/compatibility-adapter.js:220
    if (!sourceFile.startsWith(resolve(packageRoot) + sep) || !existsSync(sourceFile)) {
  • 读取本地文件
    lib/compatibility-adapter.js:225
    const originalSource = readFileSync(sourceFile, 'utf8');
  • 写入本地文件
    lib/compatibility-adapter.js:285
    mkdirSync(dirname(plan.patchFile), { recursive: true });
  • 读取本地文件
    lib/compatibility-adapter.js:286
    if (existsSync(plan.patchFile) && readFileSync(plan.patchFile, 'utf8') !== patch) {
  • 读取本地文件
    lib/compatibility-adapter.js:286
    if (existsSync(plan.patchFile) && readFileSync(plan.patchFile, 'utf8') !== patch) {
  • 读取本地文件
    lib/compatibility-adapter.js:289
    if (!existsSync(plan.patchFile))
  • 写入本地文件
    lib/compatibility-adapter.js:290
    writeFileSync(plan.patchFile, patch);
  • 读取本地文件
    lib/pnpm-compat.js:18
    if (!existsSync(join(targetDirectory(profileDir, args), 'pnpm-workspace.yaml')))
  • 读取本地文件
    lib/configuration-override.js:33
    const stat = lstatSync(home, { bigint: true });
  • 读取本地文件
    lib/configuration-override.js:47
    function fileIdentity(file) { return statIdentity(lstatSync(file, { bigint: true })); }
  • 读取本地文件
    lib/configuration-override.js:57
    const contents = readFileSync(descriptor, 'utf8');
  • 写入本地文件
    lib/configuration-override.js:345
    writeFileSync(descriptor, contents, 'utf8');
  • 写入本地文件
    lib/configuration-override.js:350
    renameSync(temporary, source.file);
  • 删除本地文件
    lib/configuration-override.js:370
    unlinkSync(temporary);
  • 写入本地文件
    lib/configuration-override.js:386
    writeFileSync(descriptor, prepared.source.contents, 'utf8');
  • 删除本地文件
    lib/configuration-override.js:414
    unlinkSync(backupPath);
  • 读取本地文件
    lib/release-age.js:27
    source = readFileSync(file, 'utf8');
  • 读取本地文件
    lib/release-age.js:79
    const stat = lstatSync(file, { bigint: true });
  • 读取本地文件
    lib/release-age.js:103
    source = readFileSync(file, 'utf8');
  • 写入本地文件
    lib/release-age.js:220
    writeFileSync(descriptor, contents, 'utf8');
  • 读取本地文件
    lib/release-age.js:224
    if (identity(workspace.file).value !== workspace.identity || readFileSync(workspace.file, 'utf8') !== workspace.source)
  • 写入本地文件
    lib/release-age.js:226
    renameSync(temporary, workspace.file);
  • 删除本地文件
    lib/release-age.js:241
    unlinkSync(temporary);
  • 读取本地文件
    lib/store.js:19
    entries = readdirSync(tmpPath, { withFileTypes: true });
  • 删除本地文件递归
    lib/store.js:32
    rmSync(join(tmpPath, entry.name), { recursive: true, force: true });
  • 发起网络请求
    lib/market-fetch.js:39
    ? new Agent()
  • 发起网络请求
    lib/market-fetch.js:40
    : new EnvHttpProxyAgent({
  • 发起网络请求
    lib/market-fetch.js:61
    const response = await undiciFetch(input, {
  • 发起网络请求
    lib/market-fetch.js:74
    const response = await undiciFetch(input, {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-client-ui-primitives
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

2 张 · 点击查看大图

功能亮点

  • 收录200+皮肤
  • 评分与人工审核
  • 在线浏览与管理本地皮肤
v0.1.712026-10-28
· v0.1.71 这次更新: · 下载皮肤更稳定,Desktop 现在可以正常识别新版本。 · 收录更多皮肤和开屏动画。 · 增加分类浏览,方便按「皮肤、桌宠、开屏动画、播放器」查找内容。 · 新增按「热度」排序,更方便发现受欢迎的皮肤。 · 贡献者 · Leon(@kingOfSoySauce):安装稳定性、分类浏览、热度排序、测试和发布。 · Timi(@MouQianDi0):ASCII Sharks Wallpaper(PR #126)。 npm:dsh-skin-market@0.1.71 完整变更:v0.1.70...v0.1.71
v0.1.702026-10-28
· v0.1.70 这次更新: · 下载皮肤更稳定。 · 收录更多皮肤和开屏动画。 · 增加分类浏览,方便按「皮肤、桌宠、开屏动画、播放器」查找内容。 · 新增按「热度」排序,更方便发现受欢迎的皮肤。 · 贡献者 · Leon(@kingOfSoySauce):安装稳定性、分类浏览、热度排序、测试和发布。 · Timi(@MouQianDi0):ASCII Sharks Wallpaper(PR #126)。 npm:dsh-skin-market@0.1.70 完整变更:v0.1.68...v0.1.70
v0.1.652026-10-20
同步“滑动变祖”0.1.12 的发行记录,并补充 DSH 0.2.1-rc.2 官方 Desktop 管理接口回归覆盖。 · 皮肤目录、npm 安装来源与 Desktop 完整性值均指向已核验的 0.1.12 公开包和固定源码;重新运行真实客户端静态扫描。 · 保留原有作者字段、截图、兼容性声明及未验证状态,不扩大该皮肤的兼容性结论。 · 补充官方宿主拒绝不兼容安装、启用/停用/失败清单状态和只读行为的 rc.2 回归。管理能力识别沿用 0.1.64 已发布的实现。 305 条目录校验、1737 项自动化测试、类型检查、宿主/客户端/站点构建及发布包预检通过。 下载完整 .tgz,在 DSH「插件 → 添加插件」中粘贴本地路径安装,完成后按提示完全退出重开应用。相关问题保留开放,等待更新后的实际环境反馈。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
DSH 皮肤市场 一个社区皮肤市场,嵌在 DSH 设置页里:浏览、搜索、安装、使用、停用、常驻、更新和卸载 DSH 皮肤。 在线预览 打开在线皮肤市场 近期收录 - 2026-11-02:Columbina-sn/dsh-columbina-theme(0.1.0)——哥伦比娅 · 月隐银蓝。详见收录日志。 安装、更新 更新失败时,可先卸载 dsh-skin-market,再按上面的安装方法重装;如果卸载或重装仍失败,再查看错误提示并复制诊断日志。 方法 1:命令 终端执行: dsh plugin --profile web add "dsh-skin-market@latest" 方法 2:应用内 左上角「插件 → 添加插件」,输入: dsh-skin-market@latest 方法 3:插件内更新 皮肤市场内点击「更新」按钮 方法 4: Agent 帮忙 复制下面的提示词给你的 DSH Agent。它会先判断当前是 Web 还是官方 Desktop;Desktop 的安装、启用和重启仍由你在应用界面完成。 点击展开提示词 安装提示词 请帮我安装 dsh-skin-market。先只读确认当前是 Web 版还是官方 Desktop,以及当前宿主和实际 profile。
展开完整文档(README 剩余 1 节)
DSH 皮肤市场

一个社区皮肤市场,嵌在 DSH 设置页里:浏览、搜索、安装、使用、停用、常驻、更新和卸载 DSH 皮肤。

在线预览

打开在线皮肤市场

近期收录

- 2026-11-02:Columbina-sn/dsh-columbina-theme(0.1.0)——哥伦比娅 · 月隐银蓝。详见收录日志。

安装、更新

更新失败时,可先卸载 dsh-skin-market,再按上面的安装方法重装;如果卸载或重装仍失败,再查看错误提示并复制诊断日志。

方法 1:命令

终端执行:

dsh plugin --profile web add "dsh-skin-market@latest"

方法 2:应用内

左上角「插件 → 添加插件」,输入:

dsh-skin-market@latest

方法 3:插件内更新

皮肤市场内点击「更新」按钮

方法 4: Agent 帮忙

复制下面的提示词给你的 DSH Agent。它会先判断当前是 Web 还是官方 Desktop;Desktop 的安装、启用和重启仍由你在应用界面完成。

点击展开提示词

安装提示词

请帮我安装 dsh-skin-market。先只读确认当前是 Web 版还是官方 Desktop,以及当前宿主和实际 profile。Web 查看 dsh --version;官方 Desktop 以应用“关于”中的版本为准,不把系统终端的 npm dsh 版本当作桌面版本。无法读取应用信息时,请让我提供该版本;无法判断宿主就先问我。

- Web 版:执行 dsh plugin --profile web add "dsh-skin-market@latest",然后核对同一 web profile 中的依赖和 bundle。
- 官方 Desktop:你负责只读核查和操作指导,安装、启用及重启由我在应用界面完成。不要代我点击安装或启用,不要执行 dsh plugin --profile desktop、pnpm 或其他安装命令,也不要修改 Desktop profile。每次只给下一项操作,等我反馈后继续:打开「插件 → 添加插件」,输入 dsh-skin-market@latest,确认安装结果,再按应用提示启用;需要重启时指导我完全退出并重新打开应用。

这次只安装皮肤市场,不做其他皮肤的冲突检查,也不要求停用它们。不要替我安装其他皮肤。安装后告诉我从哪里打开「皮肤市场」;Desktop 以插件页状态和我的实际操作反馈核对结果,没有核实就不要声称安装或启用成功。不要读取 .env、凭据或聊天记录。

更新提示词

请更新已安装的 dsh-skin-market。先判断当前宿主和实际 profile:Web 查看 dsh --version;官方 Desktop 查看应用“关于”中的版本,不用系统终端的 npm dsh 版本替代。无法判断就先问我。

- Web 版:只读确认 web profile 已安装 dsh-skin-market,再执行 dsh plugin --profile web add "dsh-skin-market@latest"。
- 官方 Desktop:只读核对版本和插件状态,逐步指导我在桌面应用「插件 → 添加插件」中输入 dsh-skin-market@latest、确认更新结果并按提示启用;每次只给下一项操作,等我反馈后继续。安装、启用及重启由我在应用界面完成,不要代操作、执行 Desktop 安装命令或修改 profile。

Web 更新后验证同一宿主的 dsh-skin-market 依赖和 bundle;Desktop 根据插件页状态和我的实际反馈核对结果,没有核实就不要声称成功。告诉我更新前后版本及需要重启哪个宿主。不要替我更新或卸载其他皮肤。

使用皮肤

打开「设置 → 皮肤市场」或 「插件 → dsh-skin-market」

从市场安装具体皮肤

可直接安装的 npm 皮肤会使用「安装」或「安装并使用」流程。官方 Desktop 默认先安装,再进入使用确认;取消使用确认时,皮肤包会保留,但不会启用。

标为「需手动安装」的 GitHub 或 monorepo 子目录皮肤,需要把市场提供的完整固定目标交给 Agent,并由你在 Desktop 的「插件 → 添加插件」中确认。不要把完整 commit 或 &path:/子目录 改成 latest、仓库主分支或另一个包名。

点击展开手动皮肤安装流程

Agent 先只读确认当前 Desktop 版本和其他已启用的皮肤;发现冲突时列出名称,指导你在应用中停用,并核对停用结果后再继续。拿不到启用状态时,应请你提供插件列表或界面状态,不能把“无法确认”当成“没有冲突”。

安装目标使用面板给出的完整固定 spec。GitHub 目标保留完整 commit;monorepo 子包还要保留 &path:/子目录,例如 github:owner/repo#<完整 commit>&path:/packages/skin。没有 npm 包时,不要把该目标换成包名、latest 或仓库主分支。

Agent 每次只指导一项操作,等你反馈后继续:打开「插件 → 添加插件」、粘贴完整目标、确认安装结果、按提示启用,最后按当前版本要求完全退出并重新打开应用。Agent 不代点安装或启用,不执行 Desktop 安装命令,也不修改 profile。界面不支持该目标或安装失败时,先核对原始报错和维护者说明,再决定下一步;依赖伴生包的皮肤须核对完整安装要求。
这些说明不改变市场里 npm 一键安装的流程,也不代表所有 GitHub 皮肤或子目录皮肤都已在官方 Desktop 上完成实机验收。

常见问题与故障处理

先按市场弹窗或横幅给出的具体原因处理。不要因为显示「已安装」就重复安装,也不要因为某次启用失败就直接卸载整个配置档。

| 情况 | 先做什么 |
| 网络或下载超时 | 重试一次;持续失败时复制市场诊断日志,检查 DSH 实际使用的网络和安装源 |
| 已安装但没有生效 | 进入皮肤详情点击「使用」,检查是否显示「待重启」或「未生效」及其原因 |
| 启用/停用被其他配置覆盖 | 按弹窗指出的组件处理;不要反复重装。市场能安全定位覆盖时,会给出明确的修复入口 |
| 安装被新包保护阻止 | 只允许报错中明确指出的那个精确版本,或等待保护期结束;不要关闭全局保护 |
| 操作结果正在确认 | 等待市场核对宿主结果,不要再次点击安装、启用或卸载 |
| 页面因皮肤冲突无法操作 | 停止对应的 DSH Web 进程后,使用下面的 Web 重置命令 |

安装被新包保护阻止

市场会尽量合并当前配置档中重复的精确版本例外。仍被阻止时,只有在确认包名和版本来自本次报错后,才允许这一版本继续;也可以等待 pnpm 的保护期结束。市场不会为整个包或所有未来版本关闭保护。

需要 Agent 帮忙处理新包保护错误?

请处理这次 DSH Desktop 的新包保护错误。先确认 Desktop 实际使用的 profile 名称和目录,并从本次 ERR_PNPM_MINIMUM_RELEASE_AGE_VIOLATION 诊断中确认被阻止的精确包名和版本;不要把正在安装的皮肤直接当成被阻止的包。

仅处理这个 profile 的 pnpm-workspace.yaml 中 minimumReleaseAgeExclude 字段。先合并同名规则中已经允许的版本,保留其他规则、注释和全局年龄策略。如果报错中的精确版本确实没有例外,先向我展示包名、版本和来源,由我确认后才添加这个精确版本。不要设置 minimumReleaseAge=0,不要允许整个包的未来版本,不要读取 .env、凭据或其他存放秘密的配置。混合配置可能含秘密时,先取得指定字段的限定读取授权。

如果你正运行在这个 DSH 中,不要修改自己的活动组合配置、重启或安装当前宿主;先准备可重复执行的 apply 与 rollback 方案,交给外部终端或独立 Agent 执行。Desktop 包操作由我在官方页面重试。最后核对实际安装版本和组件状态,报告具体结果。

Web 页面异常时重置皮肤

如果皮肤冲突导致 DSH Web 页面无法操作,先停止当前 DSH Web 进程,再执行:

~/.dsh/profiles/web/node_modules/.bin/dsh-skin-market-reset --profile web

这个命令会关闭皮肤市场管理的皮肤并恢复默认外观,但保留已安装的皮肤包和皮肤市场。随后重新启动 DSH Web。官方 Desktop 不要执行这个 Web 配置档命令,请在应用插件管理器或市场中停用冲突皮肤。

在线目录

新皮肤和目录信息会独立更新,不需要先升级市场插件:

- 市场打开时读取最新目录,页面保持打开时约每 5 分钟检查一次,重新获得焦点时也会检查;
- 浏览器会保留最近一次有效目录,网络异常时优先展示缓存;
- 搜索和排序覆盖完整目录,列表按批次加载;
- 目录中的安装目标固定到收录时的版本或完整 commit,市场会在安装前校验目标和入口;
- 社区皮肤不是 DSH 官方或市场的安全背书,使用前请查看皮肤仓库说明、许可证和兼容范围。

提交你的皮肤

如果你开发了 DSH 皮肤,准备一个公开 GitHub 仓库后,在本仓库提交一个 registry/skins/<owner>__<repo>.yml 即可。目录条目只写收录信息,CI 会补全 package、commit、loader id 和预览图。

url: https://github.com/<owner>/<repo>

monorepo 子包再加 subpath:。YAML 只允许 url、subpath、name、author、description、screenshots;不要写 package、rowId、category、tags 或 install。目录生成文件 data/catalog.json 不需要在社区 PR 中维护。

收录要求:

- 必须是公开、可安装的 DSH Web 皮肤仓库或 monorepo 子包;
- 安装来源固定到完整 40 位 commit SHA;
- 仓库或 package 元数据提供 package、row ID、许可证和 DSH 兼容范围;
- 预览图来自仓库中的真实界面截图;
- 收录不等于安全认证或官方背书。

点击展开提交皮肤提示词

复制以下整段提示词给你的 Agent:

请把我的 DSH 皮肤提交到 DSH 皮肤市场。

皮肤仓库:<你的皮肤仓库地址> 目标目录仓库:https://github.com/kingOfSoySauce/dsh-skin-market 目录路径:registry/skins

请自主完成以下工作:
1. 只用只读方式确认皮肤仓库是公开的 GitHub 仓库(或 monorepo 子目录),且确实是可安装的 DSH Web 皮肤。不要读取 .env、凭据或聊天记录。
2. fork 或 clone 目标目录仓库并新建分支。在 registry/skins 下只新增一个 YAML,不要覆盖已有条目,不要修改 data/catalog.json。
3. YAML 必须写成薄条目。只允许 url、subpath、name、author、description、screenshots。多写 package、rowId、category、tags、modes、compatibility、install 等字段会失败;CI 会从皮肤仓库补全其余字段:

url: https://github.com/<owner>/<repo>
subpath: packages/my-skin # 仅 monorepo 子包需要
4. 预览图放在皮肤仓库的 screenshots.json 或 README 内;不要用 SVG、data URI 或第三方图床。
5. 不要写完整 schema。若 registry:check 报缺少 id/install,删掉多余字段再跑,不要补全 schema。
6. 在目标目录仓库根目录运行 npm run registry:check。不得安装到我的真实 DSH 配置档。
7. git diff --name-only 应只有 registry/skins/<条目文件>.yml。提交并向目标目录仓库创建 PR,标题 feat(registry): add <皮肤名>。
8. 返回 PR 链接;没有 GitHub 权限时只准备好分支和可复制的 PR 内容。

收录不等于安全认证。不要声称该皮肤已被 DSH 官方、安全团队或市场背书。

安全与边界

- 市场只能安装目录中收录的皮肤标识,不接受任意命令或安装地址。
- 市场不会代替你登录 GitHub,也不会静默创建 PR;提交皮肤时,是否 fork、提交或创建 PR 由你和 Agent 的实际操作决定。
- 社区皮肤不是 DSH 官方或市场的安全认证。安装前请查看皮肤仓库、许可证、兼容范围和来源。

本地开发

需要 Node.js 22 或更高版本。

git clone https://github.com/kingOfSoySauce/dsh-skin-market.git
cd dsh-skin-market
npm install
npm run dev

npm run dev 启动使用 Mock Host 数据的预览页面,不会修改任何 DSH 配置档。

本地开发目录条目时,可以让市场固定读取当前构建包内的目录:

DSH_SKIN_MARKET_LOCAL_CATALOG=1 dsh web

常用检查命令:

npm run registry
npm test
npm run typecheck
npm run build

完整的本地安装和人工验收步骤见 TESTING.md。

License

MIT
预览分享卡片长什么样 ↓kingOfSoySauce/dsh-skin-market
分享 · DeepSeek Harness Hub
kingOfSoySauce/dsh-skin-market

DSH皮肤市场Skin Market 已收录五百+皮肤、桌宠、开屏动画等;有便捷的社区收录入口,并且已有多位开发者提交皮肤;有在线页面方便在线浏;有方便安装管理本地皮肤的插件

回到顶部