dsh-lark-all
Merged Feishu/Lark plugin for DeepSeek Harness: Lark channel bridge (long-connection WebSocket, parallel task sessions with streaming cards, media in/out, cloud docs) + restart recovery notification (ops).
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:tkwkeven/dsh-lark-all说明文档
阅读完整 README ↗飞书开放平台配置
- 在飞书开放平台创建企业自建应用,启用「机器人」能力。
- 添加权限:
- 必选:
im:message.p2p_msg:readonly、im:message.group_at_msg:readonly、im:message:send_as_bot、im:resource - 「进行中表情」:
im:message.reactions:write_only - 可选:
docx:document(云文档收发)、drive:drive(大文件上传云空间)
- 必选:
- 在「事件与回调」选择**「使用长连接接收事件」**,订阅
im.message.receive_v1(接收消息)。 - 创建并发布应用版本,把机器人加入需要使用的聊天。
- 配置凭据(二选一):
## DSH 配置
插件包自带 `cordis.patch.yml`,安装后自动插入两行:
```yaml
- insert:
- id: lark-channel
name: dsh-lark-all
config:
appId: !!js process.env.LARK_APP_ID
appSecretRef: LARK_APP_SECRET
cwd: !!js process.env.DSH_LARK_CWD ?? process.cwd()
responseTimeoutMs: 21600000
- id: dsh-ops
name: dsh-lark-all/ops
config:
appId: !!js process.env.LARK_APP_ID
appSecretRef: LARK_APP_SECRET
cwd: !!js process.env.DSH_LARK_CWD ?? process.cwd()
在 profile 自己的 cordis.patch.yml(最后应用的一层)中覆盖配置:
- id: lark-channel
config:
appId: cli_your-app-id # 建议保留环境变量方式
singlePolicy: allowlist
singleAllowFrom: [ou_xxx]
groupPolicy: allowlist
groupAllowChats: [oc_xxx]
taskReasoningEffort: max # 任务会话固定的推理强度
restartExitDelayMs: 2000 # 重启时退出延迟(配合 relaunch helper)
完整配置项
访问策略与输入
| 配置 | 默认 | 说明 |
|---|---|---|
domain | feishu | feishu(中国版)或 lark(国际版) |
singlePolicy / groupPolicy | open | open / allowlist / disabled |
singleAllowFrom / groupAllowChats | [] | 白名单(ou_* / oc_*) |
groupRequireMention | true | 群聊要求 @机器人 |
respondToMentionAll | false | 响应 @所有人 |
imageInputMode | auto | auto / always / never |
replyInThread | false | 回复是否进话题 |
超时与回复
| 配置 | 默认 | 说明 |
|---|---|---|
responseTimeoutMs | 300000 | 单轮回复上限(合并版默认 6 小时) |
mediaDownloadTimeoutMs | 30000 | 媒体下载超时 |
sendTimeoutMs | 30000 | 发送超时 |
sendRetries | 2 | 发送重试次数 |
maxReplyChars | 20000 | 单条回复上限 |
maxReplyImages | 4 | 单条回复图片上限 |
入站媒体
| 配置 | 默认 | 说明 |
|---|---|---|
inboundFiles | true | 接收文件到 inbox |
inboundMedia | true | 接收语音/视频到 inbox |
inboundDir | '' | 自定义 inbox 目录(空用 /.lark-inbox) |
inboundResourceLimitBytes | 104857600 | 入站资源上限(飞书 100MB) |
inboundTextPreviewChars | 6000 | 文本类文件预览长度 |
出站媒体
| 配置 | 默认 | 说明 |
|---|---|---|
outboundMedia | true | 出站媒体总开关(命令 + 标记) |
outboundAllowedDirs | [] | 允许的出站本地目录(空默认 [cwd]) |
maxOutboundFileBytes | 31457280 | 文件上限(30MB) |
maxOutboundAudioBytes | 31457280 | 语音上限 |
maxOutboundVideoBytes | 31457280 | 视频上限 |
maxOutboundImageBytes | 10485760 | 图片上限(10MB) |
driveLargeFiles | false | 超限文件改传云空间并回复链接 |
maxDriveFileBytes | 209715200 | 云空间上传上限(200MB) |
sendFileMarkers | true | 解析模型回复 [lark-*: 路径] 标记 |
docxInbound | true | 读取 docx 分享内容 |
docxOutbound | true | 允许 /bot-send-doc 与 [lark-doc:] |
任务会话
| 配置 | 默认 | 说明 |
|---|---|---|
taskSessions | true | 任务会话总开关 |
taskPresets | {} | 额外前缀 → agent preset 映射 |
taskDefaultPreset | code | 裸 任务: 前缀使用的 preset |
taskReasoningEffort | max | 新建任务会话固定的推理强度(模型不支持时会按路由自动收敛) |
reportIdentity | wdsh | 任务报告前缀中的身份标识 |
taskCounterFile | '' | 每日任务计数器路径 |
chatQueue | false | 关闭(默认)→ 任务并行;true → 同聊天严格串行 |
重启
| 配置 | 默认 | 说明 |
|---|---|---|
restartCommand | 重启进程 | 主聊天中触发的重启命令 |
restartMarkerFile | '' | 重启标记路径(ops 消费) |
restartLaunch | dsh web | 重启后启动的命令行 |
restartLogFile | '' | 重启后进程日志 |
restartExitDelayMs | 4000 | 调度重启后退出延迟 |
其他
| 配置 | 默认 | 说明 |
|---|---|---|
progressReaction | true | 收到消息先添加进行中表情 |
progressEmoji | Typing | 进行中表情(Typing/THUMBSUP/THINKING/GLANCE/Fire…) |
doneEmoji | '' | 完成表情(如 CheckMark;空 = 关闭) |
maxInFlightMessages | 8 | 并行处理上限 |
systemPrompt | 内置 | 通道系统提示词覆盖 |
完整配置项
访问策略与输入
| 配置 | 默认 | 说明 |
|---|---|---|
domain | feishu | feishu(中国版)或 lark(国际版) |
singlePolicy / groupPolicy | open | open / allowlist / disabled |
singleAllowFrom / groupAllowChats | [] | 白名单(ou_* / oc_*) |
groupRequireMention | true | 群聊要求 @机器人 |
respondToMentionAll | false | 响应 @所有人 |
imageInputMode | auto | auto / always / never |
replyInThread | false | 回复是否进话题 |
超时与回复
| 配置 | 默认 | 说明 |
|---|---|---|
responseTimeoutMs | 300000 | 单轮回复上限(合并版默认 6 小时) |
mediaDownloadTimeoutMs | 30000 | 媒体下载超时 |
sendTimeoutMs | 30000 | 发送超时 |
sendRetries | 2 | 发送重试次数 |
maxReplyChars | 20000 | 单条回复上限 |
maxReplyImages | 4 | 单条回复图片上限 |
入站媒体
| 配置 | 默认 | 说明 |
|---|---|---|
inboundFiles | true | 接收文件到 inbox |
inboundMedia | true | 接收语音/视频到 inbox |
inboundDir | '' | 自定义 inbox 目录(空用 /.lark-inbox) |
inboundResourceLimitBytes | 104857600 | 入站资源上限(飞书 100MB) |
inboundTextPreviewChars | 6000 | 文本类文件预览长度 |
出站媒体
| 配置 | 默认 | 说明 |
|---|---|---|
outboundMedia | true | 出站媒体总开关(命令 + 标记) |
outboundAllowedDirs | [] | 允许的出站本地目录(空默认 [cwd]) |
maxOutboundFileBytes | 31457280 | 文件上限(30MB) |
maxOutboundAudioBytes | 31457280 | 语音上限 |
maxOutboundVideoBytes | 31457280 | 视频上限 |
maxOutboundImageBytes | 10485760 | 图片上限(10MB) |
driveLargeFiles | false | 超限文件改传云空间并回复链接 |
maxDriveFileBytes | 209715200 | 云空间上传上限(200MB) |
sendFileMarkers | true | 解析模型回复 [lark-*: 路径] 标记 |
docxInbound | true | 读取 docx 分享内容 |
docxOutbound | true | 允许 /bot-send-doc 与 [lark-doc:] |
任务会话
| 配置 | 默认 | 说明 |
|---|---|---|
taskSessions | true | 任务会话总开关 |
taskPresets | {} | 额外前缀 → agent preset 映射 |
taskDefaultPreset | code | 裸 任务: 前缀使用的 preset |
taskReasoningEffort | max | 新建任务会话固定的推理强度(模型不支持时会按路由自动收敛) |
reportIdentity | wdsh | 任务报告前缀中的身份标识 |
taskCounterFile | '' | 每日任务计数器路径 |
chatQueue | false | 关闭(默认)→ 任务并行;true → 同聊天严格串行 |
重启
| 配置 | 默认 | 说明 |
|---|---|---|
restartCommand | 重启进程 | 主聊天中触发的重启命令 |
restartMarkerFile | '' | 重启标记路径(ops 消费) |
restartLaunch | dsh web | 重启后启动的命令行 |
restartLogFile | '' | 重启后进程日志 |
restartExitDelayMs | 4000 | 调度重启后退出延迟 |
其他
| 配置 | 默认 | 说明 |
|---|---|---|
progressReaction | true | 收到消息先添加进行中表情 |
progressEmoji | Typing | 进行中表情(Typing/THUMBSUP/THINKING/GLANCE/Fire…) |
doneEmoji | '' | 完成表情(如 CheckMark;空 = 关闭) |
maxInFlightMessages | 8 | 并行处理上限 |
systemPrompt | 内置 | 通道系统提示词覆盖 |
使用方法
1. 基础命令(发给机器人)
| 命令 | 说明 |
|---|---|
/bot-ping | 连通性检查,返回 pong |
/bot-help | 查看命令帮助 |
/bot-image-test | 发送蓝色测试图片,检查图片链路 |
/bot-status | 查看连接状态 |
/bot-cancel | 取消当前生成 |
2. 普通聊天
直接发文字、图片、文件、语音、视频或云文档分享即可。普通消息进入该聊天的常驻 Harness 会话,与 Web 端同一套模型配置。
3. 并行任务会话
任务:帮我调研一下开源社区的 Cordis 插件生态
ptc任务:写一个 PowerShell 脚本批量重命名文件
标准任务:总结这篇文档的要点
极简任务:翻译这段话
创造任务:设计一个产品原型方案
- 每条任务消息创建独立会话并在话题中运行,带实时流式卡片
- 任务还在运行时,继续发
任务:…即可并行处理 - 在任务消息的话题(或回复任务消息的回复链)里继续发消息 = 继续该任务会话,每轮一张新的「第 N 轮」卡片
- 任务完成后,报告以回复形式投递到话题内;超长报告自动分页
4. 发送媒体
/bot-send-file C:\path\to\demo.txt
/bot-send-image C:\path\to\photo.png
/bot-send-voice C:\path\to\audio.opus
/bot-send-video C:\path\to\clip.mp4
/bot-send-doc C:\path\to\report.md
也可以让模型在回复中直接输出标记(独立一行):
[lark-file: C:\path\to\demo.txt]
[lark-image: C:\path\to\photo.png]
[lark-doc: C:\path\to\report.md]
超过 IM 上限的文件在开启 driveLargeFiles 后自动上传云空间并回复分享链接。
5. 接收媒体
- 文件:下载到
/.lark-inbox/-/,文本类文件附带内容预览,可直接问文件内容相关问题 - 语音/视频:下载到 inbox 并告知时长与路径
- 原图:超过附件限制的图片自动降级为 inbox 文件并告知路径
- 云文档:docx 分享自动读取正文;sheet/bitable 识别名称与链接
6. 重启进程
在主聊天发送 重启进程(可配置 restartCommand)。机器人回复确认后调度安全重启,约 10~60 秒后恢复;dsh-ops 会向该聊天发送恢复通知。
7. 验证链路
/bot-ping → pong
/bot-image-test → 文字 + 蓝色图片
再发普通文字和一张图片验证模型与入站附件链路;发 demo.txt 后 /bot-send-file C:\绝对\路径\demo.txt 验证文件出站;向机器人发送一个文件或语音验证入站下载。