wz-heng/dsh-feishu-bridge ↗★ 3
dsh-feishu-bridge
DSH plugin shell for dsh-feishu-bridge: spawns and supervises the Feishu (Lark) channel bridge's Python process as a managed child of the DSH Host. The bridge itself is unchanged Python — this package only adds the dsh.bundle install path.
安装
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:wz-heng/dsh-feishu-bridge说明文档
阅读完整 README ↗dsh-feishu-bridge
English | 中文
DeepSeek Harness(dsh)的飞书(Lark)channel 桥:给飞书机器人发消息,触发一次 dsh agent turn,回复自动发回该聊天。
这是一个独立的社区项目,不由 DeepSeek 官方构建、维护或背书。 它完全通过 dsh 的公开 Python SDK(deepseek-harness-sdk)驱动——子进程边界,没有 fork/patch harness 本身的代码。
这是什么
- 一套生产级飞书机器人桥(fail-closed 白名单、一次性卡片 nonce、per-chat 输出详略、sticky session、
ws/webhook双 transport),从另一个 agent harness 项目的成熟飞书桥移植而来,改接到dsh。 - 与
deepseek-harness-sdk对话的薄适配层集中在一个文件src/dsh_feishu_bridge/dsh_adapter.py,SDK 版本精确锁定——harness 目前是 v0.1 developer preview,版本间明示会有破坏性变更。
5 分钟快速上手
git clone https://github.com/wz-heng/dsh-feishu-bridge.git
cd dsh-feishu-bridge
python3.12 -m venv .venv
. .venv/bin/activate
pip install -e ".[dev]"
凭据一律走环境变量——绝不写进任何要提交的文件:
export DEEPSEEK_API_KEY=sk-your-key-here
# export DEEPSEEK_BASE_URL=http://127.0.0.1:8000/v1 # 仅在走代理时需要
export FEISHU_APP_ID=cli_xxxxxxxx
export FEISHU_APP_SECRET=xxxxxxxx
export FEISHU_TRANSPORT=ws # 或 "webhook"(需要一个公网可达的 URL)
# export FEISHU_VERIFICATION_TOKEN=xxxx # FEISHU_TRANSPORT=webhook 时必填
# export FEISHU_ENCRYPT_KEY=xxxx # FEISHU_TRANSPORT=webhook 时必填
# fail-closed 白名单——必填。不配置任何 id 时机器人对谁都不回复;
# 每条消息都会被拒绝,这是设计如此(见下方"安全姿态")。
export FEISHU_ALLOWED_OPEN_IDS=ou_xxxxxxxxxxxxxxxx
# export FEISHU_ALLOWED_CHAT_IDS=oc_xxxxxxxxxxxxxxxx # 可选的群聊白名单
运行:
python -m dsh_feishu_bridge
# 或: dsh-feishu-bridge
在飞书里给机器人发消息。未在白名单里的 open_id 发来的第一条消息会被静默拒绝并记录日志——这条日志就是你查到自己 open_id 的方式(见下方"获取你的 open_id")。
获取你的 open_id
先给机器人发一条消息(它不会回复——这是预期行为,fail-closed)。在服务端日志里找这样一行:
Feishu: rejecting message from unauthorized open_id=ou_xxxxxxxxxxxxxxxx (chat=oc_xxxx)
把这个 open_id 填进 FEISHU_ALLOWED_OPEN_IDS,重启即可。
作为 dsh 插件安装
除了上面独立运行的方式,dsh plugin add 也可以把本仓库装进某个 profile:插件是一层薄的 Node/cordis 壳(、、),负责拉起并管理同一个未经改动的 Python 进程——不重实现、也不 patch 任何桥逻辑。