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

飞书机器人接入 452926826/dsh-feishu-bot

DeepSeek Harnessv0.19.16
45292682663 天前有提交已提供中文文档扫描:含敏感能力

扫码绑定飞书机器人,在聊天里远程操控项目与对话

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

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

自动兼容检查有告警:npm 同名包「dsh-feishu-bot」归属 plutokeating/dsh-lark-bot,装到的可能不是本插件。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add 452926826/dsh-feishu-bot
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:需留意
是什么
dsh 原生插件 · platform
装得上吗
实装验证未通过(dependency_conflict),装前请到仓库确认最近更新与 issue
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 63 天前
档位由哪些信号合成

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

验证判据与等级说明 →
⚠︎ 实装验证未通过(dependency_conflict · 2026/10/26) ——可能是验证环境差异,装前建议到 GitHub 仓库确认最近更新与 issue。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查⚠ 装前注意

npm 同名包「dsh-feishu-bot」归属 plutokeating/dsh-lark-bot,装到的可能不是本插件

展开查看检查明细 ↓

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

✓npm 包dsh-feishu-bot @ 0.19.16
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

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

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

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

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 38 处,展示前 38 条)
  • 读取密钥环境变量
    lib/index.js:164
    const appSecret = process.env.FEISHU_APP_SECRET?.trim();
  • 发起网络请求
    lib/client.js:38
    const response = await fetch('/api/plugins/feishu-binding/status', { cache: 'no-store' })
  • 发起网络请求
    lib/approval.js:70
    const outcome = await approvals.request({
  • 读取本地文件
    lib/binding-status.js:26
    const [image, info] = await Promise.all([readFile(options.qrPath), stat(options.qrPath)]);
  • 读取本地文件
    lib/binding-status.js:26
    const [image, info] = await Promise.all([readFile(options.qrPath), stat(options.qrPath)]);
  • 读取本地文件
    lib/binding-status.js:42
    const parsed = JSON.parse(await readFile(path, 'utf8'));
  • 写入本地文件
    lib/harness.js:82
    await mkdir(path, { recursive: false });
  • 删除本地文件
    lib/registration.js:19
    await rm(path, { force: true });
  • 读取本地文件
    lib/registration.js:23
    const parsed = JSON.parse(await readFile(path, 'utf8'));
  • 写入本地文件
    lib/registration.js:51
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    lib/registration.js:62
    await writeFile(temporary, `${JSON.stringify(stored, null, 2)}\n`, { mode: 0o600 });
  • 写入本地文件
    lib/registration.js:63
    await rename(temporary, path);
  • 删除本地文件
    lib/registration.js:100
    await rm(options.qrPath, { force: true });
  • 写入本地文件
    lib/registration.js:115
    await mkdir(dirname(path), { recursive: true });
  • 写入本地文件
    lib/registration.js:122
    await chmod(path, 0o600);
  • 读取本地文件
    lib/state.js:21
    this.loaded ??= readFile(this.path, 'utf8')
  • 写入本地文件
    lib/state.js:31
    await mkdir(dirname(this.path), { recursive: true });
  • 写入本地文件
    lib/state.js:33
    await writeFile(temporary, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 });
  • 写入本地文件
    lib/state.js:34
    await rename(temporary, this.path);
  • 发起网络请求
    src/approval.ts:101
    const outcome = await approvals.request({
  • 读取本地文件
    src/binding-status.ts:60
    const [image, info] = await Promise.all([readFile(options.qrPath), stat(options.qrPath)])
  • 读取本地文件
    src/binding-status.ts:60
    const [image, info] = await Promise.all([readFile(options.qrPath), stat(options.qrPath)])
  • 读取本地文件
    src/binding-status.ts:80
    const parsed = JSON.parse(await readFile(path, 'utf8')) as StoredCredentials
  • 发起网络请求
    src/client.js:38
    const response = await fetch('/api/plugins/feishu-binding/status', { cache: 'no-store' })
  • 写入本地文件
    src/harness.ts:109
    await mkdir(path, { recursive: false })
  • 读取密钥环境变量
    src/index.ts:175
    const appSecret = process.env.FEISHU_APP_SECRET?.trim()
  • 删除本地文件
    src/registration.ts:40
    await rm(path, { force: true })
  • 读取本地文件
    src/registration.ts:45
    const parsed = JSON.parse(await readFile(path, 'utf8')) as Partial<StoredCredentials>
  • 写入本地文件
    src/registration.ts:78
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    src/registration.ts:89
    await writeFile(temporary, `${JSON.stringify(stored, null, 2)}\n`, { mode: 0o600 })
  • 写入本地文件
    src/registration.ts:90
    await rename(temporary, path)
  • 删除本地文件
    src/registration.ts:132
    await rm(options.qrPath, { force: true })
  • 写入本地文件
    src/registration.ts:148
    await mkdir(dirname(path), { recursive: true })
  • 写入本地文件
    src/registration.ts:155
    await chmod(path, 0o600)
  • 读取本地文件
    src/state.ts:28
    this.loaded ??= readFile(this.path, 'utf8')
  • 写入本地文件
    src/state.ts:38
    await mkdir(dirname(this.path), { recursive: true })
  • 写入本地文件
    src/state.ts:40
    await writeFile(temporary, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 })
  • 写入本地文件
    src/state.ts:41
    await rename(temporary, this.path)
扫描于 2026/11/2(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

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

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-agent@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-session-title@deepseek-ai/dsh-user-approval@deepseek-ai/dsh-workspace
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 扫码绑定飞书机器人
  • 聊天远程操控项目
  • 聊天远程对话

把飞书机器人接入 DeepSeek Harness 的项目和会话

README

由 DeepSeek 最新模型翻译生成
dsh-feishu-bot 通过飞书应用机器人 WebSocket 长连接使用 DeepSeek Harness,不需要公网回调地址。首次启动可通过二维码一键创建并绑定飞书应用,无需手工复制 App ID/Secret。 扫码绑定 插件未找到现有凭据时会自动调用飞书官方 OAuth 2.0 Device Authorization Grant 一键创建应用流程,在 DSH 终端日志直接显示二维码,并生成: ~/.dsh/feishu-bot/feishu-bind-qr.png 使用飞书扫描二维码,在确认页创建并授权应用。扫码用户必须有所在租户创建企业自建应用的权限。二维码通常在约 10 分钟后过期;过期后重启 DSH 会生成新的二维码。 扫码确认后,插件会: 1. 申请机器人发送消息权限 im:message:send_as_bot。 2. 订阅接收消息事件 im.message.receive_v1。 3. 立即将飞书返回的凭据和扫码者 open_id 以 0600 权限保存到 ~/.dsh/feishu-bot/credentials.json,再调用 tenant token API 验证;后置验证失败会记录警告,但不会丢弃已创建应用的凭据或重复创建机器人。
展开完整文档(README 剩余 1 节)
dsh-feishu-bot

通过飞书应用机器人 WebSocket 长连接使用 DeepSeek Harness,不需要公网回调地址。首次启动可通过二维码一键创建并绑定飞书应用,无需手工复制 App ID/Secret。

扫码绑定

插件未找到现有凭据时会自动调用飞书官方 OAuth 2.0 Device Authorization Grant 一键创建应用流程,在 DSH 终端日志直接显示二维码,并生成:

~/.dsh/feishu-bot/feishu-bind-qr.png

使用飞书扫描二维码,在确认页创建并授权应用。扫码用户必须有所在租户创建企业自建应用的权限。二维码通常在约 10 分钟后过期;过期后重启 DSH 会生成新的二维码。

扫码确认后,插件会:

1. 申请机器人发送消息权限 im:message:send_as_bot。
2. 订阅接收消息事件 im.message.receive_v1。
3. 立即将飞书返回的凭据和扫码者 open_id 以 0600 权限保存到 ~/.dsh/feishu-bot/credentials.json,再调用 tenant token API 验证;后置验证失败会记录警告,但不会丢弃已创建应用的凭据或重复创建机器人。
4. 默认只允许扫码者向机器人发指令;可通过 FEISHU_ALLOWED_CHATS 额外开放指定群聊。
5. 删除已使用的二维码并立即连接飞书 WebSocket。

创建完成后,按飞书确认页指引发布应用,将机器人加入群聊或与机器人单聊。无需公网回调地址。

指令

- /lp:列出所有项目
- /up + 项目名或索引:按项目名或 /lp 显示的一基索引进入已有项目,例如 /up + 2
- /np + 项目名:在项目根目录创建并进入新项目
- /lc:按从 1 开始的索引列出当前项目全部对话
- /uc:直接进入最近完成的对话,并返回最近 2 条用户/助手消息
- /uc + 索引:按 /lc 显示的索引进入对话,并返回最近 2 条用户/助手消息
- /nc:在当前项目创建并进入新对话
- /approve:批准当前待审批操作一次
- /reject:拒绝当前待审批操作
- /批准、/拒绝:上述命令的中文别名
- /help:显示帮助
- 其他文本:发送到当前 Harness 对话,并把最终回答发回飞书

收到指令后,机器人会立即发送“思考中…”占位消息;Harness 完成后会把该消息更新为回答。回答超过 3500 个 Unicode 字符时自动拆分为多条消息,优先在换行处切分,不会切断 emoji 等 Unicode 字符。飞书 WebSocket 启用 SDK 自动重连和心跳检测,短暂断线或空闲半开连接会自动恢复。

当当前对话中的工具需要审批时,机器人会主动发送工具名、原因和参数摘要。仅发起该 Harness 对话的飞书会话可以回复 /approve(只批准本次)或 /reject;发送失败、超时和没有对应飞书会话时均拒绝或交给其他已配置的审批渠道处理。

项目和对话选择按飞书 chat_id 隔离,并持久化到 $DSH_HOME/feishu-bot/state.json。每个对话完成后,机器人会向发起 chat 发送完成通知;配置 FEISHU_NOTIFY_CHATS 后也会广播给指定 chat。正在处理消息的 chat 不会收到其他对话的完成通知,避免打断当前聊天;通知中回复 /uc 可直接进入最近完成的对话。

环境变量

二维码绑定不需要配置 App ID/Secret。可选配置:

export FEISHU_PROJECTS_ROOT='/absolute/path/to/projects'
推荐:只允许这些飞书 chat_id 操作 Harness,逗号分隔。
export FEISHU_ALLOWED_CHATS='oc_xxx,oc_yyy'
可选:向这些 chat 广播任意 Harness 对话完成通知;默认至少通知发起对话的 chat。
export FEISHU_NOTIFY_CHATS='oc_ops,oc_owner'

仍支持手工凭据,环境变量的优先级高于扫码保存的凭据:

export FEISHU_APP_ID='cli_xxx'
export FEISHU_APP_SECRET='xxx'

其他可选变量:

- FEISHU_CREDENTIALS_PATH:扫码凭据文件路径
- FEISHU_QR_PATH:二维码 PNG 输出路径
- FEISHU_QR_TERMINAL=false:不在终端日志显示二维码(默认显示)
- FEISHU_REBIND=true:下次启动时删除已保存的本地凭据并重新扫码绑定;成功后应移除该变量
- FEISHU_STATE_PATH:项目和对话选择状态文件路径
- DSH_HOME:Harness 数据目录,默认 ~/.dsh

安装

将发布归档复制到目标机器后安装:

dsh plugin --profile web add /absolute/path/to/dsh-feishu-bot-0.1.4.tgz

如果安装提示 Ignored build scripts: protobufjs,编辑目标 profile 的 pnpm-workspace.yaml,加入:

allowBuilds:
protobufjs: true

然后重新运行安装命令。默认 profile 文件位于 ~/.dsh/profiles/web/pnpm-workspace.yaml。

安装完成后重启 Harness:

dsh web

插件包含 Host 和 Web 客户端两侧。安装并启用插件后,Harness 的“设置 → 插件”中会出现“飞书配置”;卸载或禁用插件后该入口消失。未绑定时页面显示二维码,已绑定时只显示脱敏绑定信息。每台机器默认使用自己的 ~/.dsh/feishu-bot/credentials.json,目标机器应重新扫码绑定,不要将源机器的 App Secret 或凭据文件放进插件归档。

从源码开发安装:

npm install
npm run check
dsh plugin --profile web add .

也可以直接从 GitHub 安装:

dsh plugin --profile web add github:452926826/dsh-feishu-bot

查看当前绑定状态(不会读取或输出 App Secret):

npm run binding:status

状态为 waiting-for-scan-confirmation 表示二维码已经生成,但飞书页面还没有完成最终确认;bound 表示凭据已经落盘。

安全

二维码包含短时设备授权凭据,在完成绑定前不要发给无权创建应用的人。长期 App Secret 只存于本机凭据文件,不写入二维码、仓库或 cordis.patch.yml。

机器人收到的普通文本会作为用户指令提交给 Harness,权限等同于当前 DSH profile。生产使用应配置 FEISHU_ALLOWED_CHATS;否则任何能联系机器人的飞书 chat 都可操作 Harness。
预览分享卡片长什么样 ↓452926826/dsh-feishu-bot
分享 · DeepSeek Harness Hub
452926826/dsh-feishu-bot

扫码绑定飞书机器人,在聊天里远程操控项目与对话

回到顶部