Back to home

wsifan31-bit

Smart-DSH-Market

No description

Stars
1
Language
JavaScript
Created
Aug 16, 2026
Updated
Aug 16, 2026

Introduction

Smart DSH Market

带"项目阶段感知推荐"的已验证 DSH 插件市场:看懂你的项目处于哪个阶段,告诉你"为什么装这个插件"。

Version License DSH Web

简体中文 · English

本项目是 YELEBAI/dsh-plugin-marketplace(MIT)的派生版:底座(验证注册表、扫描/审计、安装/更新/卸载管线)保持上游实现并保留上游版权,新增项目阶段感知推荐层。

这是什么

在 DeepSeek Harness 设置 → 插件 → 插件市场里,浏览一个经过验证的插件市场,并且:

  • 看懂你的项目:从本地 git 历史(提交频率、文件类型分布、测试占比等)判断项目处于哪个阶段(架构期 / 原型期 / 开发期 / 测试期 / 打磨期 / 维护期),并给出依据;
  • 主动推荐:按 匹配度 40% / 质量 20% / 增长 15% / 新鲜度 10% / 兼容性 10% − 风险 打分排序,前几名保证类别多样;
  • 每条推荐都讲道理:卡片上显示推荐分、风险标记和证据化理由;
  • 三档模式:自动 / 需确认(变化先问)/ 手动(你说了算),随时可纠正;
  • 本地优先、零上传:打分与阶段检测 100% 离线运行,不调用模型、不上传任何数据;
  • 安装安全不变:安装仍走原版已验证管线(精确 commit 锁定、bundle 校验、冲突诊断)。

[!IMPORTANT] 市场不会直接展示 GitHub dsh-plugin topic 下的所有仓库。只有经过扫描器验证并写入中心 Registry 的插件,才会进入市场。

为什么使用它?

能力说明
🔍 自动发现每两小时扫描一次 topic:dsh-plugin archived:false
✅ Registry 验证检查 manifest、bundle patch、loader entry、运行产物和精确安装来源
⚡ 一键安装仅对全部自动安装条件均通过的插件开放
🤖 Agent 安装为需要构建、生命周期脚本或人工判断的插件创建受约束的安装 Agent
🧭 安装 SkillAgent 强制加载内置安全工作流,自动选择精确来源、隔离构建或停止路径
🧱 Agent 工作区默认使用市场专属工作区,也可选择已有目录,避免污染项目工作区
⌨️ 手动命令安装安全解析官方 DSH GitHub 安装命令,验证后加入当前 Profile
🧰 安装管理在当前 Profile 中更新、卸载、启用或停用插件,并可安全重启 DSH
📈 插件发现支持分类、搜索、Star 排序和最近 7 天增长趋势
🔄 市场自更新直接检查本仓库版本,并将更新来源固定到解析后的精确 commit

快速开始

1. 安装

dsh plugin --profile web add github:wsifan31-bit/smart-dsh-market#v0.1.1-smart

本地开发安装:

dsh plugin --profile web add D:/path/to/dsh_Market

2. 启动

dsh --profile web

3. 打开市场

进入 设置 → 插件 → 插件市场

市场包含三个子页面:

  • 插件市场:搜索、分类、排序、查看验证信息并安装插件。
  • 已安装插件:过滤、检查更新、更新、卸载、启用或停用当前 Profile 的插件。
  • 管理与诊断:手动命令安装、选择插件安装位置并执行冲突诊断。

[!NOTE] 安装位置与依赖解析:本插件的 host 端在运行时引用两个框架共享协议包 (@deepseek-ai/dsh-typert-protocol@deepseek-ai/dsh-app-boot)。DSH 的 Typert 网关依赖同一份 dsh-typert-protocol 模块实例做端点发现(装饰器 标记存在模块私有状态里),因此这两个包按设计保持 peerDependency、由 DSH 运行时从 hoisted 存储提供——不要把它们改成 dependencies 或打进 bundle: 第二份模块状态会让市场服务静默失效。安装必须让插件实体落在 Profile 的 node_modules 作用域内(上方 CLI / GitHub / npm 安装方式均满足:实体在 profiles/<name>/node_modules 内,依赖向上解析到框架的 hoisted 存储)。 用 link:/file: 把插件目录直接指向 Profile 树之外且不安装依赖时, 启动会报 ERR_MODULE_NOT_FOUND: Cannot find package '@deepseek-ai/dsh-typert-protocol'; 自定义安装目录请使用市场"管理与诊断 → 安装位置"面板——市场管线会自动把 缺失的 Host peer 链接进插件目录。

安装模式

模式触发条件市场行为
一键安装精确 GitHub commit 或 npm 版本已通过全部检查直接交给 DSH 官方插件命令安装
手动命令安装用户提供官方 DSH GitHub 安装命令解析命令、锁定 commit、验证 Bundle 和冲突后安全安装
Agent 安装需要构建授权、生命周期脚本、额外配置或进一步核验创建绑定 Registry 证据的 DSH Agent 会话
查看说明当前 Profile 不兼容、身份无法确认或缺少可安全执行的路径不执行命令,只打开作者的安装说明

自动安装始终使用 Registry 验证过的精确 GitHub commit 或精确 npm 版本,不会把可变的 mainlatest 或 Release 下载地址直接交给包管理器。

手动命令安装

管理与诊断 → 手动命令安装 中可以粘贴:

dsh plugin --profile web add github:owner/repo#ref

也可以只填写 github:owner/repo#ref。输入内容不会交给 Shell;市场只接受当前 Profile 的 单条 GitHub 安装命令,并拒绝额外参数、管道、多命令和危险 ref。tag、分支或省略的 ref 会先解析为精确 commit,随后验证 package.json、bundle patch 和冲突。安装过程禁用生命周期 脚本;安装成功后自动加入 Profile 的 bundle 层,并显示在 已安装插件 页面。

引导安装 Agent

仍处于引导安装的插件会显示 Agent 安装;已安装插件存在引导型更新时,会显示 Agent 更新

Agent 任务会固定以下上下文:

  • Registry 验证过的仓库、包名、版本和唯一 commit;
  • 当前 Profile、bundle patch 和扫描器给出的分类原因;
  • 插件市场专用 Agent 工作区的绝对路径;
  • README、Issue、脚本和依赖均属于不可信输入的安全边界;
  • 安装后复查 Profile 依赖、bundle 层和启用状态的验收要求。

每个引导任务的第一步都会加载插件内置的 install-dsh-plugin Skill。Skill 优先选择最快的 安全路径:已有完整运行产物时使用精确 commit 并禁用脚本;缺少产物时在临时目录隔离构建; Release tarball 无可信摘要、包身份不一致、Bundle/入口缺失或出现冲突时直接停止。内置的只读 检查器会同时核验 Git HEAD、包名、版本、Bundle patch、Host/Client 入口、生命周期脚本及当前 Profile 的 Bundle ID/Cordis 服务冲突。

Agent 会先只读检查精确 commit。执行安装、构建、preparepostinstall 等第三方代码前,仍由 DSH 原生审批层逐项请求确认,市场不会替用户授权。更新时会保留现有配置、Bundle 顺序和启停状态,并保留旧的精确来源用于回滚。无法证明安装源、包身份、Profile 兼容性或运行产物时,Agent 会停止并说明缺少的证据。

安装成功后,Agent 的最终答复必须包含 启动方法,说明:

  1. 应使用哪个 Profile 启动 DSH;
  2. 是否需要重启;
  3. 插件是否随 DSH 自动加载;
  4. 仍需填写哪些配置;
  5. Web 入口或实际调用方式。

[!NOTE] Agent 默认绑定 $DSH_HOME/marketplace/agent-workspace,不会继承当前或最近的项目工作区。 可在 管理与诊断 → Agent 安装与更新工作区 选择已有目录;Agent 创建后,关闭设置面板即可查看进度并处理审批。

已安装插件管理

操作行为
更新根据 Registry 检查新版本;自动与引导更新使用各自的安全流程
启用 / 停用修改 dsh.profile.bundles,不删除依赖,重启后生效
卸载从当前 Profile 移除插件依赖和对应 bundle
重启 DSH等待正在运行的插件任务结束,沿用相同参数和 Profile 重启
市场自更新直接读取本仓库主分支版本,再将安装来源固定为精确 commit

npm 包内附带构建后的 lib/ 和发布时的 Registry 快照。因此远程 Registry 暂时不可用时,市场仍可使用包内快照。

安装位置、Agent 工作区与冲突诊断

默认情况下,插件实体由 pnpm 直接安装在当前 Profile 的 node_modules 中,所有 pnpm 任务都复用该 Profile 已绑定的 store,避免出现 ERR_PNPM_UNEXPECTED_STORE

安装位置面板允许把后续安装切换到自定义目录(通过 DSH 的目录选择器):

  • 自定义目录中的插件以 file: 依赖关联到 Profile,并把运行入口链接回 Profile 的 node_modules
  • 外置插件缺失的 Host peer 依赖(例如 cordis@deepseek-ai/cordis)会自动链接;
  • 切换目录只影响之后新安装的插件,已有插件保留在原位置并仍可更新或卸载;
  • 目录中存在但未关联 Profile 的插件会单独标记,不提供 Profile 操作。

Agent 工作区面板独立控制引导安装和更新会话。默认目录会自动创建;选择自定义目录时,该目录 必须已经存在且可读写。市场在首次使用时把它注册为 DSH Workspace,并只让之后新建的安装 Agent 使用这个 Workspace;现有 Agent 会话和其他项目 Workspace 不会被迁移或修改。

冲突面板对已启用插件做启发式静态诊断:重复的 Bundle ID,以及常见的 Cordis 服务注册形式(ctx.provide(...)super(ctx, ...)ctx['x'] = ...ctx.x = ...)。诊断结果是启动崩溃的前置防线,不执行 JavaScript,也可能出现误报(例如入口 bundle 内联了其他插件的代码);安装、更新或启用前只阻止新引入的冲突。

Registry 如何工作

flowchart LR
    A["GitHub topic: dsh-plugin"] --> B["两小时增量扫描"]
    B --> C["锁定默认分支的 40 位 commit SHA"]
    C --> D["静态验证 manifest、patch、入口和 npm tarball"]
    D -->|"验证通过"| E["registry/plugins.json"]
    D -->|"证据不足"| F["引导安装审计"]
    D -->|"结构无效"| G["registry/rejected.json"]
    E --> H["DSH 插件市场"]
    F --> H

扫描器不会安装依赖、执行第三方代码,也不会解析 YAML 中的 !!js 内容。临时网络失败会保留上一次有效结果,不会导致市场条目批量下架。

Registry 文件

文件用途
registry/plugins.json已验证插件及其安装策略,公开格式为 v2
registry/discovery.json分类与最近 7 天 Star 增长数据
registry/guided-audit.json所有引导安装条目的逐轮复验结果
registry/install-review.json安装命令、Profile、生命周期脚本与运行产物证据
registry/rejected.json未通过结构验证的候选及原因
registry/state.json增量扫描状态与每日 Star 基线
registry/schema.json核心 Registry 的 JSON Schema

未变化且已确认可自动安装的 GitHub 来源会复用上次结果;所有引导条目和 npm 来源每两小时重新核验。某个插件后来发布了合格的 npm 精确版本后,会在下一轮扫描中自动转为一键安装。

使用自建 Registry

默认中心 Registry:

https://raw.githubusercontent.com/YELEBAI/dsh-plugin-marketplace/main/registry/plugins.json

可以通过环境变量覆盖:

$env:DSH_PLUGIN_REGISTRY_URL = 'https://raw.githubusercontent.com/OWNER/REPOSITORY/main/registry/plugins.json'
dsh --profile web

也可以在插件配置中设置 registryUrl。远程内容默认在内存中缓存 15 分钟并支持 ETag;刷新失败时先使用最近一次有效内容,再回退到包内快照。缓存时间和超时可通过 registryCacheMinutesregistryRequestTimeoutMs 调整。

自建 Registry 可以不提供 discovery.jsonguided-audit.json

  • 缺少 discovery.json 时,插件仍可搜索和安装,但分类显示为“其他”,Star 增长为 0;
  • 缺少 guided-audit.json 时,Agent 仍会依据核心 Registry 的精确 commit 做只读核验,但没有扫描器的辅助审计信息。

自动扫描与 PAT

Registry Scan 工作流 默认每两小时在第 17 分钟执行,也支持在 GitHub Actions 页面手动运行。

扫描优先使用 Actions Secret REGISTRY_GITHUB_TOKEN 中的只读 PAT;未配置时回退到仓库自动提供的 GITHUB_TOKEN。PAT 只用于读取 GitHub API,不参与 Registry 提交;写回仓库仍使用 Actions checkout 的内置凭据。

在仓库 Settings → Secrets and variables → Actions 中添加 REGISTRY_GITHUB_TOKEN 即可。不要把 Token 写入工作流、README 或任何提交。

[!TIP] 公开仓库使用标准 GitHub-hosted runner 通常免费;私有仓库会消耗套餐内 Actions 分钟数,超额后计费。详情见 GitHub Actions billing

首次在本机生成 Registry:

corepack enable
pnpm install
$env:GITHUB_TOKEN = gh auth token
pnpm registry:test
pnpm registry:scan
pnpm registry:audit

扫描器会自动拆分 GitHub Search 的 1,000 条结果上限,并在配额重置后继续。读取限制为:

  • package.json:256 KiB
  • bundle patch:64 KiB
  • npm 压缩包:50 MiB
  • npm 解包内容:150 MiB

安全与验证规则

候选仓库必须满足以下基础条件:

  • package.json 是有效 JSON,并包含合法的小写 npm 包名和语义化版本;
  • dsh.bundle.patch 指向仓库内的安全相对路径;
  • 声明 dsh.client 时,平台必须是 web 且导出 ./client
  • bundle patch 是有效的 YAML 操作数组;
  • patch 至少插入一个 name 等于 npm 包名的 loader entry;
  • 所有公开字段和精确 commit 均通过 Registry Schema 校验。
展开安装分类的完整检查项

Registry 不会只根据某一个关键词决定能否自动安装,而会交叉检查:

  • package.json 中的 host/client 入口及可选的 dsh.marketplace 声明;
  • Git tree 是否确实提交了入口对应的运行产物;
  • README 是否给出 dsh plugin --profile ... add github:...
  • README 使用旧 owner 或别名时,其 GitHub repository ID 是否与候选仓库一致;
  • <profile>your-profilemy-profile 等占位符不会被误认为真实 Profile;
  • 带 Web client 的插件只映射到 web;host-only 插件默认支持 headlessweb
  • 安装命令可以包含 pnpm 的 -w / --workspace-root,但必须保留 DSH CLI 所需的 --profile
  • preinstallinstallpostinstallprepare 生命周期脚本;
  • README Profile 与 manifest 声明是否冲突;
  • 同名同版本 npm 发行版的 Registry URL、SHA-512 完整性、package identity、bundle patch 和全部运行入口;
  • npm 包是否包含 preinstall / install / postinstall 或根级 binding.gyp

GitHub 来源只要包含 preinstallinstallpostinstallprepare,就始终要求构建授权并保持引导安装;已经提交运行产物也不会取消生命周期脚本的风险提示。精确 npm tarball 不会在作为依赖安装时执行 prepare,因此包含完整运行产物且通过静态验证的 npm 版本仍可自动安装。

README 中错误的迁移地址只作为审计信息。如果当前仓库的精确 commit 自身完整且可安装,不会因此被阻断。证据缺失或互相矛盾时,插件保持引导安装,不会靠猜测开放一键安装。

插件作者可以在 package.json 中声明更明确的市场信息:

{
  "dsh": {
    "marketplace": {
      "profiles": ["web"],
      "requiresBuildApproval": false,
      "requiresRestart": true,
      "manualSteps": false
    }
  }
}

中心 Registry 也可以通过 policy/install-overrides.json 为经过人工核对的仓库补充 Profile 或安装信息。

[!WARNING] Registry 验证可以排除错误 topic、普通仓库和结构不完整的伪插件,但不能证明第三方代码绝对安全。插件在 DSH 重启后拥有本机进程权限,安装前仍应确认来源并阅读审批内容。

开发

要求:Node.js、pnpm,以及可用的 DSH checkout。构建默认读取 D:/DSH/deepseek-harness,也可以通过 DSH_CHECKOUT 指定其他位置。

pnpm install
pnpm registry:test
pnpm registry:discovery
pnpm discovery:test
pnpm profile:test
pnpm restart:test
pnpm self-update:test
pnpm guided-agent:test
pnpm build
pnpm verify
pnpm exec tsc --noEmit

发布前需要更新版本、重新生成 Registry、构建 lib/,然后提交产物并创建版本标签。

[!NOTE] 市场 Remote 方法使用 marketplace/installPlugin。不要改回 marketplace/installinstall 是 DSH Remote namespace service 的内部生命周期方法名,会与客户端 API 冲突。

License

MIT © YELEBAI