前几版都在修「答得好不好」。这一版换了个方向:修「看得见看不见」。钉钉的 CLI 升到 v1.0.63 之后,我拿真实群聊把它的能力重新过了一遍,发现 Linkora 里有几处设计是照着旧版 CLI 的认知写下的——包括一条被我自己信了好几年的错误判断。于是有了这一版:内置工具 38 → 47,意图分类 39 → 41。

本文要点

  • 话题(Thread)从「能回复但读不到历史」变成能读能答——这条纠正的是一条错误判断
  • 群成员枚举修好了:此前工具声称返回成员,实际一个都没返回
  • 新接入两个域:钉钉日志(日报周报)、企业语义检索
  • 补齐三处业务缺口:审批表单字段配置、待办闭环、日程协调(冲突 / 空闲 / 推荐时间)
  • 媒体下载迁到安全 Shortcut,保留四项安全属性

纠偏 1:话题不是「不支持」,是「只做了一半」

Linkora 里一直写着「钉钉不支持话题内回复」。这句话是错的。v1.0.63 实测下来,真实情况是——

这是个典型的「不对称」:能写不能读。后果很具体——同事在话题里把一个方案讨论了三轮,你进去问「这个方案谁提的」,分身只看得见群里那句「开个话题聊一下」,看不见话题里的内容,自然答不上来。

v0.7.0 补上了读的那一半:新增话题上下文拉取,按时间合并、去重后并入主回复上下文。现在分身在话题里能顺着上下文回答,而不是只看见一句话就失忆。

纠偏 2:「已返回成员列表」,实际一个成员都没有

会话信息工具此前会明确报告「已返回成员列表」,返回的却是空数组。群成员是 cid... 形式的会话 ID,查成员时必须走 ID 直通;而群成员枚举接口的 --group 参数走的是语义解析(传群名 / 关键词),把已保存的会话 ID 传过去反而报「解析失败」。这类坑不实测根本想不到——参数名字一样,语义完全相反。

现在改成:优先用会话内联返回的成员信息,拿不到时才走群成员枚举接口,并把「ID 直通 vs 语义解析」这条规则固化在适配器层,避免下次再踩。

新接入:钉钉日志与企业语义检索

钉钉日志(日报 / 周报)

能列出我收到和发出的日志、读取单份日志的完整正文、搜索本单位的填报模板。日志正文是嵌套的 JSON 字符串,解析后原样保留语义——不然「本周进展」会被拆成一堆无上下文的碎片。

企业语义检索

一次跨类型语义检索企业内部内容:文档、消息、日程、待办、听记、日志、邮件,一次覆盖多个来源。还能按行为类型追溯——「我发给谁了什么」「谁发给我的」「我创建过哪些」。

这里有个细节值得一说:检索结果里会保留「仅摘要片段」和「语义候选」两个证据标记。不保留的话,分身会把一个降级的摘要结果当成完整命中来汇报,那比查不到更糟。

补齐:三个此前只能「半个」回答的业务问题

能力此前现在
审批表单只能看到表单名能看字段级配置(字段名 / 组件类型 / 必填 / 选项),还能按字段名反查——「哪些表单含『项目』字段」直接能答
待办只能创建能查我的待办清单、标记完成(写操作需二次确认)
日程只能列日程能查冲突、找空闲时段、给多人推荐共同开会时间

「找大家都有空的时间」这个场景,之前只能靠人肉在日历里划。现在直接问,分身会查冲突、算空闲,再按姓名解析参会人给出建议时间。

顺手修的:媒体下载走安全通道

下载改走 dws 的安全 Shortcut 接口,四项安全属性全部保留——拒绝绝对路径、拒绝 .. 逃逸、原子落盘、默认不覆盖。调用方需要重下同名文件时显式开启覆盖,不给这个开关的默认行为是不覆盖。

一个刻意的决定:有些新能力不接

dws v1.0.63 一共 26 个服务域,全接进来并不划算。评估后明确不采纳的有:

另外记了一条铁律:适配器层绝不传输出改写类全局 flag。实测发现 --fields 只在顶层投影,传 --fields name,conversationId 时 +chat-list 返回 {} 而且不报错;--jq 表达式写错返回 null 加 exit 0,也没有错误信号。这种「静默返回空」的 flag 传到适配器里就是数据丢失的温床。

升级注意

无数据迁移、无破坏性变更。但新增 9 个工具需要显式加入 tools.available 白名单才会对 LLM 可见:

schedule_meeting        list_todos        complete_todo
approval_get_form_schema
list_reports           get_report_detail  list_report_templates
search_enterprise_content              search_enterprise_behavior

仓库里的 config.yaml.example 已含全部 47 项,照抄即可。新增的 9 个工具全部依赖 dws 专属能力,飞书与企微暂不可用(企微会明确回报不支持,而不是静默失败)。

验证

ruff 全路径通过;pyright 用钉版(1.1.414)跑出零错误,与基线一致;check_deps.py --strict 零告警;裸异常基线未新增(仍为 638)。新增 6 个测试文件覆盖本版全部新能力(报告 35 例、语义检索 28 例、日程待办 18 例、群成员 16 例、资源下载 8 例、话题上下文 14 例),全量逐文件回归通过。

延伸阅读