围绕 DeepSeek Harness(DSH)打造可审计的桌面发行版。
38.7/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/11/3 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
自动兼容检查未通过:要求 dsh 0.1.2-alpha.4,而最新版为 0.2.1-rc.5;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add ptonlix/dsh-forge该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:需留意
是什么
dsh 原生插件 · browser
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 1 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
⚠︎ 实装验证未通过(dep_tree_unresolvable · 2026/9/28) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装要求 dsh 0.1.2-alpha.4,而最新版为 0.2.1-rc.5;仓库 package.json 标记 private,未发布到 npm,需从源码安装
展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✗npm 包@dsh-forge/core(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.13.0 · 基线 Node 22.19 满足
✗dsh CLI 依赖要求 0.1.2-alpha.4 · 最新 0.2.1-rc.5 不兼容
✓入口文件main/exports/bin 已声明
源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/2 17:43:09
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 45 处,展示前 40 条)
- 读取本地文件apps/desktop/main.ts:169
if (!fs.existsSync(profileAnchor)) fail(`缺少 profile 模块锚点: ${profileAnchor}`, 'PROFILE_DEPENDENCY_ANCHOR_MISSING'); - 读取本地文件apps/desktop/main.ts:185
if (fs.existsSync(manifest)) return fs.realpathSync(directory); - 读取本地文件apps/desktop/main.ts:191
const manifest = JSON.parse(fs.readFileSync(path.join(directory, 'package.json'), 'utf8')) as { name?: unknown }; - 读取本地文件apps/desktop/main.ts:196
const manifest = JSON.parse(fs.readFileSync(path.join(directory, 'package.json'), 'utf8')) as { version?: unknown }; - 写入本地文件apps/desktop/main.ts:213
fs.mkdirSync(path.dirname(link), { recursive: true, mode: 0o700 }); - 读取本地文件apps/desktop/main.ts:216
stat = fs.lstatSync(link); - 删除本地文件apps/desktop/main.ts:240
fs.unlinkSync(link); - 写入本地文件apps/desktop/main.ts:260
fs.mkdirSync(path.dirname(destination), { recursive: true, mode: 0o700 }); - 读取本地文件apps/desktop/main.ts:263
stat = fs.lstatSync(destination); - 删除本地文件apps/desktop/main.ts:267
if (stat?.isSymbolicLink()) fs.unlinkSync(destination); - 写入本地文件apps/desktop/main.ts:270
fs.mkdirSync(destination, { recursive: true, mode: 0o700 }); - 写入本地文件apps/desktop/main.ts:327
fs.mkdirSync(path.dirname(destination), { recursive: true, mode: 0o700 }); - 发起网络请求apps/desktop/main.ts:434
const request = http.get(url, (response) => { - 读取本地文件packages/desktop-services-local/src/full-package-ota.ts:148
parsed = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8')) as unknown; - 读取本地文件packages/desktop-services-local/src/full-package-ota.ts:182
const stat = fs.lstatSync(value); - 读取本地文件packages/desktop-services-local/src/full-package-ota.ts:184
fs.accessSync(value, fs.constants.W_OK); - 读取本地文件packages/desktop-services-local/src/full-package-ota.ts:198
osRelease = options.readOsRelease ? options.readOsRelease() : fs.readFileSync('/etc/os-release', 'utf8'); - 删除本地文件packages/desktop-services-local/src/full-package-ota.ts:232
return fsPromises.rm(file, { force: true }).catch(() => undefined); - 写入本地文件packages/desktop-services-local/src/full-package-ota.ts:325
await fsPromises.mkdir(stagingDirectory, { recursive: true, mode: 0o700 }); - 写入本地文件packages/desktop-services-local/src/full-package-ota.ts:346
await pipeline(source, fs.createWriteStream(partialPackage, { flags: 'wx', mode: 0o600 })); - 写入本地文件packages/desktop-services-local/src/full-package-ota.ts:350
await fsPromises.rename(partialPackage, stagedPackage); - 写入本地文件packages/desktop-services-local/src/full-package-ota.ts:351
await fsPromises.chmod(stagedPackage, 0o600); - 读取本地文件packages/desktop-services-local/src/packages.ts:170
if (!fs.existsSync(file)) fail('pnpm lockfile 缺失,无法验证实际解析来源', 'INSTALL_LOCKFILE_UNKNOWN'); - 读取本地文件packages/desktop-services-local/src/packages.ts:171
const lock = object(parseYaml(fs.readFileSync(file, 'utf8'))); - 读取本地文件packages/desktop-services-local/src/packages.ts:221
if (!path.isAbsolute(capability.profileDir) || !fs.existsSync(capability.profileDir)) - 写入本地文件packages/desktop-services-local/src/packages.ts:244
fs.mkdirSync(this.transactionDir, { recursive: true, mode: 0o700 }); - 删除本地文件packages/desktop-services-local/src/packages.ts:259
fs.unlinkSync(wal); - 删除本地文件packages/desktop-services-local/src/packages.ts:273
fs.unlinkSync(wal); - 删除本地文件packages/desktop-services-local/src/packages.ts:282
fs.unlinkSync(wal); - 读取本地文件packages/desktop-services-local/src/packages.ts:288
if (fs.existsSync(wal)) fs.unlinkSync(wal); - 执行外部命令固定命令packages/desktop-services-local/src/process-tree.ts:34
spawnSync('taskkill', ['/pid', String(pid), '/T', '/F'], { stdio: 'ignore', windowsHide: true }); - 执行外部命令来自配置/变量packages/desktop-services-local/src/process-tree.ts:82
spawn(command, args, { - 读取本地文件packages/desktop-services-local/src/recovery.ts:41
snapshot[file] = fs.existsSync(target) ? fs.readFileSync(target).toString('base64') : null; - 读取本地文件packages/desktop-services-local/src/recovery.ts:50
if (fs.existsSync(target)) fs.unlinkSync(target); - 写入本地文件packages/desktop-services-local/src/recovery.ts:52
fs.writeFileSync(target, Buffer.from(content, 'base64'), { mode: 0o600 }); - 读取本地文件packages/desktop-services-local/src/recovery.ts:59
if (!fs.existsSync(transactionDir)) return Object.freeze({ recovered: false, manualRecovery: false, reason: null }); - 读取本地文件packages/desktop-services-local/src/recovery.ts:61
for (const name of fs.readdirSync(transactionDir).filter((file) => /^install-.*\.json$/.test(file))) { - 读取本地文件packages/desktop-services-local/src/recovery.ts:64
const wal = JSON.parse(fs.readFileSync(file, 'utf8')) as Partial<InstallWal>; - 写入本地文件packages/desktop-services-local/src/recovery.ts:67
fs.renameSync(file, `${file}.recovered`); - 写入本地文件packages/desktop-services-local/src/recovery.ts:81
fs.writeFileSync(file, `${JSON.stringify(value, null, 2)}\n`, { encoding: 'utf8', mode: 0o600, flag: 'wx' });
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/cordis-plugin-group@deepseek-ai/dsh@deepseek-ai/dsh-client-ui-primitives@deepseek-ai/dsh-client-ui-slots@deepseek-ai/dsh-invariants给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
2 张 · 点击查看大图功能亮点
- 打造可审计桌面发行版
README
由 DeepSeek 最新模型翻译生成⚒️ DSH Forge
DSH Forge 铸造台为你的 DeepSeek Harness 构建桌面发行版构建期组合插件 · 打包 Electron 应用 · 锁定并验证依赖
- 直接安装官方版本 本仓库会精选当前DSH插件整合成一个官方桌面端(懒人一键下载安装)官方构建
- Fork 并定制自己的 Harness —— Fork 本仓库, 基于本仓库的内容拓展或者替换相关DSH插件,打包定制属于自己的桌面端 (DSH Forge已为你处理好桌面端的细节)
🎨 DSH Forge 核心特色
DSH Forge 将 Electron 宿主与 DSH 插件分层
1. apps/desktop 是唯一的桌面宿主,负责启动器、窗口安全、generation 生命周期和平台适配;
2. 创建 launcher capability,由 desktop layer 注册私有 @dsh-forge/desktop-services-local provider。
3. 第三方 bundle 只依赖公开的@dsh-forge/desktop-services contract,通过 Cordis 使用 desktopProfiles、desktopPnpm 和 desktopServices,不直接接触 Electron、宿主路径或 pnpm参数。
展开完整文档(README 剩余 1 节)
⚒️ DSH Forge DSH Forge 铸造台为你的 DeepSeek Harness 构建桌面发行版构建期组合插件 · 打包 Electron 应用 · 锁定并验证依赖 - 直接安装官方版本 本仓库会精选当前DSH插件整合成一个官方桌面端(懒人一键下载安装)官方构建 - Fork 并定制自己的 Harness —— Fork 本仓库, 基于本仓库的内容拓展或者替换相关DSH插件,打包定制属于自己的桌面端 (DSH Forge已为你处理好桌面端的细节) 🎨 DSH Forge 核心特色 DSH Forge 将 Electron 宿主与 DSH 插件分层 1. apps/desktop 是唯一的桌面宿主,负责启动器、窗口安全、generation 生命周期和平台适配; 2. 创建 launcher capability,由 desktop layer 注册私有 @dsh-forge/desktop-services-local provider。 3. 第三方 bundle 只依赖公开的@dsh-forge/desktop-services contract,通过 Cordis 使用 desktopProfiles、desktopPnpm 和 desktopServices,不直接接触 Electron、宿主路径或 pnpm参数。 支持快速继承社区插件: - 构建期可组合:distribution.yml、profile、bundle 和静态 catalog 共同定义发行版 - 宿主边界清晰:apps/desktop 聚焦 Electron 和平台职责,公开 contract 与私有 provider 分离,DSH 核心无需改写。 - 可复现、可验证:依赖闭包在构建期解析并锁定,lockfile、SBOM 和打包检查沉淀为发布证据 当前已支持的桌面端功能 - [x] Electron 宿主启动:apps/desktop 负责单实例锁、窗口创建、平台适配和受控退出。 - [x] 安全窗口与导航:启用 Chromium sandbox、context isolation,关闭 Node integration;仅允许当前 generation 的 loopback 页面,HTTP(S) 和 mailto: 外链交给系统,任意新窗口和 file: 导航都会被拒绝。 - [x] Profile 与 DSH Home:开发态可以使用 --profile 选择 profile;打包应用固定构建时的 profile,并将 受管 profile 放入 DSH Home。 - [x] Generation 生命周期:Host、loopback、窗口和 renderer 按序就绪后才提交;支持 last-known-good 回退、失败事实持久化和受管进程 teardown。 - [x] 公开桌面 service:通过 @dsh-forge/desktop-services 提供 desktopProfiles、desktopPnpm 和 desktopServices,调用前校验 protocol。 - [x] 受管 pnpm 与安装恢复(底层 API):支持 inspect、reconcile、remove 和 catalog 确认安装, 带 operation lease、取消、WAL、来源复核和健康检查;当前没有页面端插件安装入口。 - [x] 完整安装包 OTA:支持版本检查、设置页“升级管理”、下载进度、用户确认、Windows/macOS/Ubuntu AppImage 重启回执与失败恢复;Linux OTA 仅支持 Ubuntu 22.04+ 的可写 AppImage。 - [ ] 打包应用运行时 profile 切换:当前发行包固定一个 profile,页面端不提供切换。 - [ ] 页面端插件市场与在线下载/安装。 - [ ] 存储空间管理。 - [ ] 托盘或终端 UI。 🚀 快速开始 环境要求 - Node.js >=22.13.0 - pnpm 11.7.0 - 能运行 Electron 的 macOS、Windows 或 Linux 环境 安装依赖并启动默认开发 profile: pnpm install --frozen-lockfile pnpm dev 切换其他开发 profile:pnpm dev -- --profile developer 使用插件引入 Skill 在你的 DSH Forge Fork 根目录安装 dsh-forge-add-plugin: npx skills add ptonlix/dsh-forge --skill dsh-forge-add-plugin CLI 会提示你选择已使用的 agent 与项目级安装方式。随后直接告诉 agent 要引入的 npm 包或 GitHub 地址,以及可选目标 profile: 使用 $dsh-forge-add-plugin 将 dsh-better-sidebar@0.18.0-alpha.0 引入 developer。 使用 $dsh-forge-add-plugin 将 https://github.com/example/dsh-plugin 引入 developer。 省略目标时默认引入 dsh-forge-official。GitHub 仓库必须固定到 commit,且当前dsh-forge-official profile 只接受已发布的 npm bundle;仅存在 GitHub 来源的插件请指定 developer。 skill 会审核来源和脚本、更新 OpenSpec、依赖、catalog 与 profile,并执行实际 Electron 打包和 smoke;需要执行第三方生命周期脚本时会先请求确认。 🛠️ 常用命令 | 命令 | 作用 | | pnpm run profile:resolve -- dsh-forge-official | 把 profile 解析为 lockfile 和 SBOM 输入 | | pnpm run profile:verify -- dsh-forge-official | 对照运行时和 schema 约束验证组合 | | pnpm run package:desktop -- dsh-forge-official | 为 profile 构建 Electron 安装包 | | pnpm run package:inspect -- dsh-forge-official | 检查安装包内容和运行时事实 | | pnpm run package:smoke -- dsh-forge-official | 启动打包应用并运行 smoke 检查 | 质量与文档门禁: pnpm run check:all pnpm run docs:check pnpm run docs:build 🗂️ 仓库布局 . ├── .agents/ │ └── skills/ # 仓库内 agent 工作流与维护规范 ├── .github/ │ └── workflows/ # CI、发布与站点自动化 ├── apps/ │ └── desktop/ # Electron 宿主 │ ├── bootstrap/ # 启动与单实例入口 │ ├── platform/ # 窗口、安全与原生平台适配 │ └── runtime/ # generation 与运行时编排 ├── assets/ # README 与站点使用的图形资源 ├── build/ # 安装包图标、许可与 macOS entitlements ├── catalog/ │ └── catalog.yml # 外部 bundle 的静态审核事实 ├── docs/ │ ├── design/ # 架构与发行版边界 │ ├── engineering/ # 工程、迁移与验证记录 │ ├── i18n/ # 公开文档清单与双语治理 │ └── reference/ # 配置、service 与操作参考 ├── openspec/ │ ├── changes/ # 活动及归档变更材料 │ └── specs/ # 当前能力规范 ├── packages/ │ ├── bundles/ │ │ └── desktop-layer/ # launcher 临时注入的桌面 bundle │ ├── desktop-services/ # 面向 bundle/Fork 的公开 contract │ └── desktop-services-local/ # 私有 provider:WAL、受管 pnpm ├── profiles/ │ ├── developer/ # 最小开发组合 │ └── dsh-forge-official/ # 默认发行组合 ├── schemas/ # distribution、profile、bundle 与 catalog 契约 ├── scripts/ # 构建、打包、边界、smoke 与发布编排 ├── skills/ │ └── dsh-forge-add-plugin/ # 供 npx skills 发现的可分发 skill ├── tests/ │ └── fixtures/ # 单元、集成、边界与发布测试夹具 ├── tools/ │ └── profile-toolchain/ # resolve、verify、catalog、SBOM 与 CLI ├── website/ │ ├── .vitepress/ # VitePress 配置 │ └── docs.ts # 文档投影与站点导航 ├── distribution.yml # 发行版身份、默认 profile 与平台声明 ├── package.json # workspace 依赖、命令与构建入口 └── pnpm-workspace.yaml # workspace 范围与允许的构建脚本 📚 文档导航 公开文档地图见 docs/README.zh.md。架构归属 docs/design/dsh-forge.zh.md,稳定配置和 service 事实归属 docs/reference/foundation-contracts.zh.md,源/产物与恢复边界归属 docs/engineering/foundation-boundaries.zh.md。 profile 编译器见 tools/profile-toolchain/README.zh.md。 每篇公开页面都由英文 foo.md、中文 foo.zh.md 和 foo.i18n.yaml hash 记录组成。 双语治理规则见 docs/i18n/README.md。 ⭐ Star 历史
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
ptonlix/dsh-forge
围绕 DeepSeek Harness(DSH)打造可审计的桌面发行版。
相关插件 · 浏览器
智能体插件框架deepseek-ai/deepseek-harness
DeepSeek Harnessdsh是由 DeepSeek AI 开发的开源 agent harness智能体框架。
★ 270,422已汉化DSH
71.9
多设备 Agent 看板YaoApp/yao
✨ 所有 Agent 和工作区集中管理,覆盖你的每一台设备。任务看板追踪进度,桌面端、移动端、浏览器、API…
★ 8,147已汉化DSH
71.2
可扩展侧边栏工作台omdsh-dev/DSH-better-sidebar
DSH 的双工作台:原生右侧栏 + 自绘底部面板,并把 ctx.betterSidebar 服务开放给所有插件
★ 4,761已汉化DSH
71.1
浏览器自动化桥Tencent/BrowserSkill
你的 Agent。你的浏览器。连接,就能协作。
★ 9,928已汉化DSH
71
AI 小说创作工作台EthanYoQ/AI-Novel-Writer
AI 小说作家 / AI Novel Writer
★ 1,591已汉化DSH
70.7
智能体浏览器引擎platonai/Browser4
DeepSeek Harness 集成
★ 1,175已汉化DSH
70.4