dsh-feishu-at
Manifest validDSH 输入框飞书 @ 提及:@ 后模糊搜索飞书用户 / 群聊 / 部门,选中即插入名称块,模型侧附带名称、ID 与 ID 类型
dsh-feishu-at · 飞书 @ 提及
在 DSH Web GUI 的输入框里敲 @,直接模糊搜索并选择飞书用户 / 群聊 / 部门:
@后继续输入即按字符模糊搜索(服务端关键字搜索 + 菜单实时过滤);- 选中后插入一个原子 @ 块,默认显示名称(块不可拆字编辑,删一次删整块);
- 发送给模型时,块被序列化为带 名称 + ID + ID 类型 的文本,例如:
@张三(飞书用户,open_id=ou_xxxx…)@项目协作群(飞书群聊,chat_id=oc_xxxx…)@某部门(飞书部门,open_department_id=od-xxxx…)
- 一敲
@(还没输入字符)时先展示最近会话(群聊 + 私聊混排,按最近活跃排序),回车即可选中; - 输入字符搜索时群聊与私聊一起搜(私聊靠本地会话索引按名称匹配),结果按 部门 > 群聊 > 私聊 > 人 排列,每类最多显示 5 条,行尾显示 ID 类型 + ID。
前置条件
| 依赖 | 说明 |
|---|---|
DSH >= 0.2.1-rc.3 | 依赖内置的输入触发流水线(dsh-client-ui-input-trigger)与 webServer 路由 |
lark-cli(本机 ~/.local/bin/lark-cli) | 已用 user 身份登录:lark-cli auth login。插件会自动在 PATH 之外回退查找 ~/.local/bin、/opt/homebrew/bin、/usr/local/bin |
| 部门名称(可选) | 部门名称要 contact:department.base:readonly 读权限(--domain contact 不含它)。未授权时部门行只显示 open_department_id,菜单里同时给出授权命令 |
安装
# 从 npm 装(推荐)
dsh plugin --profile desktop add @sidleo3/dsh-feishu-at
# 或从仓库装(开发用,link 到本地目录)
dsh plugin --profile desktop add link:/绝对路径/dsh-feishu-at
安装后重启 DSH 加载 Host 半,并刷新浏览器页面加载 Client 半。
若 profile 用显式 bundles 清单(package.json → dsh.profile.bundles),把 @sidleo3/dsh-feishu-at 加进去。
缺授权怎么办
插件不会因为缺 lark-cli / 未登录 / 缺 scope 而报错或消失:@ 菜单会多出一组
「飞书授权 / 配置」提示行,标题说明缺什么,右侧描述给出可直接执行的命令(选中提示行不会插入内容)。
先按提示行处理,再按需刷新页面或重启 DSH。
| 提示行 | 含义 | 在系统终端执行 |
|---|---|---|
| 未安装 lark-cli | 本机找不到 lark-cli | npm i -g @larksuite/cli && lark-cli config init && lark-cli auth login,然后重启 DSH |
| lark-cli 未配置飞书应用 | 没有 app-id / app-secret | lark-cli config init(填 app-id 与 app-secret),再 lark-cli auth login |
| 飞书未登录 | user 身份不可用或已过期 | lark-cli auth login(按提示打开验证链接完成授权) |
| 飞书授权缺少 scope | 登录身份没覆盖某个接口所需权限 | 按提示行里的命令执行,如 lark-cli auth login --scope "contact:department.base:readonly";scope 名来自 lark-cli 报错的 missing_scopes |
| 部门名称无权限 | 只缺部门名(部门行降级为 ID) | lark-cli auth login --scope contact:department.base:readonly |
授权命令要在系统终端里跑,不要粘到 DSH 的浏览器地址栏。改 Host 半后需重启 DSH; 只刷新页面只影响 Client 半。
一次性自查(把端口换成你当前 DSH Web GUI 的端口):
curl -s 'http://127.0.0.1:<DSH Web 端口>/api/dsh-feishu-at/status' | python3 -m json.tool
status 里的 cli.found / auth.ready 是能力结论,issues[] 是当前问题清单(kind / title / detail / fix / 可选 scopes),fix 就是上表第三列的命令。
使用
- 在会话输入框敲
@;菜单出现「最近会话」(群聊 + 私聊,按最近活跃排序)。 - 继续输入,例如
@张、@有货、@商品,候选按用户/群聊/部门分节出现。 ↑/↓或鼠标选择,Enter或Tab选中;Esc关闭。选中后输入框里是@名称块。- 正常发送。模型收到的是带 ID 与 ID 类型的文本,可直接据此用
lark-cli发消息、查群、查部门成员等。
搜索走
lark-cli contact +search-user/lark-cli im +chat-search(群聊)/ 原生contact/v3/departments/search; 私聊(p2p)不在飞书的群聊搜索接口里,由插件本地维护「群聊 + 私聊」全量会话索引(im +chat-list --types p2p,group, 首次约 3–4s,缓存 10 分钟并在后台预热/刷新)后按名称过滤。 每条 lark-cli 命令约 0.8–1.5s,插件在 Host 侧做了 120s 结果缓存与并发去重,重复前缀(如先张再张志)会很快;首次搜索稍慢属正常。
配置(可选,profile 的 cordis.patch.yml)
- id: feishu-at
config:
larkCliPath: $HOME/.local/bin/lark-cli # 缺省自动探测
identity: user # 目前只支持 user
timeoutMs: 8000 # 单条 lark-cli 超时
cacheTtlMs: 120000 # 搜索结果缓存 TTL
实现结构
index.js Host 半:execFile 调 lark-cli → /api/dsh-feishu-at/search|status(内存缓存 + 并发去重 + 权限降级)
client.js Client 半:向 ctx.inputTriggers 注册 '@' 来源,同源 fetch Host 路由,插引用块、提交时按 codec 序列化
cordis.patch.yml bundle patch:插入 id=feishu-at 一行
locale/*.json Plugin Manager / 设置页显示用的标题与描述
icon.svg 插件图标
- Host 路由:
GET /api/dsh-feishu-at/search?q=&types=user,chat,dept&limit=8、GET /api/dsh-feishu-at/status。 结果顺序固定为 部门 → 群聊 → 私聊 → 人;Client 侧每类再截到 5 条(最近会话不按类截断)。/status的lastRequests是最近 20 条请求的观测(时间 / q / User-Agent / Referer),可用来确认浏览器半是否真的在调路由。 - 「永不 500」+「缺授权可见」:两个路由都返回 200,失败不以异常表达,而是回
issues[](kind:cli-missing/not-configured/auth-required/scope-missing/dept-names/search-failed;scope-missing带scopes)。Client 把issues渲染成菜单提示行,选中返回'handled'(不插入内容)。 - Client 只依赖 baseline 的
react模块,无构建步骤、无 npm 依赖。 - 引用块
appearance省略 → 输入框内显示@+ 名称;发送时按source:'feishu'路由到本插件的codec.serialize。
排障
| 现象 | 处理 |
|---|---|
敲 @ 只有文件/会话,没有飞书分组 | 看菜单里是否有「飞书授权 / 配置」提示行;没有则 curl -s 'http://127.0.0.1:<DSH Web 端口>/api/dsh-feishu-at/status' 看 cli.found / auth.ready / issues;Host 半改动需重启 DSH 才生效 |
| 提示行「飞书 @ 提及未就绪」 | Host 路由 404:插件没启用或 Host 半没加载,确认 plugins/profile bundles 后重启 DSH |
cli.found=false | 装好 lark-cli 或在配置里指定 larkCliPath |
auth.ready=false | lark-cli auth login(user 身份) |
部门行只显示 od-… | lark-cli auth login --scope contact:department.base:readonly 授权后重载本插件(插件页关一下再开)或重启 DSH |
| 首次搜索慢 | lark-cli 每次冷启动 ~1s;插件缓存 120s,属预期 |
Comments
Loading…
Similar plugins
by blooming-fang
DeepSeek Harness 飞书通知插件:在需要用户操作或对话结束时发送飞书机器人提醒,并支持持久化配置。
★ 2
↓ 278/wk
MIT
TypeScript
Oct 12, 2026
dsh plugin --profile web add dsh-feishu-notifierby wanjiaju3108
用飞书私聊远程操作 DSH:消息与卡片走机器人长连接,不用公网入口、不用证书、不用内网穿透
★ 0
MIT
JavaScript
Oct 27, 2026
dsh plugin --profile web add dsh-feishu-cuiby scubiry-glitch
DSH Web 飞书对话查看器客户端插件:会话头部 💬 按钮展示与飞书 bot 的私聊记录(数据来自 OpenClaw 独立网关 agent 会话文件,同源路由)
★ 0
MIT
JavaScript
Aug 20, 2026
dsh plugin --profile web add dsh-feishu-chat-viewerby zhbdream
飞书 → 本机 DeepSeek Harness Agent 桥接(dsh-plugin)
★ 0
MIT
TypeScript
Aug 15, 2026
dsh plugin --profile web add dsh-feishu-bridgeby potterlee369-prog
通过飞书机器人应用,使用飞书客户端,实现其他设备控制dsh
★ 0
TypeScript
Aug 19, 2026
dsh plugin --profile web add dsh-feishuby Nirvana-Jie
Reach your DeepSeek Harness assistant from Feishu / Lark · 离开电脑,也能在飞书里找到你的 DeepSeek Harness 助手
★ 4
↓ 1.1k/wk
MIT
TypeScript
Nov 2, 2026
dsh plugin --profile web add dsh-lark-agent