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

插件管理中心 Max-Null/dsh-plugin-center

DeepSeek Harnessv0.4.6
Max-Null6 天前有提交已提供中文文档扫描:高危

本插件属于 @max-null/ 插件系列——这一系列共同构成 SSID思灵 · Seek Soul in…

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

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

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

状态速览

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

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

验证判据与等级说明 →

可信度证据

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

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

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

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

🔴 安全扫描发现高危能力自动 · 静态分析源码
v2.7.0
🔴 扫描:高危尚无人工评估

静态扫描发现安装期即执行代码,或命令参数由运行时变量拼接(参数来源无法静态判定,从严处理)。

命令参数由运行时变量拼接读写/删除本地文件发起外部网络请求
查看扫描证据(共 80 处,展示前 68 条)
  • 请求外部主机raw.githubusercontent.com
    dist/engine.js:39
    const res = await fetch(`https://raw.githubusercontent.com/${repo}/${branch}/README.md`, {
  • 发起网络请求
    dist/engine.js:39
    const res = await fetch(`https://raw.githubusercontent.com/${repo}/${branch}/README.md`, {
  • 读取本地文件
    dist/engine.js:125
    return JSON.parse(await readFile(this.readVersionsPath, 'utf8'));
  • 写入本地文件
    dist/engine.js:135
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    dist/engine.js:136
    await writeFile(path, JSON.stringify(versions), 'utf8');
  • 读取本地文件
    dist/engine.js:147
    const parsed = JSON.parse(await readFile(this.whatsNewDailyPath, 'utf8'));
  • 写入本地文件
    dist/engine.js:159
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    dist/engine.js:160
    await writeFile(path, JSON.stringify({ day, at: new Date().toISOString() }), 'utf8');
  • 请求外部主机registry.npmmirror.com
    dist/engine.js:303
    const res = await fetch(`https://registry.npmmirror.com/${name}/latest`, {
  • 发起网络请求
    dist/engine.js:303
    const res = await fetch(`https://registry.npmmirror.com/${name}/latest`, {
  • 读取本地文件
    dist/engine.js:560
    if (existsSync(patchPath)
  • 读取本地文件
    dist/engine.js:561
    && new RegExp(`^- id: ${escapeRegExp(patchId)}$`, 'm').test(readFileSync(patchPath, 'utf8'))) {
  • 读取本地文件
    dist/engine.js:576
    if (existsSync(logPath)) {
  • 读取本地文件
    dist/engine.js:577
    const text = readFileSync(logPath, 'utf8');
  • 读取本地文件
    dist/skill-provider.js:82
    text = await readFile(path, 'utf8');
  • 读取本地文件
    dist/skill-provider.js:114
    const entries = await readdir(SKILLS_DIR, { withFileTypes: true });
  • 读取本地文件
    dist/skill-provider.js:132
    const text = await readFile(path, 'utf8');
  • 读取本地文件
    dist/meta.js:91
    if (existsSync(pkgPath)) {
  • 读取本地文件
    dist/meta.js:93
    return { pkg: JSON.parse(await readFile(pkgPath, 'utf8')), dir: cand };
  • 读取本地文件
    dist/meta.js:153
    return { pkg: JSON.parse(await readFile(path, 'utf8')), dir };
  • 读取本地文件
    dist/meta.js:176
    if (existsSync(pkgPath)) {
  • 读取本地文件
    dist/meta.js:177
    return { pkg: JSON.parse(await readFile(pkgPath, 'utf8')), dir };
  • 读取本地文件
    dist/meta.js:198
    if (existsSync(runtimes)) {
  • 发起网络请求
    dist/market.js:3
    const res = await fetch(url, { signal: AbortSignal.timeout(20000) });
  • 请求外部主机awesome-dsh-plugin.com
    dist/market.js:29
    const res = await fetch('https://awesome-dsh-plugin.com/plugins.json', {
  • 发起网络请求
    dist/market.js:29
    const res = await fetch('https://awesome-dsh-plugin.com/plugins.json', {
  • 请求外部主机raw.githubusercontent.com
    dist/market.js:50
    const res = await fetch('https://raw.githubusercontent.com/like-study1/Oh-My-DSH/main/data/curated.json', {
  • 发起网络请求
    dist/market.js:50
    const res = await fetch('https://raw.githubusercontent.com/like-study1/Oh-My-DSH/main/data/curated.json', {
  • 请求外部主机raw.githubusercontent.com
    dist/market.js:114
    const res = await fetch('https://raw.githubusercontent.com/2BingLing/dsh-market/master/data/plugins.json', {
  • 发起网络请求
    dist/market.js:114
    const res = await fetch('https://raw.githubusercontent.com/2BingLing/dsh-market/master/data/plugins.json', {
  • 发起网络请求
    dist/update.js:34
    const res = await fetch(`${registry}/${name}/-/${tarballName}`, { signal: AbortSignal.timeout(15000) });
  • 写入本地文件
    dist/update.js:38
    writeFileSync(tgz, Buffer.from(await res.arrayBuffer()));
  • 执行外部命令固定命令
    dist/update.js:40
    const listing = execFileSync('tar', ['-tzf', tgz], { encoding: 'utf8', timeout: 30000 });
  • 执行外部命令固定命令
    dist/update.js:45
    const bundle = execFileSync('tar', ['-xzOf', tgz, file], { encoding: 'utf8', timeout: 30000 });
  • 删除本地文件递归
    dist/update.js:56
    rmSync(tmp, { recursive: true, force: true });
  • 发起网络请求
    dist/update.js:68
    const res = await fetch(`${registry}/${packageName}/latest`, {
  • 发起网络请求
    dist/update.js:94
    const res = await fetch(`${registry}/${packageName}`, { signal: AbortSignal.timeout(8000) });
  • 请求外部主机api.github.com
    dist/update.js:149
    const res = await fetch(`https://api.github.com/repos/${repo.owner}/${repo.repo}/commits?since=${encodeURIComponent(sinceIso)}&per_page=20`, { headers
  • 发起网络请求
    dist/update.js:149
    const res = await fetch(`https://api.github.com/repos/${repo.owner}/${repo.repo}/commits?since=${encodeURIComponent(sinceIso)}&per_page=20`, { headers
  • 读取本地文件
    dist/update.js:167
    const parsed = JSON.parse(readFileSync(CHANGELOG_CACHE_PATH, 'utf8'));
  • 写入本地文件
    dist/update.js:188
    mkdirSync(dirname(CHANGELOG_CACHE_PATH), { recursive: true });
  • 写入本地文件
    dist/update.js:189
    writeFileSync(CHANGELOG_CACHE_PATH, JSON.stringify(trimmed, null, 2) + '\n', 'utf8');
  • 发起网络请求
    dist/update.js:216
    const res = await fetch(`${registry}/${name}`, { signal: AbortSignal.timeout(8000) });
  • 读取本地文件
    dist/update.js:331
    const parsed = JSON.parse(readFileSync(PENDING_INDEX, 'utf8'));
  • 写入本地文件
    dist/update.js:344
    mkdirSync(PENDING_DIR, { recursive: true });
  • 写入本地文件
    dist/update.js:345
    writeFileSync(PENDING_INDEX, JSON.stringify(entries, null, 2) + '\n');
  • 读取本地文件
    dist/update.js:353
    if (existsSync(candidate))
  • 读取本地文件
    dist/update.js:365
    for (const file of readdirSync(PENDING_DIR)) {
  • 删除本地文件
    dist/update.js:367
    rmSync(join(PENDING_DIR, file), { force: true });
  • 读取本地文件
    dist/update.js:379
    if (last.ok && existsSync(tgz)) {
  • 写入本地文件
    dist/update.js:406
    appendFileSync(file, line);
  • 读取本地文件
    dist/update.js:418
    if (existsSync(candidate))
  • 执行外部命令表达式求值
    dist/update.js:497
    child = spawn([command, ...args].join(' '), { cwd, shell: true, windowsHide: true });
  • 读取本地文件
    dist/reconcile.js:15
    const pkg = JSON.parse(readFileSync(join(profileDir, 'package.json'), 'utf8'));
  • 读取本地文件
    dist/reconcile.js:32
    pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
  • 读取本地文件
    dist/reconcile.js:40
    if (!existsSync(dir))
  • 读取本地文件
    dist/reconcile.js:44
    manifest = JSON.parse(readFileSync(join(dir, 'package.json'), 'utf8'));
  • 写入本地文件
    dist/reconcile.js:65
    writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
  • 读取本地文件
    dist/toggle.js:64
    if (!existsSync(patchPath))
  • 读取本地文件
    dist/toggle.js:66
    const text = readFileSync(patchPath, 'utf8');
  • 读取本地文件
    dist/toggle.js:79
    text = existsSync(patchPath) ? readFileSync(patchPath, 'utf8') : '';
  • 读取本地文件
    dist/toggle.js:79
    text = existsSync(patchPath) ? readFileSync(patchPath, 'utf8') : '';
  • 读取本地文件
    dist/toggle.js:204
    const manifest = JSON.parse(readFileSync(join(profileDir, 'package.json'), 'utf8'));
  • 读取本地文件
    dist/toggle.js:214
    return parseInsertEntries(readFileSync(patchPath, 'utf8'));
  • 写入本地文件
    dist/toggle.js:371
    writeFileSync(patchPath, out.join('\n') + '\n');
  • 写入本地文件
    dist/llm-log.js:18
    await mkdir(dirname(file), { recursive: true });
  • 写入本地文件
    dist/llm-log.js:20
    await appendFile(file, line, 'utf8');
  • 读取本地文件
    dist/llm-log.js:46
    const text = await readFile(llmLogPath(dshHome), 'utf8');
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:raw.githubusercontent.com、registry.npmmirror.com、awesome-dsh-plugin.com、api.github.com

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

社区实装还没有人打卡 · 装过的第一个就是你
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-loader@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-host-apiproxy
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 浏览社区插件市场
  • 一键安装插件
  • 更新插件

DSH 插件管理中心:在 Web 界面浏览社区市场、一键安装与更新插件

v0.5.22026-10-29
修 0.5.0 收缩时删多的三处,并改正更新按钮的通路。 · 修复 · 更新按钮装不上:0.5.0 让按钮调官方 install(),而 plugin_manager.installBundle 对已安装的包先查已装、直接以 already-installed 拒绝(弹「该插件已安装,如需升级,请卸载后重新安装」)。改回本插件自己的 update(pnpm add name@version),实测 dsh-better-sidebar 0.28.0 → 0.28.2 原地升级成功。 · 恢复「更新全部」:串行逐项升级,失败项留在行内红字(toast 的 overlay 已下线,没人渲染它)。 · 恢复 LLM 更新:每行一个「LLM 更新」+ 顶部「LLM 更新全部(n)」,确认面板与降级提示两个 overlay 一并回来。docs/设计/LLM驱动插件更新-设计方案.md §1.3 写明机械更新是兜底、LLM 更新是主入口——机械更新看不到 peer/依赖风险,还会把 vendor 魔改覆盖回官方版。 · 恢复启动提醒:有新版时启动弹一次(每天一次节流)。 · 为什么 0.5.0 会删多 只核了「官方有什么」,没读本仓 docs/设计/LLM驱动插件更新-设计方案.md §1.1/§1.3。那份文档写明了机械黑盒的三种事故(浮动版本装崩内核、覆盖 vendor 定制、无决策能力)与「机械更新保留为兜底」的结论。
v0.5.12026-10-29
补 0.5.0 的遗留:标题栏那个「插件中心」按钮点了没反应。 · 修复 · 按钮调的是 window.__pluginCenterToggle(quick-toolbar 的内置适配器),而 0.5.0 把这组全局函数连同旧面板一起删了。现在重新暴露这三个键,落点改成打开官方「插件」页并选中「更新」tab。 · 实现是 DOM 驱动(先点侧栏「插件」,再点 [role=tab] 里的「更新」),与 quick-toolbar 驱动侧栏/底栏按钮同一套做法;找不到目标就停在上一级,不抛错。补了两次延时重试,覆盖面板懒渲染。 · 待定 · 按钮文案仍是「插件中心」。它现在的行为是「跳到更新」,改成「更新」更准确——那要改 quick-toolbar 的适配器,属于另一个包的改动。
v0.5.02026-10-29
定位收缩:不再自带插件市场、安装、启停与诊断面板,只做官方没有的那件事——更新检测。 · Breaking · 删除设置里的「插件中心」面板、顶栏按钮、遮罩面板与 whats-new 弹窗(settings.section / shell.overlay / conversation.session.header.utilities 的注册全部下线)。 · 删除社区市场、一键安装、逐项启停开关、诊断页。 · __pluginCenterOpen / __pluginCenterToggle / __pluginCenterClose 三个全局控制器一并移除(已核对:本工作区内没有插件读取它们)。 · Added · 官方「插件」页的第三个 tab「更新」:挂在 plugins.tab slot 上(官方 Discover 走同一个),order 排在它之后。 · 行内「更新」按钮把精确的 name@version 交给官方安装对话框,构建批准、失败回滚、bundle 校验都留在官方那条链上;兼容性不符的行标记并禁用按钮。 · dsh.client.inject 补 @deepseek-ai/dsh-client-ui-plugin-manager(信息边,不决定加载顺序)。 · 保留 · host 侧全部 RPC 端点(listInstalled / checkUpdates / update / llm-update.* / diagnostics 等)不动,LLM 更新流程仍可由 agent 调用;只是它们的 Web UI 入口随旧面板下线。 · 为什么 · 官方 0.2.x 起内置了插件页(plugin-manager + 清单投影)与「索引源」市场机制,市场浏览/安装/启停全部重叠,且官方更贴近内核(profile 一致性由它保证)。 · 官方 plugin-manager 只有 installBundle / removeBundle,没有 update;已安装清单是只读投影,不比较本地版本与上游。更新检测是唯一没有替代品的部分。 · 旧 UI 与官方页并存时,whats-new 浮层会挡住官方页 tab 的点击(2026-10-29 在隔离 dev 实例里实测到),两套更新入口只会互相干扰。 · 体积 · client.js 126.9 KB → 37.5 KB:删掉注册后 esbuild 把整块旧 UI 摇掉了。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。

README

由 DeepSeek 最新模型翻译生成
dsh-plugin-center 本插件属于 @max-null/ 插件系列——这一系列共同构成 SSID(思灵 · Seek Soul in Darkness) 桌面体验。SSID 是整合它们的盒:dsh-capture · dsh-chat-rail · dsh-chinese-thinking · dsh-draft-polish · dsh-guardian · dsh-habit · dsh-memory · dsh-node-appearance · dsh-plugin-center · dsh-quick-toolbar · dsh-skill-mcp-center · dsh-ssid-panels · dsh-ssid-zh-ui · dsh-achievements · dsh-allostasis · dsh-skills · dsh-ssid-env · dsh-ssid-pwsh-retry · dsh-tone-layer。 给 DeepSeek Harness(dsh)做更新检查——给内置的「插件」页加一个更新 tab。 给 DSH 内置的「插件」页加一个更新 tab:列出已安装插件的上游新版本,一键交给官方安装流程执行。
展开完整文档(README 剩余 1 节)
dsh-plugin-center

本插件属于 @max-null/ 插件系列——这一系列共同构成 SSID(思灵 · Seek Soul in Darkness) 桌面体验。SSID 是整合它们的盒:dsh-capture · dsh-chat-rail · dsh-chinese-thinking · dsh-draft-polish · dsh-guardian · dsh-habit · dsh-memory · dsh-node-appearance · dsh-plugin-center · dsh-quick-toolbar · dsh-skill-mcp-center · dsh-ssid-panels · dsh-ssid-zh-ui · dsh-achievements · dsh-allostasis · dsh-skills · dsh-ssid-env · dsh-ssid-pwsh-retry · dsh-tone-layer。

给 DeepSeek Harness(dsh)做更新检查——给内置的「插件」页加一个更新 tab。

给 DSH 内置的「插件」页加一个更新 tab:列出已安装插件的上游新版本,一键交给官方安装流程执行。

自 0.5.0 起不再自带市场、安装、启停与诊断面板——那些官方已经有了(plugin-manager + plugin-market,后者通过「索引源」提供可安装清单)。本插件只保留官方唯一没有的那件事:更新检测。

功能

- 更新 tab — 内置「插件」页的第三个 tab(排在「已安装 / 发现」之后),列出每个有上游新版本的已安装插件、它的 changelog 行,以及逐行一个更新按钮;顶部另有「更新全部」。
- 原地升级 — 更新走本插件自己的 update(pnpm add name@version)。官方 installBundle 对已安装的包直接以 already-installed 拒绝,只能装新包。
- LLM 更新 — 每行一个「LLM 更新」,顶部一个「LLM 更新全部」:确认后发起一个「插件更新」会话,由智能体按 dsh-plugin-upgrade 技能决策。机械更新看不到 peer/依赖风险,也会把 vendor 魔改覆盖回官方版——见 docs/设计/LLM驱动插件更新-设计方案.md。
- 启动提醒 — 有新版时启动弹一次(每天一次节流)。
- 兼容性 — peer 范围与当前内核不符的条目标记号并禁用按钮。
- 皮肤兼容 — 每个颜色都用 var(--dsw-) token,皮肤插件同样能改这套 UI。
- 自带升级技能 — dsh-plugin-upgrade 技能随包内置(SkillProvider,rank 550),干净机器上 LLM 更新流程也能直接加载。

截图

装完后没有独立入口——它长在内置「插件」页里,作为第三个 tab。

入口: 侧栏「插件」→「更新」tab

| 更新 |
| 更新 tab |

插件市场索引源

自 0.5 起本插件不再自带市场,官方「发现」页吃的是 format 1 索引。目前只有 awesome-dsh-plugin 发布了这种索引(下表三个地址都是它那一份的镜像),另外两个市场没有发布:

| 市场 | 原始清单 | format 1 索引 |
| awesome-dsh-plugin | plugins.json 7557 条 | ✓ 过滤后 3917 条 |
| Oh-My-DSH | curated.json(精选覆盖层:19 条 manual + 340 overrides) | ✗ 未发布 |
| dsh-market | plugins.json 16090 条 | ✗ 未发布(dshmarket.com/index.json 是 awesome 那份的转发) |
这意味着官方发现页目前看不到 Oh-My-DSH 与 dsh-market 的内容。要让它们也进发现页,只能由各市场自己在 CI 里生成 format 1——dsh-market 的数据其实够用(16090 条里 3704 条的首条安装命令是 npm 包名形态、5232 条带 dshEngines),缺的只是逐个查 registry 补精确版本与发布时间。

添加方式

插件 → 发现 → 索引源,粘贴下面任一地址(配一个就够):

| 索引源 | 说明 |
| https://cdn.jsdelivr.net/npm/dsh-plugin-catalog/index.json | 推荐,走 npm 分发(dsh-plugin-catalog 包) |
| https://awesome-dsh-plugin.com/index.json | 原站镜像 |
| https://dshmarket.com/index.json | dsh-market 域名下的同一份转发 |

两点实测结论(2026-10-30 拉取核对):

- 三个地址是同一份文件:title 都是「Awesome DSH Plugin 插件精选」,插件数都是 3917,首条都是 @yolk_vat-y/dsh-project-memory。配一个就够,配三个会在索引源列表里出现三条同名条目——官方按索引的 title 展示、不显示 URL,所以同名条目分不出来。这是展示限制,不是索引坏了。
- 优先 jsdelivr 那个:DSH 给索引源的时间上限是 15 秒,原站在部分网络下会超时,超时等于市场页面空白。

其他可用的索引源

生态里不止 awesome 一家。下面四个都在 2026-10-30 逐个探测过、可用:

| 索引源 | 名称 | 条数 |
| https://cdn.dsh.so/market/index.json | DSH.SO(自述「安装验证 + 安全审计」) | 9404 |
| https://cdn.jsdelivr.net/npm/dsh-plugin-catalog/index.json | Awesome DSH Plugin | 3917 |
| https://dshopen.org/index.json | Open Plugin Market(自述「照顾小开发者」) | 944 |
| https://silentforfar.github.io/dsh-market-index/index.json | Silentforfar 的个人插件 | 4 |

填地址时必须用「终点地址」:DSH 的读取器不接受重定向,遇到跳转直接报 fetch failed: unexpected redirect。DSH.SO 那条就是例子——www.dsh.so/market/index.json 会 307 到 cdn.dsh.so,dsh.so 又 308 跳回 www,两者都会失败,只有 cdn.dsh.so 那个是 200。

没有按专业领域拆分的市场,都是全量索引。多个索引源可以同时配,发现页按源切换显示,不会合并成一张表。

Install / 安装

dsh 的每种使用形态各有一个配置档,插件装进哪个配置档,就只有那个配置档看得见它——「装完没反应」通常就是这个原因。

| DSH | 配置档 | 命令 |
| dsh web(命令行 + 浏览器) | web | dsh plugin --profile web add @max-null/dsh-plugin-center |
| 官方桌面应用 | desktop | dsh plugin --profile desktop add @max-null/dsh-plugin-center |

从 GitHub 源码安装时把包名换成 github:Max-Null/dsh-plugin-center。

重启 DSH 后打开侧栏「插件」,切到「更新」tab。

前置条件:内核须落在 >=0.1.1-rc.1 <0.3.0 内(即 @deepseek-ai/dsh- 的 peer 范围)。范围外 DSH 会静默跳过这个 bundle,不报错也不出现条目。

Uninstall / 卸载

dsh plugin --profile <your profile> remove @max-null/dsh-plugin-center

The built-in Plugins page / 官方自带的「插件」页

侧栏「插件」页出现 本部署没有可管理的 profile,无法安装或启停插件。* 时,那句话来自 DSH 内核,不是本插件。宿主没有 pluginManager 服务时,DSH 就会显示它(packages/boot/plugin-inventory/src/index.ts),而该服务在 packages/bundle/base/cordis.patch.yml 里只由一行 disabled: !!js "!ctx.get('profileContext')" 决定。本插件只往那一页贡献一个更新 tab,别的什么都不做;既不提供也不影响 pluginManager。

两条自查:

1. 卸掉本插件、重启,再打开那一页。若那句话仍在,就与本插件无关。
2. 在 ~/.dsh/profiles/<你的 profile>/cordis.patch.yml 里找有没有把管理器关掉的条目,删掉它:

- id: plugin-manager
disabled: true

开发

pnpm install
pnpm build # tsc (host) + esbuild (browser bundle)

许可

MIT
预览分享卡片长什么样 ↓Max-Null/dsh-plugin-center
分享 · DeepSeek Harness Hub
Max-Null/dsh-plugin-center

本插件属于 @max-null/ 插件系列——这一系列共同构成 SSID思灵 · Seek Soul in…

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