# dsh-market

> DSH 插件市场：在侧边栏浏览、搜索、个性化推荐、安装与一键管理 DSH 生态插件，本地画像零 token 常驻。

## Metadata

- Author: [@2BingLing](https://github.com/2BingLing)
- Repo: <https://github.com/2BingLing/dsh-market.git>
- GitHub: [2BingLing/dsh-market](https://github.com/2BingLing/dsh-market)
- Stars: 42
- Language: TypeScript
- License: [NOASSERTION](https://spdx.org/licenses/NOASSERTION.html)
- Homepage: <https://dsh.market/>
- Topics: `deepseek-harness`, `deepseek-harness-plugin`, `deepseek-harness-plugins`, `dsh`, `dsh-bundle`, `dsh-market`, `dsh-plugin`, `dsh-plugins`, `dsh-skill`, `dsh-web`, `marketplace`, `plugin-market`, `plugin-marketplace`, `plugin-registry`, `plugin-search`, `web`
- Forks: 1
- Open Issues: 5
- Last push: 2026-08-21T00:16:37.000Z
- Added: 2026-08-16T00:00:00.000Z

## Install

```bash
dsh plugin --profile web add github:2BingLing/dsh-market
```

## Wiki

## 一句话定位
把 DSH 生态的插件和整合包收进侧边栏：浏览、搜索、个性化推荐、一键安装与卸载，全程在本地画像上跑，不打开面板时零 token 常驻。

## 核心能力
- 浏览与搜索：浏览全量已收录插件；中文关键词、标签多选、类型筛选都可用，搜索走本地 Fuse.js，秒级返回
- 个性化推荐：冷启动问卷 / 收藏 / GitHub 加星 / 已装列表共同构成用户画像，"猜你喜欢"按 EMA 衰减动态更新，每条都附"为什么推荐"
- 场景推荐：读取当前会话标题和最近消息（含工具名）零 token 匹配插件标签，给"现在该装什么"的本地化建议
- 一键安装：skill 型走 git clone，cordis 型走 dsh plugin add；带失败重试、安装前快照、回滚；AI 代理安装可让 DSH 子代理读 README 后再执行
- 已装管理：自动检测本机已装（扫 skill 目录 + profile 依赖），支持一键卸载，并检查 npm registry / pushedAt 给出更新提示
- GitHub 集成：在面板里用设备流或 PAT 登录 GitHub，直接给市场里的插件加星/取消加星；设置页还能切"推荐模式"和目标 profile

## 技术实现
- **语言**: TypeScript（ESM 严格模式，主机包与核心包分两层；面板用 React 18）
- **关键依赖**: @dsh-market/core、@dsh-market/schema、fuse.js（本地搜索）、@dsh-market/plugin 自家在 web profile 下运行
- **架构模式**: cordis 双端插件 — host 半注册 `/market/api` JSON-RPC 路由（index.ts:128-475），client 半通过 `sidebar.footer.action` 注入侧边栏按钮、`shell.overlay` 注入全屏面板；数据源走 GitHub Pages 上的 `plugins.json`，本地缓存 1 小时
- **入口文件**: 主机入口 `plugin/ui/src/index.ts`、浏览器入口 `plugin/ui/src/client/index.ts`、纯 Node 核心库 `plugin/core/src/index.ts`

## 适用场景
刚装好 DSH 不确定该装哪些插件的人，不想记一长串安装命令的人；装了 DSH 一段时间、想按自己使用习惯被推荐的人；以及想把若干插件打包管理、希望有"已装/更新/卸载"统一面板的人。

## 前置依赖与兼容性
| 依赖 | 最低版本 | 说明 |
|---|---|---|
| DSH | 未声明 | 通过 cordis 插件协议（dsh.bundle.patch + dshClient.inject）注入 web profile；需启用 `@deepseek-ai/dsh-client-runtime`、`@deepseek-ai/dsh-client-locale`、`@deepseek-ai/dsh-client-ui-slots` |
| Node | >=20 | 仓库根 package.json 的 engines 字段声明 |
| 平台 | macOS / Windows / Linux | 安装器在 Windows 上用 cmd.exe，其他平台走默认 shell；目录删除在 Windows 上会兜底用 `rmdir /s /q` |
| 原生模块 | 无 | 不依赖 node-pty / sqlite / sharp 等原生绑定 |
| 仓库内工具 | blakejs / playwright-core / sharp / tweetnacl | 仅 collector 数据管道使用，不进入插件运行时 |

## 安装方式
```bash
dsh plugin --profile web add github:2BingLing/dsh-market
```

安装后**重启 harness**，侧边栏底部会多一个"插件市场"图标按钮，点击打开 6-Tab 面板：推荐 / 搜索 / 整合包 / 收藏 / 已装 / 设置。

## 配置项
| 配置 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| DSH_HOME | 路径环境变量 | 改写 DSH 主目录（含 skills / profiles / 数据子目录） | `~/.dsh` |
| DSH_SKILLS_DIR | 路径环境变量 | 技能（skill 型插件）安装目录 | 优先取 DSH_HOME/skills，否则 ~/.agents/skills |
| DSH_PROFILES_DIR | 路径环境变量 | profile 依赖清单所在目录 | `~/.dsh/profiles` |
| DSH_MARKET_DATA_DIR | 路径环境变量 | 插件市场本地数据目录（画像、设置、绑定、快照） | `~/.dsh/plugins/dsh-market` |
| 推荐模式（modeOverride） | auto / novice / veteran | novice 更偏好精选和易上手，veteran 放开权重，auto 走画像自动档 | `auto` |
| 目标 profile | 字符串 | 后续一键安装 / 卸载落到哪个 profile | `web` |
| GitHub 绑定 | 设备流 token 或 PAT | 用于同步加星列表（PAT 才能在面板里直接加星/取消加星） | 未绑定 |

> 本地配置文件落在 `~/.dsh/plugins/dsh-market/` 下：`profile.json`（画像）、`settings.json`（模式 + profile 覆盖）、`binding.json`（GitHub 凭据）、`snapshots/`（每次安装的快照，用于回滚）。

## 常见问题

**Q: 这个插件和 dsh.market 网站是什么关系？**

A: 只共享同一份每日 06:00 自动生成的 `plugins.json` 数据。Web 版是独立静态站（dsh.market），插件版是独立 cordis 插件；装插件不影响 Web 站，反之亦然。

**Q: 一键安装失败会留下半成品吗？**

A: 不会。安装器在执行前会拍快照（包括旧目录备份和旧 package.json），失败后自动回滚到安装前的状态；每步最多重试 2 次才放弃。

**Q: 卸载之后数据还在吗？**

A: 卸载插件本身只删 skill 目录或从 profile 依赖里移除包名；本地的画像、设置、GitHub 绑定、整合包浏览记录都留在 `~/.dsh/plugins/dsh-market/`，重装后能继续用。

**Q: 自更新时为什么提示 EPERM？**

A: harness 正在运行，pnpm 替换插件目录里的文件可能被占用。先停掉 harness，再手动跑一次 `npx @deepseek-ai/dsh plugin --profile <profile> add @dsh-market/plugin@latest`，然后重启 harness。

**Q: 哪些功能需要联网，哪些能离线？**

A: 浏览 / 搜索 / 推荐 / 一键安装 / 卸载 / 已装管理 / GitHub 加星都需要联网；本地画像和搜索索引能复用上次缓存。

**Q: 哪些面板功能需要 DSH 服务存在？**

A: "AI 语义搜索"依赖 harness 暴露 `llm` 服务，"AI 代理安装"依赖 `subagents` 和 `agents`，"场景推荐"依赖 `sessionQuery`；服务不可用时面板会降级或给出明确错误。

**Q: 如何让自己的插件被收录？**

A: 两种方式：给仓库打 `dsh-plugin` topic，等次日 06:00 自动管道扫描；或在仓库 issue 区用"提交插件"模板开 issue。

## 上手难度
入门 — 默认零配置可用，没有额外必填项；高级能力（GitHub 绑定、自更新、整合包）藏在"设置"里，按需打开。

## 已知问题与限制
- 自更新插件时，harness 正在运行进程可能让 pnpm 替换文件失败，需先停止 harness 再手动执行安装命令（plugin/ui/src/index.ts:194-199）
- cordis 插件的卸载依赖 pnpm 对依赖键名的大小写敏感，市场里 plugin.name 是 GitHub 仓库原大小写，必须用本地已装的依赖键名（localName）才能正确卸载（plugin/core/src/installer.ts:329-333）
- Windows 上删除 skill 目录可能被占用，删除逻辑内置 5 次重试 + `rmdir /s /q` 兜底，但仍可能需要关闭占用进程（plugin/core/src/installer.ts:289-310）
- AI 语义搜索固定召回 60 个候选池，调 LLM 精排：插件量继续增长时召回深度不会同步增加，避免 token 失控，但同时限制了长尾召回（plugin/ui/src/index.ts:286-308）
- "AI 代理安装"和"AI 语义搜索"只在 harness 暴露对应服务（subagents / llm）时才可用；老版本 harness 可能缺失这两类服务（plugin/ui/src/index.ts:286-414）
- 仓库根目录声明的 engines 为 `node >=20`，比部分 DSH 官方文档建议的版本更宽，但实际安装仍依赖用户 DSH profile 自带的 Node 运行时（package.json:18-20）

---

This document is auto-generated by [deepseek-plugin.org](https://deepseek-plugin.org). HTML page: [dsh-market](https://deepseek-plugin.org/plugins/2BingLing/dsh-market)
Wiki generated by AI (model: `MiniMax-M3`)
