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

社区多端入口 kamanager2012/dsh-community

DeepSeek Harness
kamanager20129 天前有提交已提供中文文档扫描:含敏感能力

你在官方 Web 开的对话,关掉以后在终端或桌面接着聊。

32.9/100
综合分
4
GitHub 星标
—
npm 周下载
—/5
用户评分

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

自动兼容检查未通过:缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装。以下命令仍可尝试,但可能失败。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add kamanager2012/dsh-community
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

缺少 main/exports/bin 入口声明;仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✗npm 包dsh-community(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=22.15.0 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✗入口文件缺少入口声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

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

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

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

可执行外部命令读写/删除本地文件写入剪贴板(不计风险)发起外部网络请求
查看扫描证据(共 63 处,展示前 63 条)
  • 读取本地文件
    apps/desktop/src/contracts-path.ts:15
    return candidates.find((path) => existsSync(path))
  • 读取本地文件
    apps/desktop/src/host-extract.ts:26
    return existsSync(officialHostReady(destRoot)) && existsSync(officialHostBin(destRoot))
  • 读取本地文件
    apps/desktop/src/host-extract.ts:36
    if (existsSync(rooted)) return rooted
  • 读取本地文件
    apps/desktop/src/host-extract.ts:52
    if (!existsSync(input.archivePath)) {
  • 删除本地文件递归
    apps/desktop/src/host-extract.ts:55
    rmSync(input.destRoot, { recursive: true, force: true })
  • 写入本地文件
    apps/desktop/src/host-extract.ts:56
    mkdirSync(input.destRoot, { recursive: true })
  • 执行外部命令来自配置/变量
    apps/desktop/src/host-extract.ts:58
    const result = spawnSync(tarExecutable(), ['-xf', input.archivePath, '-C', input.destRoot], {
  • 读取本地文件
    apps/desktop/src/host-extract.ts:66
    if (!existsSync(bin)) throw new Error(`extract official dsh missing ${bin}`)
  • 读取本地文件
    apps/desktop/src/host-extract.ts:68
    if (!existsSync(appBoot)) {
  • 写入本地文件
    apps/desktop/src/host-extract.ts:71
    writeFileSync(officialHostReady(input.destRoot), 'ok\n')
  • 写入本地文件
    apps/desktop/src/host-log.ts:6
    mkdirSync(logDir, { recursive: true })
  • 写入本地文件
    apps/desktop/src/host-log.ts:7
    appendFileSync(join(logDir, 'host.log'), chunk)
  • 读取本地文件
    apps/desktop/src/json-file.ts:6
    return JSON.parse(readFileSync(path, 'utf8')) as unknown
  • 写入本地文件
    apps/desktop/src/json-file.ts:13
    mkdirSync(dirname(path), { recursive: true })
  • 写入本地文件
    apps/desktop/src/json-file.ts:14
    writeFileSync(path, `${JSON.stringify(value, null, 2)}\n`)
  • 发起网络请求
    apps/desktop/src/main.ts:242
    const response = await fetch(url, { signal: AbortSignal.timeout(1_500) })
  • 执行外部命令来自配置/变量
    apps/desktop/src/main.ts:397
    const child = spawn(
  • 发起网络请求
    apps/desktop/src/main.ts:428
    const response = await fetch(MARKETPLACE_CATALOG_URL, {
  • 写入剪贴板
    apps/desktop/src/main.ts:541
    clipboard.writeText(text)
  • 读取本地文件
    apps/desktop/src/paths.ts:28
    if (npmNode !== undefined && npmNode !== '' && existsSync(npmNode)) return npmNode
  • 读取本地文件
    apps/desktop/src/paths.ts:40
    if (override !== undefined && override !== '' && existsSync(override)) return override
  • 执行外部命令固定命令
    apps/desktop/src/paths.ts:42
    const probe = spawnSync('node', ['--version'], {
  • 读取本地文件
    apps/desktop/src/paths.ts:60
    if (existsSync(unpacked)) return unpacked
  • 读取本地文件
    apps/desktop/src/paths.ts:89
    const cliEntry = existsSync(staged)
  • 读取本地文件
    apps/desktop/src/paths.ts:111
    if (paths.nodeExecutable.includes('/') && !existsSync(paths.nodeExecutable)) {
  • 读取本地文件
    apps/desktop/src/paths.ts:114
    if (!existsSync(paths.cliEntry)) {
  • 执行外部命令来自配置/变量
    apps/tui/src/bin.ts:114
    const result = spawnSync(packaged, [], {
  • 执行外部命令固定命令
    apps/tui/src/bin.ts:121
    const result = spawnSync('pnpm', ['desktop'], {
  • 执行外部命令来自配置/变量
    apps/tui/src/bin.ts:230
    const result = spawnSync(
  • 读取本地文件
    apps/tui/src/compose-patch.ts:15
    const owned = readFileSync(join(patchDir, 'tui-owned.cordis.patch.yml'), 'utf8')
  • 读取本地文件
    apps/tui/src/desktop-launch.ts:22
    return statSync(path).isFile()
  • 读取本地文件
    apps/tui/src/install.ts:6
    return !existsSync(join(dir, 'node_modules', '@dsh-community', 'tui-surface'))
  • 执行外部命令固定命令
    apps/tui/src/install.ts:10
    const result = spawnSync('pnpm', ['install'], {
  • 读取本地文件
    apps/tui/src/profile.ts:50
    const created = !existsSync(join(dir, 'package.json'))
  • 写入本地文件
    apps/tui/src/profile.ts:51
    mkdirSync(dir, { recursive: true })
  • 读取本地文件
    apps/tui/src/profile.ts:54
    const existing = existsSync(manifestPath)
  • 读取本地文件
    apps/tui/src/profile.ts:55
    ? JSON.parse(readFileSync(manifestPath, 'utf8')) as ProfileManifest
  • 写入本地文件
    apps/tui/src/profile.ts:57
    writeFileSync(manifestPath, `${JSON.stringify(buildProfileManifest(existing), null, 2)}\n`)
  • 读取本地文件
    apps/tui/src/profile.ts:60
    if (!existsSync(workspacePath)) {
  • 写入本地文件
    apps/tui/src/profile.ts:61
    writeFileSync(workspacePath, 'packages:\n - .\n\nnodeLinker: hoisted\nautoInstallPeers: false\n')
  • 读取本地文件
    apps/tui/src/profile.ts:65
    if (!existsSync(userPatch)) {
  • 写入本地文件
    apps/tui/src/profile.ts:66
    writeFileSync(userPatch, '# User layer for dsh-community-tui. Applied after community patches.\n[]\n')
  • 写入本地文件
    apps/tui/src/profile.ts:70
    writeFileSync(patchPath, input.communityPatch)
  • 执行外部命令来自配置/变量
    contracts/lib/run-official.ts:11
    return execFileSync(process.execPath, [install.binPath, ...args], {
  • 发起网络请求
    packages/dsh-bridge/src/plugin-catalog.ts:90
    const response = await fetch(url, { signal: AbortSignal.timeout(timeoutMs) })
  • 读取本地文件
    packages/dsh-bridge/src/resolve-bin.ts:40
    return JSON.parse(readFileSync(packageJsonPath, 'utf8')) as OfficialManifest
  • 读取本地文件
    packages/dsh-bridge/src/resolve-bin.ts:68
    if (!existsSync(override)) {
  • 读取本地文件
    packages/dsh-bridge/src/resolve-bin.ts:71
    if (!existsSync(packageJsonPath)) {
  • 读取本地文件
    packages/dsh-bridge/src/resolve-bin.ts:98
    if (!existsSync(binPath)) {
  • 读取本地文件
    packages/dsh-bridge/src/session-store.ts:25
    if (!existsSync(root)) return []
  • 读取本地文件
    packages/dsh-bridge/src/session-store.ts:27
    for (const project of readdirSync(root, { withFileTypes: true })) {
  • 读取本地文件
    packages/dsh-bridge/src/session-store.ts:30
    for (const session of readdirSync(projectDir, { withFileTypes: true })) {
  • 读取本地文件
    packages/dsh-bridge/src/session-store.ts:35
    if (!existsSync(transcript)) continue
  • 读取本地文件
    packages/dsh-bridge/src/session-store.ts:38
    mtimeMs = statSync(transcript).mtimeMs
  • 执行外部命令来自配置/变量
    packages/dsh-bridge/src/spawn-web.ts:114
    const child = spawn(
  • 执行外部命令固定命令
    packages/marketplace/src/cli.ts:48
    const result = spawnSync('npm', ['view', `${packageName}@${version}`, 'dist.integrity'], {
  • 写入本地文件
    packages/marketplace/src/client.ts:45
    mkdirSync(dirname(options.cachePath), { recursive: true })
  • 写入本地文件
    packages/marketplace/src/client.ts:46
    writeFileSync(options.cachePath, JSON.stringify(catalog, null, 2))
  • 读取本地文件
    packages/marketplace/src/client.ts:52
    const cached = parseCatalog(JSON.parse(readFileSync(options.cachePath, 'utf8')))
  • 执行外部命令固定命令
    packages/marketplace/src/install.ts:29
    const result = spawnSync('dsh', argv, { stdio: 'inherit', env: process.env })
  • 读取本地文件
    packages/tui/src/image-input.ts:151
    file = await stat(absolutePath)
  • 读取本地文件
    packages/tui/src/image-input.ts:180
    data = await readFile(item.absolutePath)
  • 读取本地文件
    packages/tui-adapter/src/seams.ts:12
    readFileSync(
扫描于 2026/11/4(0 天前) · 范围 全包扫描 · 来源 GitHub 仓库

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

给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 终端与桌面端续聊
  • 与官方Web共用配置
  • 多平台客户端

DeepSeek Harness 官方版的社区发行版:WSL/Linux 终端、Windows/macOS 桌面端、Linux AppImage,与官方 Web 共用 ~/.dsh,非官方客户端。

README

由 DeepSeek 最新模型翻译生成
dsh-community 你在官方 Web 开的对话,关掉以后在终端或桌面接着聊。 官方 DeepSeek Harness 的跨平台社区入口层:共享同一个 ~/.dsh 会话真源,绝不重写第二套 Agent 循环。 DeepSeek Harness 的社区发行、兼容性与安全验证层。 官方 DeepSeek Harness 是唯一执行内核。本仓不重写 Agent Runtime,而是在已发布的 @deepseek-ai/dsh 周围维护四件事:精确上游版本与契约跟踪、跨平台社区发行、第三方插件兼容性注册表、发行与插件安全证据。 项目共有 5 个 Community endpoints:WSL/Linux 终端、Windows Desktop、macOS Desktop、Linux AppImage、Android。前 4 个当前已有 Published Latest 发行产物;Android 的既有源码已恢复到本仓 apps/android 活跃主线,当前仍为 [UNVERIFIED],尚未进入 Published Latest。所有已发行入口默认共享官方 Runtime、官方插件链和同一个 ~/.dsh Session 真源。 你今天在官方 Web 开的对话,关掉以后用 dsh-community 终端可以接着聊;再打开 Desktop,仍然是同一条会话。
展开完整文档(README 剩余 1 节)
dsh-community

你在官方 Web 开的对话,关掉以后在终端或桌面接着聊。
官方 DeepSeek Harness 的跨平台社区入口层:共享同一个 ~/.dsh 会话真源,绝不重写第二套 Agent 循环。

DeepSeek Harness 的社区发行、兼容性与安全验证层。

官方 DeepSeek Harness 是唯一执行内核。本仓不重写 Agent Runtime,而是在已发布的 @deepseek-ai/dsh 周围维护四件事:精确上游版本与契约跟踪、跨平台社区发行、第三方插件兼容性注册表、发行与插件安全证据。

项目共有 5 个 Community endpoints:WSL/Linux 终端、Windows Desktop、macOS Desktop、Linux AppImage、Android。前 4 个当前已有 Published Latest 发行产物;Android 的既有源码已恢复到本仓 apps/android 活跃主线,当前仍为 [UNVERIFIED],尚未进入 Published Latest。所有已发行入口默认共享官方 Runtime、官方插件链和同一个 ~/.dsh Session 真源。

你今天在官方 Web 开的对话,关掉以后用 dsh-community 终端可以接着聊;再打开 Desktop,仍然是同一条会话。

One Harness. Five community endpoints. Four shipped today; Android active / UNVERIFIED. Runtime / Session / 插件事实仍归官方内核所有;社区层只维护发行、UX、兼容性与验证,不 vendor 官方源码,不另建第二套 Agent loop 或 Session store。

本仓的 Compatibility Registry 不是 awesome-list:第三方插件条目记录实际 testedDsh 版本、包完整性以及 network / data egress / credentials / filesystem / process / persistence 等结构化安全元数据;安装仍走官方 dsh plugin add 链。

| 状态 | 去哪看 |
| Published Latest | releases/latest;真实 tag、安装包名、release/asset 证据以 current-release.json 为准 |
| Candidate Source | 当前源码候选的 candidateTag、官方 core pin、workspace 产品号与 Dual-Badge 以 current-release.json 为准 |
| Historical / Pre-release | Releases |

Candidate Source 与 Published Latest 是两条独立状态。 源码可以先升级到新的官方候选版本,而 GitHub Latest、已发布安装包、插件 testedDsh 和真实 User-Loop 证据继续停留在上一个已验证版本。不要从 releases/latest 的版本号反推当前 workspace 版本,也不要从源码候选版本伪造尚未发布的安装包。

五个社区端的状态、Candidate / Published 身份、安装包名和证据标签统一以 current-release / current-release.json 为准。发行产物使用 keyless cosign 签名;验证方法见 release 文档。

| 发行面 | 命名 | 入口 |
| 官方 Web | 官方上游兼容入口,不是 Community 发行端 | npx @deepseek-ai/dsh web |
| WSL/Linux 终端 | 社区端 1:Terminal / TUI | dsh-community / dsh-community-tui / pnpm tui |
| Windows 桌面 | 社区端 2:Desktop | Published Latest Setup.exe,或 pnpm desktop |
| macOS 桌面 | 社区端 3:Desktop | Published Latest dmg,或 pnpm desktop |
| Linux AppImage | 社区端 4:Desktop | 随 Release 附带;CLI 用户仍以终端为主 |
| Android | 社区端 5:Remote Mobile(活跃源码,尚未发行) | apps/android;目标为轻量 Remote Client,[UNVERIFIED],不进 Published Latest,直到 Remote Android Acceptance 通过 |

命名红线:不叫 dsh-TUI / DeepSeek Harness Desktop(那是别人的产品名),不在 npm 冒用 @deepseek-ai 或 dsh-tui 的包名。我们基于官方内核,不是第二套 Harness。

仓库 · Stable · Releases · 已验证插件

开发基础是已发布的 @deepseek-ai/dsh。我们不 vendor 官方源码,也不用 patch-package 改官方 UI。扩展走外围发行层、契约层和插件验证层。

现在能给谁用

| 你要什么 | 用谁 |
| 真正跑 agent | 官方 npx @deepseek-ai/dsh web |
| 终端 | 本仓 dsh-community(启动官方 dsh --profile headless,不挂第三方 TUI) |
| 局域网远程 Host 接入 | 本仓 packages/remote-adapter(已合入 Noise IK + 局域网传输;移动端保持 [UNVERIFIED]) |
| 下载安装包 | Published Latest(具体 tag / 文件名见 docs/current-release.json;cosign 验证见 release 文档) |
| 已验证能装的社区插件 | Desktop 市场页 · 本仓 pnpm marketplace · packages/marketplace/catalog.json(不是 awesome 目录) |
| 官方表面快照 / 升 rc 契约 | 本仓 |

不要把本仓发到 npm 当 @deepseek-ai/dsh 或 dsh-tui 的替代。

社区生态导航

本仓是唯一用户下载入口。插件发现 CLI 和兼容性目录也在本仓;手册已并入本仓 handbook/。Labs 已并入本仓 archive/ 后删除;独立 Marketplace、Plugins、Edition 仓已在内容合流后删除。

| 仓库 | 角色 | 现在实际是 |
| 本仓 handbook/ | 手册 | 知识 / 证据(原独立仓已并入) |
| 本仓 packages/marketplace | 发现 / 安装 CLI + 兼容性目录 | pnpm marketplace;catalog.json 在本包内;安装仍走官方 dsh plugin add |
| 本仓 archive/deepseek-harness-suite/(原独立仓已并入) | 已归档 Labs | 不要安装;独立仓于 2026-09-13 删除 |

官方执行核心仍是 DeepSeek Harness。社区层不重新实现 Agent loop、不另建 session 目录、不用 patch 改官方 UI。

从源码跑

需要 Node 22.15+、pnpm,以及 DEEPSEEK_API_KEY。官方 0.1.0-rc.8 起,session JSONL 用了 node:zlib 的 zstd API(22.15 才有)。Candidate Source 的实际 pin 以 packages/dsh-bridge/src/pin.ts / current-release.json 为准;latest-tested.json 只是契约兼容性推荐,不是 pin 真源。对话在官方 ~/.dsh。没密钥不会闷头进 Ink。

git clone https://github.com/kamanager2012/dsh-community.git
cd dsh-community
pnpm install
export DEEPSEEK_API_KEY=...
pnpm start # 有对话就接着最近一条,否则开新的
pnpm new # 强制开新对话
pnpm sessions # 查看本地会话历史
pnpm plugins # 查看已安装插件
pnpm desktop # 桌面壳(含社区市场页)
pnpm marketplace -- list # 插件发现 CLI(需先能访问注册表)
pnpm run doctor # 自检(不要裸跑 pnpm doctor,那是 pnpm 自己的)

同一入口也叫 dsh-community(dsh-community-tui 仍可用):

dsh-community # 有对话就接着最近一条 dsh-community new dsh-community resume last dsh-community sessions dsh-community doctor dsh-community version dsh-community plugins # 只读目录;安装仍走官方 dsh plugin add / 桌面市场页 dsh-community desktop

打 Linux 解包目录或 AppImage(预览,未签名):

pnpm desktop:package
./apps/desktop/release/linux-unpacked/dsh-community

pnpm desktop:package -- --appimage

Windows / macOS 安装包由 GitHub Actions(release workflow)在对应系统构建,本地无需坐在那些 OS 上。不要 npm publish 本仓的 workspace 包。发布顺序见 docs/release.md。

硬边界

| 做 | 不做 |
| 依赖已发布的 @deepseek-ai/dsh | 不 vendor 官方 packages/*(Official Source Ownership = 0) |
| Desktop 子进程启动 dsh web,只管理生命周期 | 不把 stdout 解析成业务协议 |
| 默认共用官方 ~/.dsh session 真源 | 不把 DSH 数据迁进 Desktop AppData |
| 我们的 TUI 自己组合、自己列官方 session | 不把参考 TUI 当上游,不维护第二套 session log |
| contracts/ 快照官方表面 | 不维护一套社区 event-types.ts |

成功标准

1. 官方源代码 vendor = 0
2. TUI 对官方 Cordis row 的覆盖数量显著下降(33 → 15 → 8 → 只剩 TUI 自己的 insert)
3. TUI/Desktop 不实现 Agent loop、Session persistence、Tool execution
4. 一次 upstream rc bump,业务 UI 原则上零修改
5. WSL/Linux TUI、Windows/macOS Desktop 与官方 Web 能共享同一 Session 真源
6. 新版本兼容问题首先在 contract CI 爆

当前:1 / 3 / 5 按设计成立;2 社区 overlay 只改官方行,不挂第三方 TUI。第 4 条是官方发新包时的回归。

仓库布局

contracts/ 官方表面快照 + compatibility matrix packages/dsh-bridge 解析官方 bin、生命周期、数据目录 packages/marketplace 插件发现 CLI + catalog.json packages/remote-adapter 远程控制适配器、Noise IK 加密、局域网传输与会话事件投射 packages/tui 社区终端界面库(@dsh-community/tui-surface,基于 Ink) packages/tui-adapter 我们的 TUI 薄 patch + KPI packages/shared-types 社区自己的类型,不是官方 event fork apps/desktop 官方 dsh web 壳 + 官方 session 列表 + 内嵌社区市场页 apps/android Android Remote Client([LABS]/[UNVERIFIED];旧 embedded-runtime 证据待迁移) apps/tui 官方 dsh --profile / --resume 启动器 tests/upstream-contract vendor=0、pin、CLI

Security

见 SECURITY.md:Desktop 的 Electron 加固边界(contextIsolation / 权限默认拒绝 / 导航白名单)、cosign keyless 发行签名的验证方法、~/.dsh 会话数据共享范围,以及如何私下报告安全问题。

Community

贡献与维护入口:Contributing · Governance · Community Conduct · Support · Security。

License

MIT。运行时版权与第三方声明见 NOTICE 和官方包。
预览分享卡片长什么样 ↓kamanager2012/dsh-community
分享 · DeepSeek Harness Hub
kamanager2012/dsh-community

你在官方 Web 开的对话,关掉以后在终端或桌面接着聊。

这是你的仓库?认领条目

回到顶部