扫码建机器人并管理监听器,高危命令走飞书审批
29.5/100
综合分
2
GitHub 星标
55
npm 周下载
—/5
用户评分
数据截至 2026/9/19 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-plugin-larknpm 源 · dsh-plugin-lark 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · platform
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 65 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-plugin-lark @ 0.1.0
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/9/22 05:59:05
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 29 处,展示前 20 条)
- 读取本地文件lib/index.js:40
return existsSync(guess) ? guess : "lark-cli"; - 读取本地文件lib/index.js:84
const buf = readFileSync(path); - 读取本地文件lib/index.js:98
if (existsSync(pidFile)) { - 读取本地文件lib/index.js:99
const pid = Number(readFileSync(pidFile, "utf8").trim()); - 读取本地文件lib/index.js:133
if (!existsSync(script)) return { ok: false, error: `找不到 ${script}` }; - 执行外部命令来自配置/变量lib/index.js:149
const child = spawn(LARK_CLI, ["auth", "login", "--device-code", deviceCode, "--json"], { - 执行外部命令固定命令lib/index.js:194
const out = execFileSync("/usr/bin/pgrep", ["-P", String(pid)], { timeout: 5000 }); - 读取本地文件lib/index.js:207
if (!existsSync(eventsPath)) return out; - 执行外部命令来自配置/变量lib/index.js:229
const child = spawn(LARK_CLI, ["config", "init", "--app-id", appId, "--app-secret-stdin", "--brand", "feishu"], { - 写入本地文件lib/index.js:255
try { mkdirSync(runDir, { recursive: true }); } catch { } - 删除本地文件lib/index.js:257
try { rmSync(eventsPath, { force: true }); } catch { } - 删除本地文件lib/index.js:258
try { rmSync(join(STATE_DIR, "bootstrap-qr.png"), { force: true }); } catch { } - 执行外部命令固定命令lib/index.js:281
const child = spawn("npx", args, { stdio: ["ignore", "pipe", "pipe"] }); - 写入本地文件lib/index.js:371
mkdirSync(STATE_DIR, { recursive: true }); - 发起网络请求lib/client.js:20
return fetch(path, opts).then(function (r) { - 读取本地文件lib/patch-bootstrap.js:20
for (const d of readdirSync(npxRoot)) { - 读取本地文件lib/patch-bootstrap.js:22
if (existsSync(join(pkg, "dist", "flow.js"))) return pkg; - 执行外部命令固定命令lib/patch-bootstrap.js:32
execFileSync("npx", ["--yes", "feishu-bot-bootstrap", "--help"], { timeout: 180000, stdio: "ignore" }); - 读取本地文件lib/patch-bootstrap.js:126
src = readFileSync(flowPath, "utf8"); - 写入本地文件lib/patch-bootstrap.js:173
writeFileSync(flowPath, src);
扫描于 2026/11/4(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
功能亮点
- 扫码授权建机器人
- 监听器管理
- 高危命令飞书审批
DeepSeek Harness 飞书接入插件(薄架构):Web 面板扫码授权 lark-cli + 监听器管理
README
由 DeepSeek 最新模型翻译生成dsh-plugin-lark — DeepSeek Harness 飞书接入插件(薄架构)
在 DSH Web 界面(设置 → 插件 →「飞书接入」标签页)提供扫码新建机器人 + 扫码授权 + 监听器管理,不再需要手动敲 lark-cli 命令,也不用去开放平台手动配置。
各大能力
1. 新建飞书机器人(推荐):面板点「新建机器人」→ 手机扫码登录开放平台 → 工具自动完成 创建应用 → 开机器人能力 → 导入权限 → 订阅消息事件 → 发布版本 → 约 30-60 秒拿到新机器人凭证并自动写入 lark-cli → 自动启动监听器 → 直接可用(一次扫码即连接)。
底层用 feishu-bot-bootstrap(headless + events-jsonl 事件流)。
2. 用户身份授权(可选):需要以个人身份访问日历/文档/邮件等资源时再扫码授权(lark-cli 设备流)。
⭐ 核心功能(v0.2)
- 官方 SDK 长连接接收:网关用飞书官方 lark-oapi 的 WebSocket 长连接(FeishuWSClient)接收消息与卡片回调,替代 lark-cli consume(lark-cli 收不到 card.action.trigger)。
参照 hermes-agent 的实现(EventDispatcherHandler + 事件循环设置)。
展开完整文档(README 剩余 1 节)
dsh-plugin-lark — DeepSeek Harness 飞书接入插件(薄架构)
在 DSH Web 界面(设置 → 插件 →「飞书接入」标签页)提供扫码新建机器人 + 扫码授权 + 监听器管理,不再需要手动敲 lark-cli 命令,也不用去开放平台手动配置。
各大能力
1. 新建飞书机器人(推荐):面板点「新建机器人」→ 手机扫码登录开放平台 → 工具自动完成 创建应用 → 开机器人能力 → 导入权限 → 订阅消息事件 → 发布版本 → 约 30-60 秒拿到新机器人凭证并自动写入 lark-cli → 自动启动监听器 → 直接可用(一次扫码即连接)。
底层用 feishu-bot-bootstrap(headless + events-jsonl 事件流)。
2. 用户身份授权(可选):需要以个人身份访问日历/文档/邮件等资源时再扫码授权(lark-cli 设备流)。
⭐ 核心功能(v0.2)
- 官方 SDK 长连接接收:网关用飞书官方 lark-oapi 的 WebSocket 长连接(FeishuWSClient)接收消息与卡片回调,替代 lark-cli consume(lark-cli 收不到 card.action.trigger)。
参照 hermes-agent 的实现(EventDispatcherHandler + 事件循环设置)。
- 飞书审批菜单(点卡片按钮):DSH 要执行高危命令(删除文件/目录、sudo、launchctl、kill 等)时,飞书弹出带按钮的审批卡片(✅ 批准 / 🚫 拒绝),你点一下即完成审批——批准才执行,拒绝即中止。
也支持文字审批:回复「批准 xxxx」/「拒绝 xxxx」(xxxx 为 4 位验证码)。
- 审批门(headless 拦截):headless 任务里命中高危规则(feishu-approval.json)的命令在执行前被拦截,走飞书审批;审批通过后跳过 DSH 安全钩子(security-suite)放行。
- ps 替代 shim:Seatbelt 沙箱内 /bin/ps exec 被 macOS 拒(与策略无关),提供 shims/ps(libproc 枚举),agent 敲 ps 即得进程列表(PID/PPID/USER/COMMAND)。
安装(npm)
npm install -g dsh-plugin-lark # 或按 dsh 插件方式
dsh plugin --profile web add dsh-plugin-lark
依赖:lark-cli(PATH 中可用)、dsh、Chrome/Edge(扫码新建机器人用)、飞书开放平台账号、 lark-oapi(网关长连接,manage_lark_bridge.sh start 自动 pip 安装)。
环境变量(均可覆盖,默认已通用化):
| 变量 | 默认 | 说明 |
| LARK_BRIDGE_DIR | ~/.dsh/lark-bridge | 网关目录(内含 lark_bridge.py + manage_lark_bridge.sh,随包自带) |
| DSH_WORK_DIR | ~ | 任务工作目录(网关侧) |
| DSH_BIN | dsh(PATH) | dsh 可执行(绝对路径或 PATH 名) |
| LARK_CLI_BIN | lark-cli(PATH) | lark-cli 路径 |
| LARK_APP_JSON | ~/.dsh/feishu-app.json | DSH 飞书应用凭据文件路径 |
| LARK_BOT_NAME | DeepSeek Harness 助手 | 新建机器人的应用名 |
架构(薄插件设计 + 网关增强)
DSH Web 面板(本插件前端) │ fetch /api/lark/* ▼ 本插件服务端(跑在 dsh web 进程内) │ ① feishu-bot-bootstrap(扫码新建机器人) ② lark-cli 设备流 ③ 启停/状态/日志 转发 ▼ lark_bridge.py(独立网关进程,业务收发+审批全在这) │ ① lark-oapi FeishuWSClient 长连接(接收消息+卡片回调,SDK 自动回 200) │ ② 审批服务(本地 HTTP /approval)+ 审批卡片发送 + pending 管理 │ ③ dsh headless 执行高危命令前 → 审批门拦截 → 飞书审批 ▼ 飞书
- 插件只做「授权 + 面板 + 进程管理」,业务收发+审批在独立 lark_bridge.py,与 DSH 核心解耦
- 发包自包含 bridge/:升级版网关 + 配置模板 + 依赖 + ps shim + headless 审批门
文件
| 文件 | 说明 |
| package.json | 插件包声明;dsh.client 声明前端 bundle |
| lib/index.js | 服务端 Cordis 插件:/api/lark/* 路由 |
| lib/client.js | 前端面板(手写 ModuleLoader bundle 格式) |
| bridge/lark_bridge.py | 升级版网关:lark-oapi 长连接 + 审批门 + 卡片/文字审批 |
| bridge/manage_lark_bridge.sh | 网关启停/状态/日志(自动装 lark-oapi、提示配置) |
| bridge/feishu-app.json.example | DSH 飞书应用凭据模板(复制为 ~/.dsh/feishu-app.json) |
| bridge/feishu-approval.json | 审批规则(高危命令模式 + 中文原因) |
| bridge/requirements.txt | 网关依赖(lark-oapi) |
| bridge/shims/ps | 沙箱 ps 替代(libproc) |
| headless-approval/ | 审批门插件(dsh-feishu-approval):headless 高危命令审批 |
| test/harness.mjs | 后端自测(mock ctx,不启动 Web) |
审批流程(高危命令)
用户发任务 → headless 执行 → 命中高危规则(feishu-approval.json) → 审批门拦截 → 网关发审批卡片(获批/拒按钮 + 文字兜底) → 用户点按钮 / 回复「批准 xxxx」「拒绝 xxxx」 → 批准 → 跳过安检 → 命令执行;拒绝 → 命令中止,agent 告知用户
审批规则(feishu-approval.json,默认):
- rm 删除文件/目录(不可逆,含普通 rm 与 rm -rf)
- sudo 提权、launchctl 服务管理、kill -9/killall/pkill 进程结束
- diskutil、shutdown/reboot/halt、dd 写盘、mkfs 格式化
注:sudo 审批通过后,命令仍可能被 macOS Seatbelt 沙箱拒绝(防提权硬边界);审批门给的是「可确认」通道,OS 沙箱兜底禁提权。
headless 审批门集成(飞书链路自动生效)
headless-approval/ 是审批门插件(cordis)。飞书 headless 任务要启用审批,需让 headless profile 加载它。示例(~/.dsh/profiles/headless/package.json):
"dependencies": { "dsh-feishu-approval": "file:/headless-approval" },
"dsh": { "profile": { "bundles": [ "...", "dsh-feishu-approval" ] } }
网关启动时通过 DSH_APPROVAL_ENDPOINT 环境变量把审批服务地址注入 headless 进程,审批门插件据此把高危命令转到飞书审批。审批规则读 ~/.dsh/feishu-approval.json。
配置(网关)
1. 飞书应用凭据:cp bridge/feishu-app.json.example ~/.dsh/feishu-app.json,填入 DSH bot 应用的 App ID / App Secret(飞书开放平台 → 应用 → 凭证与基础信息)。
2. 审批规则(可选):cp bridge/feishu-approval.json ~/.dsh/feishu-approval.json,按需增删高危模式。
⚠️ 关键:DSH 与 hermes 是两个不同的飞书应用
- DSH bot 的 App ID 是你单聊里的机器人(cli_ 开头);
- 不要用 hermes 的 App(~/.hermes/.env 里的 FEISHU_APP_ID)。
混用会导致:发消息 230002 Bot/User can NOT be out of the chat、后台订阅错位、长连接冲突(一个应用同一时间只允许一条连接)。
API(服务端,前缀 /api/lark)
| 方法/路径 | 说明 |
| GET /status | 应用/授权/监听器/工作目录 总状态 |
| POST /bot/create | 启动「扫码新建机器人」(feishu-bot-bootstrap headless) |
| GET /bot/create/status | 新建流程状态(二维码 URL、步骤进度、结果、错误) |
| POST /listener/start\|stop | 启停 lark-bridge 网关 |
| GET /listener/logs?lines=N | 网关日志 tail |
| GET /config | lark-cli 配置(掩码) |
装配(已完成的步骤,重启后生效)
1. 源码在 ~/deepseek/dsh-plugin-lark(= 当前工作区域,便于维护)
2. 软链到 profile:~/.dsh/profiles/web/node_modules/dsh-plugin-lark → ~/deepseek/dsh-plugin-lark
3. ~/.dsh/profiles/web/cordis.patch.yml 增加条目:
- insert:
- id: lark-connector
name: 'dsh-plugin-lark'
4. 重启 dsh web(见全局约定 dsh web 或面板),刷新浏览器
自测
node test/harness.mjs # 不启动 Web,实测全部 API
python3 bridge/lark_bridge.py --test "你好" # 网关自测(不依赖飞书)
排障
- 卡片审批点了没反应 / 报 200671 → 看 lark_bridge.log 是否 handle message failed ... expected Dict but was str at field: value;若是,检查卡片 behaviors[].value 是否用了对象而非 JSON 字符串(本项目已用对象)。
- 卡片按钮横排间隔过大 → 用 column_set 且 column width: "auto"(本项目默认)。
- 审批「批准」仍显示拒绝 → 检查是否 double-pop:_issue_approval 与卡片回调不能都 pop 同一个 pending(本项目已改为回调 get、_issue_approval 统一 pop)。
- lark_oapi 收不到消息 → 确认设置了 ws_client_module.loop(参照 hermes-agent 的
asyncio.new_event_loop() + set_event_loop)。
- 面板不出现 → 确认重启了 dsh web、浏览器刷新
- 消息不回复 → 看「监听器」是否运行中;GET /api/lark/listener/logs
- ⚠️ 不要同时跑两个 lark-cli config init——会互相占配置锁导致命令卡住预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
zhbcher/dsh-plugin-lark
扫码建机器人并管理监听器,高危命令走飞书审批
相关插件 · 平台集成
智能体工程课walkinglabs/learn-harness-engineering
一门项目制课程,教你搭建环境、管理状态、做验证、加控制机制,让 AI 编程智能体稳定干活。
★ 21,155已汉化DSH
71.7
视频翻译配音liuzhao1225/YouDub-webui
开源视频本地化工作台:导入视频,识别、翻译并逐句克隆原声,生成字幕和配音成片。
★ 5,792已汉化Cordis
71.4
失败经验库Ikalus1988/MisakaNet
📚 零依赖、由 git 支撑的微课程库,让 AI 智能体异步分享并检索经过验证的调试经验。| https://misakanet.org
★ 550已汉化DSH
71.2
IM 机器人接入xmanrui/dsh-im
让 DeepSeek Harness 触手可及 Connecting DeepSeek Harness
★ 3,170已汉化DeepSeek 客户端
71
桌面智能体工作区freestylefly/wesight
WeSight 是开源桌面控制台,面向本地 AI 智能体。它帮你安装或复用 Claude…
★ 933已汉化MCP
71
中国平台研究引擎Jesseovo/last30days-skill-cn
给 AI Agent 的中文互联网研究 Skill:检索 8 大平台最近 30…
★ 2,041已汉化DSH
70.7
这是你的仓库?认领条目