xiaobao-dsh-employees · 钉钉个人号 AI 校宝数字员工
把 你的钉钉个人账号(通过 DWS 登录)接入 DeepSeek Harness:在群里被 @ 或被引用时像同事一样接活、回复;能用工具干活、主动汇报、发文件。日报/周报等周期汇报直接用 DSH 自带的「自动化任务」配合 dingtalk_send_message 工具完成。
- 群消息全量归档作为上下文,但只有被 @ 本账号或引用了它的消息才会处理与回复;单聊默认直接响应。
- 左侧栏 校宝数字员工 打开独立配置页面,包含「群与工作区」「员工设置」「运行与记录」。
- 每个群 / 每个单聊对象各绑定一个 DSH Session;群可通过「打开文件夹」指定独立工作区,未指定时使用按会话隔离的默认目录。
- Agent 工具(对 Host 里所有会话可用,包括自动化任务):
dingtalk_send_message、dingtalk_send_file、dingtalk_group_history、dingtalk_list_groups。 - 任务执行完成后正常引用回复;不提供超时确认、后台延迟回复或重启后补发。
- 默认只收不发(
writesAuthorized=false),确认无误后再在设置页开放外发;所有外发都记入发件箱。 - 模型、工作模式与单聊人员通过选择配置;触发任务时接收附件,群工作区展示当前选择的目录。
- 运行页使用中文状态,发件箱支持服务端筛选、全文详情、来源消息及原 DSH 会话关联。
- 开始处理任务时,在原钉钉消息上添加「🤔思考中」文字表情;任务结束后移除。
环境要求
- Windows / macOS / Linux,Node.js ≥ 24
- DSH
>=0.2.1-rc.2 <0.3.0;已在0.2.1-rc.2验证安装 dwsCLI 已安装(账号管理功能按 v1.0.65 验证);可在插件「运行与记录」中登录,也可在终端执行dws auth login。
一键安装
安装包已包含构建好的配置页面,无需克隆项目、构建源码或手工修改 profile。安装脚本不安装 DWS;先完成上面的环境准备,再在插件中登录钉钉。
Windows:安装到 DSH Desktop
先正常打开一次 DSH Desktop 完成初始化,再完全退出应用,在 PowerShell 执行这一行。脚本会自动查找标准安装位置中的 DSH Desktop,也支持 PATH 中的 dsh:
irm https://raw.githubusercontent.com/wangsunlight/xiaobao-dsh-employees/v0.1.8/install.ps1 | iex
脚本源码:install.ps1。也可以先下载查看,再运行 ./install.ps1 -Profile desktop;自定义安装位置可传 -DshPath '完整的 dsh.cmd 路径',-DryRun 只显示安装目标。
命令行:跨平台单条命令
在能调用 dsh 的终端执行。Desktop 须使用 Desktop 自带的 CLI,先初始化并完全退出应用;Windows 无需配置 PATH 时直接使用上面的 PowerShell 安装方式。
Desktop:
dsh plugin --profile desktop add --ignore-workspace-root-check https://github.com/wangsunlight/xiaobao-dsh-employees/releases/download/v0.1.8/xiaobao-dsh-employees-0.1.8.tgz
Web:
dsh plugin --profile web add --ignore-workspace-root-check https://github.com/wangsunlight/xiaobao-dsh-employees/releases/download/v0.1.8/xiaobao-dsh-employees-0.1.8.tgz
安装成功后重启 DSH,打开 左侧栏 校宝数字员工。初次安装时,接收与外发均关闭;已有设置继续保存在本机数据目录中。
从 GitHub 源码安装
仓库同时跟踪 lib/client.js 预构建产物,因此指定版本的 GitHub 安装也不需要执行构建脚本:
dsh plugin --profile desktop add --ignore-workspace-root-check github:wangsunlight/xiaobao-dsh-employees#v0.1.8
更新与卸载
更新时,将上面安装命令中的版本号换成新 Release 的版本,重新执行并重启 DSH。插件配置和聊天归档保留在 $DSH_HOME/xiaobao-employee/。
dsh plugin --profile desktop remove xiaobao-dsh-employees
Web 用户将 desktop 替换为 web。卸载只移除插件依赖;本机数据目录不会被删除。
本地开发安装
git clone https://github.com/wangsunlight/xiaobao-dsh-employees.git D:\xiaobao-dsh-employees
cd D:\xiaobao-dsh-employees
pnpm install
npm run check # 构建 lib/client.js + 运行测试
把插件加入 DSH 的 web profile(%USERPROFILE%\.dsh\profiles\web):
dsh plugin --profile web add --ignore-workspace-root-check file:D:/xiaobao-dsh-employees
或手工编辑 %USERPROFILE%\.dsh\profiles\web\package.json,在 dependencies 加入 "xiaobao-dsh-employees": "file:D:/xiaobao-dsh-employees",在 dsh.profile.bundles 末尾加入 "xiaobao-dsh-employees",然后在该目录执行 pnpm install。
重启 dsh web,打开 左侧栏 校宝数字员工。
DSH Desktop
Desktop 使用 %USERPROFILE%\.dsh\profiles\desktop(已验证内置 DSH 0.2.1-rc.2)。先初始化并完全退出 Desktop,在能调用其自带 CLI 的终端执行:
dsh plugin --profile desktop add --ignore-workspace-root-check file:D:/xiaobao-dsh-employees
或手工:在 profiles\desktop\package.json 的 dependencies 加 "xiaobao-dsh-employees": "link:D:/xiaobao-dsh-employees"(link: 直接指向源码目录,改代码后重启即生效),在 dsh.profile.bundles 末尾加 "xiaobao-dsh-employees",然后在该目录执行 pnpm install --config.confirmModulesPurge=false。重启 DSH Desktop。
本仓库的
cordis.patch.yml只提供安全默认值(接收与外发均关闭)。群 ID、职责、账号等都保存在本机$DSH_HOME/xiaobao-employee/,不要写进仓库。
首次配置(先收后发)
- 运行与记录 → 运行状态:点击「登录 DWS」,再打开钉钉授权页面完成扫码授权。状态会自动更新;确认显示"已登录"且是预期账号。
- 员工设置:填写名字和职责描述;工作模式、模型可以选择或跟随 DSH 默认。思考强度随模型提供的选项联动。默认工作目录可留空。
- 运行与记录 → 开关:勾选"接收钉钉消息"并保存,保持外发关闭。单聊默认响应所有人,需要时先在员工设置里限制允许人员或关闭单聊。
- 群与工作区 → 常驻群:搜索或列出我加入的群 → 添加 → 设置本群职责,点击「打开文件夹」选择工作区并保存。此时在群里 @你的账号,可在 DSH 会话列表看到
钉钉群 · xxx会话产生回复,发件箱里出现「未发送」记录(外发关闭)。 - 确认回复质量后再勾选"允许自动回复与主动发送"。再次 @ 即可在群里收到引用回复。
按群选择工作区
- Desktop 的「打开文件夹」使用 DSH 自带的系统文件夹选择窗口;Web 使用 Host 提供的目录选择能力。取消选择不会修改配置。
- 指定文件夹后,该群会直接在这个目录工作,并在下一次处理消息时关联到 DSH 的对应工作区,不额外创建群子目录。
- 更换文件夹并保存后,下次收到消息会新建会话;原会话及其文件保留,正在执行的任务继续使用原工作区。目录不再可访问时会报错,不会回退到其他目录执行任务。
- 「使用默认」恢复到默认工作目录下的群专属子目录。单聊仍按会话使用独立子目录;多个群可以选择同一个文件夹,但它们的会话仍独立,文件则共享。
配置与附件
- 名字用于回复身份;钉钉中的 @显示名仍跟随账号。员工与本群职责直接编辑,不提供别名或职责模板。
- 模型、思考强度、工作模式来自 DSH 目录;修改模型和工作模式仅对新会话生效。群会话可通过群操作中的“重置会话”切换;单聊已有会话可在 DSH 管理。列表失败和无法解析的历史值不会清空配置或草稿。
- 单聊范围可选关闭、所有人或指定人员;按姓名搜索后手动选择准确人员,指定人员为空时禁止保存。
- 仅接收通过触发规则的消息及同一会话直接引用消息中的附件。每条任务最多 10 个附件,普通文件单个最多 50 MiB、合计最多 100 MiB;图片遵守 Host 限制并作为原生图片内容传入模型。
- 文件先在隔离暂存目录验证,再保存到实际工作区的
dingtalk-attachments子目录;安全命名、不覆盖已有文件、不自动执行或解压。 - 部分失败仍处理可用文字和附件,并说明缺失项;纯附件全部失败时直接返回原因。关闭外发时只在运行记录保留反馈。成功附件不会被自动删除。
- 原消息的「🤔思考中」标记在执行结束时移除。外发关闭时不添加或移除;清理失败保留记录并有界重试,重新开启外发后继续清理。旧任务的遗留标记会在重启后清理,不恢复延迟回复。
- 不提供聊天斜杠命令;以
/开头的路径、代码或文字作为普通消息处理。
DWS 登录与退出
- 「登录 DWS / 重新登录」通过 DWS 官方设备授权流程生成授权链接和授权码;完成授权后自动更新账号,也可取消等待。插件不接收密码或保存 Token,凭证由 DWS 管理。
- 登录和退出会暂停接收与外发。登录成功后绑定本次授权的
corpId:userId,需要时再手动开启下方开关。 - 「退出登录」会先显示当前账号并要求确认,只退出这个精确账号,不退出本机其他 DWS 账号;群配置、工作区和历史记录保留。
- 授权等待可跨配置分类继续,超时后可重新获取链接。退出 DSH 会终止尚在等待的登录进程。
- 升级后须从「应用」菜单完全退出 DSH 再重新打开;仅刷新页面可能加载了新页面,但后台仍是旧版,出现接口不支持提示。
测试发送
在「群与工作区」选中一个群,点击底部「测试发送」,会立即向当前群发送“校宝数字员工连接测试成功。”,不打开弹窗、不运行 AI 任务,也不保存尚未提交的群配置。结果直接显示在底部,发送期间按钮禁用,发件箱保留发送记录。
测试前需登录 DWS,并在「运行与记录」中开启、保存消息接收和外发开关。该页面仅保留账号、开关和历史记录,不再放置测试发送入口。
数据目录
$DSH_HOME/xiaobao-employee/
config.json 设置页保存的全部配置
bindings.json 会话绑定、已发送消息 ID、本人信息
seen.json 已处理消息去重
identities.json 按钉钉账号隔离的人员名称缓存
attachments.json 已接收附件的有界去重元数据
outbox.jsonl 每一次外发尝试与回执
reactions.json 处理表情缓存及待清理的标记
group-history/ 各群消息归档(默认保留 14 天)
workspace/ 默认工作目录(每个会话一个子目录)
staging/ dws 发送文件/下载资源的临时目录
开发
npm test # node:test,全部离线(不会 spawn dws)
npm run build # esbuild 打包设置页到 lib/client.js
npm run package # 构建、测试并生成 release/*.tgz 与 SHA-256
node scripts/preview-product.mjs # 隔离 UI 验收;只使用模拟账号和记录
修改设置页后请同步构建 lib/client.js。本轮 v0.1.9 通过 npm run package 生成本地安装包与 SHA-256,不自动发布 Release;上方 v0.1.8 安装链接不会包含这些尚未发布的更改。
结构:src/dws(dws CLI 封装与监听器)· src/harness(Typert 网关 API 与回合跟踪)· src/bridge(入站归一化、触发判定、提示词、会话编排、回复)· src/tools(Agent 工具)· plugin-src/host(DSH Host 入口与管理 RPC)· plugin-src/client(设置页)。
已知边界
当前为预览版,不保证网络或存储故障下消息恰好处理一次。没有自动补发、重跑或聊天取消入口。旧
pending.jsonl保留原样,不读取或恢复其中的历史任务。接收和账号配置保存后会同步消息监听。关闭 DSH 会结束本插件的等待,模型会话结果仍可在 DSH 查看,不会在插件重启后自动发送。
模型在会话中发起的审批 / 追问(ask_user_question)不会转到钉钉,需在 DSH Web 处理;建议给校宝数字员工配置免审批或低风险预设。
附件接收依赖 DWS 返回可确认归属的资源标识与访问权限;图片能力取决于当前会话的模型及 Host 限制。工作区展示当前选择的目录,未提供知识库或完整任务中心。
DWS 事件不含 @ 列表,"被 @"判定依赖
--kind at-me监听器;"引用我的消息"依赖本插件发出过的消息 ID 记录。
No comments yet. Be the first to write one.