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

一键启动台 liustack/summono

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

点一下鲸鱼图标,装好并启动 dsh 直接开聊

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

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

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add liustack/summono
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

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

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

验证判据与等级说明 →

可信度证据

安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

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

✗npm 包summono(未发布到 npm,仅可源码安装)
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 05:59:12

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

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

可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 94 处,展示前 67 条)
  • 读取本地文件
    src/engine/apps.ts:93
    const entries = await readdir(root, { recursive: true })
  • 读取本地文件
    src/engine/apps.ts:128
    await access('/Applications', constants.W_OK)
  • 写入本地文件
    src/engine/apps.ts:151
    await mkdir(downloads, { recursive: true })
  • 发起网络请求
    src/engine/apps.ts:153
    const res = await fetch(spec.macDmgUrl)
  • 写入本地文件
    src/engine/apps.ts:171
    await pipeline(body, createWriteStream(dmgPath))
  • 读取本地文件
    src/engine/apps.ts:177
    const entries = await readdir(mount)
  • 写入本地文件
    src/engine/apps.ts:181
    await mkdir(dest, { recursive: true })
  • 删除本地文件递归
    src/engine/apps.ts:186
    await rm(mount, { recursive: true, force: true }).catch(() => undefined)
  • 删除本地文件
    src/engine/apps.ts:187
    await rm(dmgPath, { force: true })
  • 执行外部命令固定命令
    src/engine/apps.ts:201
    spawn('cmd', ['/c', 'start', '', path], {
  • 删除本地文件递归
    src/engine/dsh.test.ts:204
    if (dir) await rm(dir, { recursive: true, force: true })
  • 读取本地文件
    src/engine/dsh.test.ts:216
    await expect(readFile(join(dir, 'current.json.tmp'))).rejects.toMatchObject({ code: 'ENOENT' })
  • 写入本地文件
    src/engine/dsh.test.ts:229
    await mkdir(pkgDir, { recursive: true })
  • 写入本地文件
    src/engine/dsh.test.ts:230
    await writeFile(join(pkgDir, 'package.json'), JSON.stringify({ name: '@deepseek-ai/dsh', version: '0.1.0-rc.7' }))
  • 读取本地文件
    src/engine/dsh.test.ts:234
    expect(JSON.parse(await readFile(join(pkgDir, 'package.json'), 'utf8')).version).toBe('0.1.0-rc.7')
  • 写入本地文件
    src/engine/dsh.test.ts:241
    await mkdir(legacyPkg, { recursive: true })
  • 写入本地文件
    src/engine/dsh.test.ts:242
    await mkdir(versionPkg, { recursive: true })
  • 写入本地文件
    src/engine/dsh.test.ts:243
    await writeFile(join(legacyPkg, 'package.json'), JSON.stringify({ version: '0.0.1' }))
  • 写入本地文件
    src/engine/dsh.test.ts:244
    await writeFile(join(versionPkg, 'package.json'), JSON.stringify({ version: '0.1.0-rc.7' }))
  • 删除本地文件递归
    src/engine/dsh.test.ts:644
    if (dir) await rm(dir, { recursive: true, force: true })
  • 读取本地文件
    src/engine/dsh.test.ts:655
    expect(await readFile(dest, 'utf8')).toBe('new-pointer')
  • 读取本地文件
    src/engine/dsh.test.ts:656
    await expect(readFile(`${dest}.bak`)).rejects.toMatchObject({ code: 'ENOENT' })
  • 读取本地文件
    src/engine/dsh.test.ts:657
    await expect(readFile(tmp)).rejects.toMatchObject({ code: 'ENOENT' })
  • 删除本地文件
    src/engine/dsh.ts:443
    await rm(bak, { force: true })
  • 写入本地文件
    src/engine/dsh.ts:445
    await rename(dest, bak)
  • 删除本地文件
    src/engine/dsh.ts:447
    await rm(tmp, { force: true })
  • 写入本地文件
    src/engine/dsh.ts:451
    await rename(tmp, dest)
  • 写入本地文件
    src/engine/dsh.ts:454
    await rename(bak, dest)
  • 删除本地文件
    src/engine/dsh.ts:458
    await rm(tmp, { force: true })
  • 删除本地文件
    src/engine/dsh.ts:461
    await rm(bak, { force: true })
  • 写入本地文件
    src/engine/dsh.ts:466
    await rename(tmp, dest)
  • 写入本地文件
    src/engine/dsh.ts:473
    await mkdir(dir, { recursive: true })
  • 写入本地文件
    src/engine/dsh.ts:476
    await writeFile(tmp, JSON.stringify(value, null, 2))
  • 读取本地文件
    src/engine/dsh.ts:486
    return parseCurrentPointer(await readFile(join(root, currentFile), 'utf8'))
  • 读取本地文件
    src/engine/dsh.ts:507
    const data = JSON.parse(await readFile(join(root, stateFile), 'utf8')) as unknown
  • 读取本地文件
    src/engine/dsh.ts:524
    return { seen: parseSeenMap(JSON.parse(await readFile(join(root, legacySeenFile), 'utf8'))), rejected: [] }
  • 读取本地文件
    src/engine/dsh.ts:536
    return parsePending(await readFile(join(root, pendingFile), 'utf8'))
  • 删除本地文件
    src/engine/dsh.ts:547
    await rm(join(dshDir, pendingFile), { force: true })
  • 读取本地文件
    src/engine/dsh.ts:566
    for (const name of await readdir(versionsDir)) {
  • 读取本地文件
    src/engine/dsh.ts:577
    const pkg = JSON.parse(await readFile(legacyPkgJson(root), 'utf8')) as { version?: unknown }
  • 发起网络请求
    src/engine/dsh.ts:659
    const res = await fetch(url, { signal: AbortSignal.timeout(15_000), redirect: 'follow' })
  • 执行外部命令来自配置/变量
    src/engine/dsh.ts:816
    const probe = spawn(nodeExe(node), [entry, '--version'], {
  • 删除本地文件递归
    src/engine/dsh.ts:842
    await rm(join(versionsDir, name), { recursive: true, force: true })
  • 发起网络请求
    src/engine/dsh.ts:950
    const res = await fetch(dshUrl, { signal: AbortSignal.timeout(1000) })
  • 执行外部命令来自配置/变量
    src/engine/dsh.ts:984
    child = spawn(nodeExe(node), [entry, 'web', '--port', String(dshPort)], {
  • 读取本地文件
    src/engine/runtime.ts:25
    if (existsSync(legacyBaseDir) && !existsSync(baseDir)) {
  • 写入本地文件
    src/engine/runtime.ts:27
    renameSync(legacyBaseDir, baseDir)
  • 写入本地文件
    src/engine/runtime.ts:77
    await mkdir(home, { recursive: true })
  • 读取本地文件
    src/engine/runtime.ts:98
    await stat(path)
  • 执行外部命令来自配置/变量
    src/engine/runtime.ts:111
    const child = spawn(cmd, args, {
  • 读取本地文件
    src/engine/runtime.ts:143
    const entries = await readdir(nodeDir)
  • 写入本地文件
    src/engine/runtime.ts:208
    await mkdir(nodeDir, { recursive: true })
  • 写入本地文件
    src/engine/runtime.ts:222
    await rename(join(nodeDir, name.replace(/ (tar gz|zip)$/, '')), join(nodeDir, version))
  • 删除本地文件
    src/engine/runtime.ts:223
    await rm(archivePath, { force: true })
  • 删除本地文件递归
    src/engine/sources.test.ts:167
    if (dir) await rm(dir, { recursive: true, force: true })
  • 写入本地文件
    src/engine/sources.test.ts:174
    await writeFile(path, 'hello')
  • 写入本地文件
    src/engine/sources.test.ts:183
    await writeFile(path, 'hello')
  • 读取本地文件
    src/engine/sources.ts:106
    const raw = JSON.parse(readFileSync(memoryFile, 'utf8')) as Record<string, unknown>
  • 写入本地文件
    src/engine/sources.ts:128
    void mkdir(dirname(memoryFile), { recursive: true })
  • 写入本地文件
    src/engine/sources.ts:129
    .then(() => writeFile(memoryFile, JSON.stringify(memo, null, 2)))
  • 读取本地文件
    src/engine/sources.ts:195
    for await (const chunk of createReadStream(path)) hash.update(chunk as Buffer)
  • 发起网络请求
    src/engine/sources.ts:236
    const res = await fetch(url, { signal: controller.signal, redirect: 'follow' })
  • 写入本地文件
    src/engine/sources.ts:249
    await pipeline(body, createWriteStream(destPath))
  • 写入本地文件
    src/engine/sources.ts:263
    await mkdir(dirname(destPath), { recursive: true })
  • 删除本地文件
    src/engine/sources.ts:274
    await rm(destPath, { force: true })
  • 删除本地文件递归
    src/main/index.ts:312
    await rm(scratch, { recursive: true, force: true, maxRetries: 3, retryDelay: 100 })
  • 发起网络请求
    src/main/index.ts:324
    const res = await fetch(url)
扫描于 2026/11/4(1 天前) · 范围 入口闭包 + 全包扫描 · 来源 GitHub 仓库

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

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 一键安装启动
  • 点击图标即开聊

一键启动 DeepSeek Harness——免费启动器兼安装器,专为 AI harness 打造。

README

由 DeepSeek 最新模型翻译生成
Summono 一键安装启动 DeepSeek Harness。 🥇 全网最傻瓜 DeepSeek Harness 启动器 🥇 English ·更新日志 ·参与方式 · 👁️ ModLens(视觉) · 🔎 ModSearch(联网搜索) DeepSeek Harness(dsh)没有自己的桌面应用,安装要走终端。Summono 给它补上一个。点一下鲸鱼,dsh 装好、跑起来、直接开聊——零终端、零命令、零设置。Claude Desktop 和 Codex(ChatGPT)应用也从同一屏启动。 实测截图 启动台——任意图标一键直达: DeepSeek Harness 在 Summono 里运行: 交流 欢迎随时提 issue,中英文都行。也欢迎来 X 上聊:@liustack——下一个该一键支持哪个 harness、哪里坏了、接下来该做什么,新版本也是那边先发。 亮点 - 一键装好即开聊。 鲸鱼图标包办一切:私有 Node.js 运行时、dsh 本体、启动、聊天界面直接在应用内打开。零终端,零命令。 - 官方应用直通。 Claude Desktop、Codex(ChatGPT)应用装了即启动,没装则一键安装,自带 App Store 式进度环。 - 与手动安装完全兼容。 托管的 dsh 复用官方状态目录,网上的教程照常有效,你自己装过的副本原样能用。
展开完整文档(README 剩余 1 节)
Summono

一键安装启动 DeepSeek Harness。

🥇 全网最傻瓜 DeepSeek Harness 启动器 🥇

English ·更新日志 ·参与方式 · 👁️ ModLens(视觉) · 🔎 ModSearch(联网搜索)

DeepSeek Harness(dsh)没有自己的桌面应用,安装要走终端。Summono 给它补上一个。点一下鲸鱼,dsh 装好、跑起来、直接开聊——零终端、零命令、零设置。Claude Desktop 和 Codex(ChatGPT)应用也从同一屏启动。

实测截图

启动台——任意图标一键直达:

DeepSeek Harness 在 Summono 里运行:

交流

欢迎随时提 issue,中英文都行。也欢迎来 X 上聊:@liustack——下一个该一键支持哪个 harness、哪里坏了、接下来该做什么,新版本也是那边先发。

亮点

- 一键装好即开聊。 鲸鱼图标包办一切:私有 Node.js 运行时、dsh 本体、启动、聊天界面直接在应用内打开。零终端,零命令。
- 官方应用直通。 Claude Desktop、Codex(ChatGPT)应用装了即启动,没装则一键安装,自带 App Store 式进度环。
- 与手动安装完全兼容。 托管的 dsh 复用官方状态目录,网上的教程照常有效,你自己装过的副本原样能用。
- 永远免费。 MIT 开源。没有付费版,没有「专业版」,没有广告。

安装

去 Releases 下载:Mac 选 .dmg,Windows 选 .exe。

Mac 安装包已通过 Apple 官方签名与公证——下载、拖进「应用程序」、双击打开,没有任何弹窗拦路。

Windows 如果弹出蓝色提示,点「更多信息」→「仍要运行」。

v0.1 在 macOS 上端到端验证过;Windows 真机验证排在下一步。

开发者也可以从源码运行:

pnpm install
pnpm dev

参与方式

Summono 不接受 pull request。项目由单一作者维护、逐行审阅,这是为可靠性做的刻意选择。两种真正有效的参与方式:

- 提 issue。 bug、建议、看不懂的报错、写得不清楚的文档。issue 都会被认真读,并决定接下来做什么。
- Fork。 MIT 协议下你的副本完全属于你,随意修改、随意发布。

细节(包括代码怎么组织)见 CONTRIBUTING.md。

顺手安利

本项目的开发跑在 LIUSTACK Skills 上:动手前 shaping,动手时 coding,坏了 dig,交接用 snapshot。比 Superpowers 更轻,也更强。

npx -y skills add liustack/vibemaster -g

⭐ 如果对你有帮助,给 Summono 和 VibeMaster 点个 star。star 是下一个开发者找到它们的方式。

生态伙伴

DeepSeek Harness 生态里值得推荐的项目。

- 👁️ ModLens —— 为纯文本 DeepSeek / GLM 模型补上视觉能力的外挂插件,图片直接粘贴进对话就能读。
- 🔎 ModSearch —— 为没有联网能力的模型补上网页搜索、X 搜索和页面抓取。

Star History

免责声明

本项目按下方 MIT 协议原样提供,作者不作任何担保,也不为任何特定用途背书。Summono 所安装的 AI 应用与运行时(DeepSeek Harness、Node.js、Claude Desktop、Codex 应用等)归各自厂商所有,受其各自条款约束,由你自行负责。

协议

MIT
预览分享卡片长什么样 ↓liustack/summono
分享 · DeepSeek Harness Hub
liustack/summono

点一下鲸鱼图标,装好并启动 dsh 直接开聊

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