给 DeepSeek Harnessdsh做的飞书 UI——一个 dsh 原生插件,带面板驱动的控制台:每个…
48.3/100
综合分
35
GitHub 星标
711
npm 周下载
—/5
用户评分
数据截至 2026/10/31 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add @dsh-feishu/dsh-feishunpm 源 · @dsh-feishu/dsh-feishu 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 3 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包@dsh-feishu/dsh-feishu @ 0.3.7
✓Node 引擎要求 >=22.13 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 02:40:25
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 61 处,展示前 61 条)
- 读取密钥环境变量lib/index.js:70
const appSecret = config.appSecret ?? process.env.FEISHU_APP_SECRET; - 读取本地文件lib/index.js:180
files = readdirSync(dir); - 读取本地文件lib/index.js:189
const data = new Uint8Array(readFileSync(join(dir, file))); - 读取本地文件lib/index.js:192
mediaType = readFileSync(join(dir, `${key}.mediaType`), 'utf8').trim(); - 写入本地文件lib/index.js:422
mkdirSync(dir, { recursive: true }); - 写入本地文件lib/index.js:428
await pipeline(stream, createWriteStream(path)); - 执行外部命令固定命令lib/setup/cli.js:150
const probe = spawnSync('sh', ['-c', 'command -v dsh'], { encoding: 'utf8' }); - 执行外部命令来自配置/变量lib/setup/cli.js:166
const child = spawn(bin, ['--profile', profileName], { - 写入本地文件lib/setup/cli.js:280
writeFileSync(manifestPath, JSON.stringify(FEISHU_MANIFEST, null, 2), 'utf8'); - 读取本地文件lib/setup/cli.js:411
if (!options.printEnv && !existsSync(profilePatchPath(options.dshHomeDir, options.profile))) { - 写入本地文件lib/console-exporter.js:59
mkdirSync(dirname(logFile), { recursive: true }); - 写入本地文件lib/console-exporter.js:60
appendFileSync(logFile, `${line} ${message.args.map((arg) => (typeof arg === 'string' ? arg : safeStringify(arg))).join(' ')}\n`); - 读取本地文件lib/log-file.js:26
if (!existsSync(path)) { - 读取本地文件lib/log-file.js:30
const buffer = readFileSync(path); - 写入本地文件lib/memory-transport.js:65
mkdirSync(this.inboxDir, { recursive: true }); - 写入本地文件lib/memory-transport.js:66
mkdirSync(this.actionsDir, { recursive: true }); - 写入本地文件lib/memory-transport.js:67
mkdirSync(this.outboxDir, { recursive: true }); - 读取本地文件lib/memory-transport.js:167
files = readdirSync(this.outboxDir).filter((file) => file.endsWith('.json')); - 读取本地文件lib/memory-transport.js:175
return JSON.parse(readFileSync(join(this.outboxDir, file), 'utf8')); - 读取本地文件lib/memory-transport.js:188
files = readdirSync(this.inboxDir).filter((file) => file.endsWith('.json')); - 读取本地文件lib/memory-transport.js:196
const message = JSON.parse(readFileSync(path, 'utf8')); - 删除本地文件lib/memory-transport.js:203
rmSync(path, { force: true }); - 读取本地文件lib/memory-transport.js:211
files = readdirSync(this.actionsDir).filter((file) => file.endsWith('.json')); - 读取本地文件lib/memory-transport.js:219
const action = JSON.parse(readFileSync(path, 'utf8')); - 删除本地文件lib/memory-transport.js:226
rmSync(path, { force: true }); - 写入本地文件lib/memory-transport.js:233
writeFileSync(join(this.outboxDir, `${String(this.seq).padStart(6, '0')}.json`), JSON.stringify(full), 'utf8'); - 读取本地文件lib/outbound.js:114
const info = await stat(filePath); - 读取本地文件lib/outbound.js:117
bytes = new Uint8Array(await readFile(filePath)); - 读取本地文件lib/session-map.js:42
const raw = readFileSync(this.file, 'utf8'); - 写入本地文件lib/session-map.js:158
mkdirSync(dirname(this.file), { recursive: true }); - 写入本地文件lib/session-map.js:160
writeFileSync(tmp, JSON.stringify(data, null, 2), 'utf8'); - 写入本地文件lib/session-map.js:161
renameSync(tmp, this.file); - 发起网络请求lib/transport.js:38
export const FEISHU_HTTP = axios.create({ proxy: false }); - 发起网络请求lib/transport.js:334
const response = await this.client.request({ - 发起网络请求lib/transport.js:512
const response = await this.client.request({ - 发起网络请求lib/transport.js:553
const response = await this.client.request({ - 读取本地文件lib/setup/create-app.js:93
if (avatarFilePath !== undefined && avatarFilePath !== '' && existsSync(avatarFilePath)) { - 读取本地文件lib/setup/create-app.js:94
buffer = readFileSync(avatarFilePath); - 读取本地文件lib/setup/create-app.js:97
else if (existsSync(DEFAULT_AVATAR_PATH)) { - 读取本地文件lib/setup/create-app.js:98
buffer = readFileSync(DEFAULT_AVATAR_PATH); - 读取本地文件lib/setup/profile-writer.js:25
if (!existsSync(filePath)) - 读取本地文件lib/setup/profile-writer.js:27
const parsed = load(readFileSync(filePath, 'utf8')); - 读取本地文件lib/setup/profile-writer.js:112
if (existsSync(path)) { - 写入本地文件lib/setup/profile-writer.js:113
renameSync(path, backupPath); - 写入本地文件lib/setup/profile-writer.js:115
mkdirSync(dirname(path), { recursive: true }); - 写入本地文件lib/setup/profile-writer.js:116
writeFileSync(path, dump(updated, { lineWidth: 100 }), 'utf8'); - 读取本地文件lib/setup/session.js:21
if (!existsSync(filePath)) - 读取本地文件lib/setup/session.js:25
parsed = JSON.parse(readFileSync(filePath, 'utf8')); - 写入本地文件lib/setup/session.js:40
mkdirSync(dir, { recursive: true }); - 写入本地文件lib/setup/session.js:42
chmodSync(dir, 0o700); - 写入本地文件lib/setup/session.js:49
writeFileSync(tmpPath, JSON.stringify({ cookies: pruneExpiredCookies(cookies) }, null, 2), { - 写入本地文件lib/setup/session.js:53
renameSync(tmpPath, filePath); - 删除本地文件lib/setup/session.js:57
unlinkSync(tmpPath); - 写入本地文件lib/setup/session.js:64
chmodSync(filePath, 0o600); - 读取本地文件lib/cards/StreamingCardController.js:987
const bytes = new Uint8Array(await readFile(filePath)); - 读取本地文件lib/directory.js:11
if (!existsSync(resolvedPath)) { - 读取本地文件lib/directory.js:16
isDir = statSync(resolvedPath).isDirectory(); - 读取本地文件lib/projects.js:59
stats = await stat(gitPath); - 读取本地文件lib/projects.js:68
await stat(join(gitPath, 'HEAD')); - 读取本地文件lib/projects.js:199
entries = await readdir(dir); - 读取本地文件lib/projects.js:224
if ((await stat(fullPath)).isDirectory()) {
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
⚠ 该插件运行需访问外部网络 / 远程 API,部署在国内无外网环境时可能无法正常使用。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh@deepseek-ai/dsh-agent@deepseek-ai/dsh-api-session-controller@deepseek-ai/dsh-client-connection@deepseek-ai/dsh-client-file-upload@deepseek-ai/dsh-commands@deepseek-ai/dsh-credentials@deepseek-ai/dsh-invariants@deepseek-ai/dsh-llm@deepseek-ai/dsh-schedule@deepseek-ai/dsh-scope给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
6 张 · 点击查看大图功能亮点
- 面板驱动控制台
- 命令转为卡片按钮
- 卡内审批与提问
DeepSeek Harness 的飞书 UI:面板驱动的控制台——每条斜杠命令都是 ⚙️ 控制面板卡片上的按钮,审批和提问都在卡片内完成,卡片实时流式更新,扫码即可完成配置。
最近更新
在 GitHub 查看全部 →v0.3.72026-10-25
· What's Changed
· fix: adapt to dsh 0.2.1-rc.2 (@latest) — release v0.3.7
Full Changelog:
原文(未汉化)
v0.3.62026-10-09
· 变更内容
· test(integration):在固定请求集上断言 #62 默认模型
· chore(release):记录 npm latest 0.3.5
· chore:跟踪 dsh @latest 0.2.0-rc.2 — 发布 v0.3.6
完整变更日志:
v0.3.52026-09-28
· 变更内容
· chore(release):记录 npm 最新版本 0.3.4
· fix:适配 dsh 0.1.7-rc.2(@latest)— 发布 v0.3.5
完整变更日志:
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成The Feishu UI for DeepSeek Harness (dsh)
给 DeepSeek Harness(dsh)做的飞书 UI——一个 dsh 原生插件,带面板驱动的控制台:每个 slash 命令都是 ⚙️ 控制面板卡片上的一个按钮,审批和提问都在聊天卡片内完成,扫一次二维码就把整个应用配好。
注意: DeepSeek Harness 仍是预发布版本,版本之间可能有破坏性变更。dsh-feishu 以 dsh @latest (当前为 0.2.1-rc.2)为准构建与验证,从 npm 与从 git 安装都适用。
https://github.com/user-attachments/assets/e9163793-52f2-4e2c-a08a-22b27372be61
2 分半的演示(控制面板、流式卡片、审批与提问)。
展开完整文档(README 剩余 1 节)
The Feishu UI for DeepSeek Harness (dsh) 给 DeepSeek Harness(dsh)做的飞书 UI——一个 dsh 原生插件,带面板驱动的控制台:每个 slash 命令都是 ⚙️ 控制面板卡片上的一个按钮,审批和提问都在聊天卡片内完成,扫一次二维码就把整个应用配好。 注意: DeepSeek Harness 仍是预发布版本,版本之间可能有破坏性变更。dsh-feishu 以 dsh @latest (当前为 0.2.1-rc.2)为准构建与验证,从 npm 与从 git 安装都适用。 https://github.com/user-attachments/assets/e9163793-52f2-4e2c-a08a-22b27372be61 2 分半的演示(控制面板、流式卡片、审批与提问)。 快速上手 从 npm 安装 1. 安装 Node.js ≥ 22.13 macOS / Linux:nvm(https://github.com/nvm-sh/nvm)→ nvm install 22 Windows:https://nodejs.org(或 winget install OpenJS.NodeJS.LTS) node --version 2. 安装 pnpm npm install -g pnpm 3. 安装插件(pnpm ≥ 11 默认拦截 protobufjs 的构建脚本,所以加上 --allow-build=protobufjs 让它执行) npx @deepseek-ai/dsh plugin --profile feishu add @dsh-feishu/dsh-feishu@latest --allow-build=protobufjs 4. 扫一次二维码:创建并配置飞书应用 npx --yes --package @dsh-feishu/dsh-feishu dsh-feishu-setup --new --profile feishu 5. 启动 npx @deepseek-ai/dsh --profile feishu 从源码安装 1. 安装 Node.js ≥ 22.13 macOS / Linux:nvm(https://github.com/nvm-sh/nvm)→ nvm install 22 Windows:https://nodejs.org(或 winget install OpenJS.NodeJS.LTS) node --version 2. 安装 pnpm npm install -g pnpm 3. 克隆并构建 git clone https://github.com/PGZXB/dsh-feishu.git cd dsh-feishu pnpm install pnpm run build 4. 装进 profile npx @deepseek-ai/dsh plugin --profile feishu add link:. 5. 扫一次二维码:创建并配置飞书应用 pnpm run setup:feishu -- --new --profile feishu 6. 启动 npx @deepseek-ai/dsh --profile feishu 然后到飞书里给机器人发消息即可。配置向导会把飞书应用整套搞定,全程不用开网页控制台,也不用手填凭据。如果你已经有应用,改成设置 FEISHU_APP_ID / FEISHU_APP_SECRET(环境变量或 profile 配置),详见 docs/feishu-setup.md。 卸载 从 profile 移除插件 npx @deepseek-ai/dsh plugin --profile feishu remove @dsh-feishu/dsh-feishu 可选——彻底清理:删除 profile 及其 surface 数据 #(路径按默认 dsh home,~/.dsh) rm -rf ~/.dsh/profiles/feishu ~/.dsh/feishu 怎么用 一个飞书聊天对应一个 dsh 会话,机器人就是 agent 的化身。一次典型的使用是这样: 1. 开个聊天。 直接私聊机器人;也可以发 /group <名字> 建个群。群里一般要 @ 机器人(默认策略);如果群里只有你和机器人,不 @ 直接说也行;@ 策略本身可配置。 2. 打开控制面板。 发 /panel 会唤出一张面板卡片。 3. 先定工作目录。 没定目录之前机器人不会开工:点 📚 Pick project 从列表里挑(等价于 /repo),或点 📁 Change dir 直接输入路径(等价于 /cd <路径>)。 4. 直接问。 发消息,agent 跑起来,工具调用、思考过程、markdown、表格一行行流进一张卡片。跑完卡片变绿,答案完整留在里面;停止、复制、重试和 ⚙️ 面板按钮就贴在卡片上。 | 进行中 | 已完成 | | 卡片进行中 | 卡片已完成 | 5. 要审批就批,要回答就答。 agent 需要提权时会弹一张审批卡,点 Allow once 放行(或 Reject 拒绝);它有问题会弹提问卡,点选项或直接回一句。 | 审批 | 提问 | | 审批卡 | 提问卡 | 6. 管会话。 点 🗂️ Sessions 列出所有已保存的会话、直接在卡片上恢复(等价于 /sessions;/resume <id> 也能把某个会话搬进当前聊天),点 ➕ New chat 开新对话、旧的照留(等价于 /clear)。 面板卡片上的每个按钮都对应一个 slash 命令——哪种顺手用哪种;/help 会把所有命令列一遍。 命令 | 命令 | 作用 | | /help | 列出所有命令 | | /panel | 打开控制面板卡(所有命令的按钮版) | | /group <name> | 和机器人建群(无参会弹名称输入卡) | | /cancel | 停下正在跑的回合 | | /cd <path> | 设置本聊天的工作目录(无参会弹路径输入卡) | | /repo [path] | 挑一个项目目录(无参扫描默认 roots;/repo <path> 扫描该路径) | | /status | 查看本聊天的会话状态 | | /feishu-status | 显示运行状态诊断卡 | | /schedule | 列出活跃的提醒 | | /model <provider/model> | 切换本会话的模型(无参打开选择器) | | /export | 把会话日志作为文件发出来 | | /log | 把 dsh-feishu 的日志文件发到本聊天(便于排查问题;提 issue 时建议附上关键日志) | | /sessions | 列出已保存会话(卡片上可恢复) | | /resume <id> | 在本聊天恢复一个已保存会话(无参打开会话列表) | | /clear /new | 开新对话(旧会话仍保留) | | /goal <text> | 设置任务目标(无参会弹文本输入卡) | | /compact | 压缩较旧的对话历史 | | /feedback <text> | 发送反馈(无参会弹文本输入卡) | | /permission <preset> | 切换权限预设(无参打开选择器) | | /plan [on\|off] | 进入或退出计划模式(无参切换) | 能做什么 - 实时流式卡片——工具调用、思考、markdown、表格,边跑边流出来。 - 一键控制面板——/panel 把命令面板全部做成按钮;不用记命令语法,且每个按钮与敲命令完全等价。 - 卡内审批 / 提问——提权审批、回答问题都在聊天里完成。 - 会话不丢——重启守护进程,会话与工作目录都还在;/sessions 可列出、恢复、重命名、归档、导出。 - 一次扫码完成接入——扫一次飞书二维码就建好并配好应用(机器人资料、权限、事件订阅、凭据),并写好 dsh profile。 - 文件双向流动——你发的图片、文件、视频、富文本都会落到工作区成为普通文件,agent 按路径读取;agent 也能把工作区里的文件/图片发回聊天。 - 消息排队与插话——回合运行中发的消息会排队可见;可编辑、删除,或插进正在跑的回合。 - 回合产物——回合产出的文件以 chips 出现在卡片底部,点一下就在聊天里收到。 - 卡片统计与诊断——卡片上显示回合数、工具调用数、token 与当前上下文占用;/feishu-status 显示连接与会话诊断,回合运行中也能用。 - 群聊 + @ 提醒——群里 @ 机器人即可;出错、审批、提问都会 @ 回发起人。 - 回执、白名单、提醒、导出——表情回执、allowedChats / allowedUsers 白名单、定时提醒、会话日志文件。 参与贡献 见 CONTRIBUTING.md 与 SECURITY.md。开发、测试与发布:docs/development.md。 交流群 扫码加入 dsh-feishu 飞书交流群: 致谢 - botmux —— 群聊交互模式的参考:流式卡片、审批,以及扫码驱动的开放平台快速接入流程。dsh-feishu 借鉴的是 botmux 的交互与接入模式,而非其架构——botmux 桥接外部 CLI,本插件则是 dsh 原生、进程内的。 - DeepSeek Harness —— 本插件所服务的平台。 - Lark Open Platform SDK —— 底层所用的 WebSocket 长连接与卡片 API。 License MIT——见 LICENSE。
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
PGZXB/dsh-feishu
给 DeepSeek Harnessdsh做的飞书 UI——一个 dsh 原生插件,带面板驱动的控制台:每个…
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,778已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,110已汉化DeepSeek 客户端
70.9
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,031已汉化DSH
70.7