DeepSeek Harness 插件:yiyunet/dsh-dingtalk-connector

前言

DeepSeek Harness(DSH)采用插件化架构,允许通过扩展能力增强 Agent 的工具箱。yiyunet/dsh-dingtalk-connector 是一个 DSH 插件,旨在解决钉钉 AI 表格(多维表 / aitable)数据接入 DSH 的问题。

该插件不直接调用钉钉 REST 接口,而是通过包装官方 CLI dws 来执行操作。这种方式降低了端点维护成本,并利用 dws 自身的鉴权与分页逻辑来保证稳定性。安装后,插件会向 DSH 注册 10 个 dingtalk_aitable_* 工具,并提供一个「钉钉文档」设置面板。

核心能力

插件提供了对钉钉 AI 表格的完整 CRUD 操作支持,同时兼顾了安全性与实用功能:

  • 数据操作:支持 Base(文件)、数据表、字段的查询、创建、修改与删除。
  • 记录管理:支持按 ID 或条件查询记录(支持全量拉取),以及记录的批量写入、修改与删除。
  • 发现与扫描:提供候选 Base 发现功能,并包含可读性实测,帮助确认哪些 Base 可被正常访问。
  • 数据导出:支持全量导出 CSV,文件包含 BOM 头,且支持覆盖同名文件。
  • 定时任务:支持创建、列取、删除、启停定时导出任务,以及立即执行任务。
  • 安全控制:包含自检(版本/授权)工具,以及受控直通(dingtalk_aitable_raw)能力。

安装与前置条件

该插件依赖外部 CLI dws,安装前需满足以下条件:

  1. 运行时环境:Node.js 版本 ≥ 22.19。
  2. 钉钉 CLI (dws):需全局安装 dingtalk-workspace-cli。
  3. 钉钉侧授权:需在钉钉开发者后台开通「AI 表格记录读写」权限,并在目标 Base 中将应用添加为协作者(可编辑)。

安装步骤

# 1. 安装插件
dsh plugin --profile web add @yiyunet/dsh-dingtalk-connector

# 2. 重启 dsh web 以加载插件

# 3. 使用辅助脚本检查环境(可选)
npx @yiyunet/dsh-dingtalk-connector install
npx @yiyunet/dsh-dingtalk-connector doctor

配置

插件依赖 cordis.patch.yml 文件进行配置。以下是关键配置项说明:

配置项 默认值 说明
dwsCommand dws PATH 上的命令名
dwsEntry 无 Windows 建议设置:指向 dws 的 JS 入口绝对路径,避免 shell 注入风险
timeoutMs 60000 单条命令超时时间
clientIdEnv / clientSecretEnv DWS_CLIENT_ID / DWS_CLIENT_SECRET 用于凭证的环境变量名
allowWrite false 开关:允许 create / update 操作
allowDelete false 开关:允许 delete 操作(独立开关,且每次操作需确认)
maxBatch 30 单次批量操作的最大记录数

关于 dwsEntry 的安全配置

在 Windows 环境下,.cmd 文件必须通过 shell 启动。Shell 会解析参数中的特殊字符(如引号、&、\|),若记录文本包含这些字符可能导致注入攻击。插件在检测到不安全的启动方式时会返回错误。

要彻底解决,请将 dwsEntry 指向 dws 的 JS 入口(例如 npm root -g 下的路径),完全绕过 shell 启动。

# cordis.patch.yml 示例
dwsEntry: '<npm root -g>/dingtalk-workspace-cli/bin/dws.js'

工具列表

安装完成后,DSH 注册了以下 10 个工具:

  1. dingtalk_aitable_diagnose:自检工具,检查版本、授权状态及命令注册情况。
  2. dingtalk_aitable_base:Base 文件管理(查/建/改/删)。
  3. dingtalk_aitable_table:数据表管理(查表与字段、建/改/删)。
  4. dingtalk_aitable_field:字段管理(查/建/改/删)。
  5. dingtalk_aitable_record_query:查询记录,支持按 ID 或条件查询,all=true 可全量拉取。
  6. dingtalk_aitable_record_write:批量写/改/删记录。
  7. dingtalk_aitable_raw:受控直通,可执行注册表内任意子命令。
  8. dingtalk_aitable_scan:候选 Base 发现与可读性实测。
  9. dingtalk_aitable_export_csv:全量导出 CSV(带 BOM,覆盖同名)。
  10. dingtalk_sync_job:定时导出任务管理(建/列/删/启停/立即执行)。

安全机制:双锁

删除操作需要双重确认:
1. 配置层锁:allowDelete: true(在配置文件中开启)。
2. 交互层锁:每次删除操作需 confirm=true 参数,表示已获同意。

注意事项

  • 三层依赖:插件本身是纯 JS,但依赖外部 CLI dws。若 Node、dws 或钉钉侧授权任一环缺失,操作将失败。
  • 列表限制:钉钉官方 API 不提供“列出全部 Base”的接口。插件提供的扫描功能是“候选 ∪ 人工补录”,不保证穷尽所有 Base。
  • 默认门禁:出于安全考虑,写与删除门禁默认全关。如需启用,必须修改配置文件中的 allowWrite 和 allowDelete。
  • 定时器机制:定时导出任务运行在 DSH host 进程内,DSH 关闭时任务不执行,重启后重算触发点。

总结

yiyunet/dsh-dingtalk-connector 为 DeepSeek Harness 提供了与钉钉 AI 表格交互的标准能力。通过包装 dws CLI,它避免了自行维护 REST 接口的风险,并提供了 CSV 导出与定时任务等实用功能。对于需要处理钉钉多维表数据的 Agent 开发者,这是一个可靠的工具选择。

项目地址:https://github.com/yiyunet/dsh-dingtalk-connector

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜