Back to home

IvanWu2015

dsh-connect

Bridge DeepSeek Harness (DSH) agents to Feishu/Lark & DingTalk — chat, stream replies, and arrange work from your messaging app.

Stars
0
Language
TypeScript
Created
Aug 15, 2026
Updated
Aug 15, 2026

Introduction

dsh-connect

English · 中文

DeepSeek HarnessDSH)的 Agent 接入聊天软件(飞书/Lark 先行,后续钉钉、企业微信等),实现信息同步 + 工作安排:在飞书里给 DSH 派任务、看它流式执行、多轮带上下文,任务结束主动推送结果卡片。

特性

  • 双向信息同步:飞书消息 → DSH Agent(agent.followup),Agent 回复流式回写飞书(打字机卡片)。
  • 多轮上下文:每个飞书会话(单聊/群)绑定一个 DSH Session,进程重启后自动 resume
  • 工作安排:任务跑完主动推送「结果摘要」卡片;ctx.connect.notify() 供 goals/jobs 钩子主动推送进度。
  • 安全:群聊默认需 @机器人;用户/群白名单;飞书凭据走环境变量或加密配置。
  • 交互式菜单/menu 层级点选(工作目录 / 对话 / 设置 / 插件 / 压缩等),同一张卡片原地更新,可「返回」「退出」,连续操作。
  • 本地指令(不消耗模型):/status /task /chat /dir /workspace /workspaces /plugins /compact /history /goals /model /new /clear /stop /settings /help
  • 可扩展dsh-connect(核心,渠道无关)+ dsh-connect-feishu(飞书适配器)分层,新增钉钉只需再加一个适配器包。

仓库结构

packages/
  connect/         dsh-connect 核心层:服务、绑定、驱动、流式桥、命令
  connect-feishu/  dsh-connect-feishu 飞书适配器:createLarkChannel 长连接、归一化、流式回写
docs/
  QUICKSTART.md    分步运行指南(DSH 端 + 飞书端)
  feishu-setup.md  飞书开放平台配置手册
  PUBLISHING.md    命名 + GitHub/npm 可发现性指南
examples/
  profile-cordis.patch.yml

快速开始

安装

已发布到 npm,直接装进你的 DSH profile:

dsh plugin --profile web add dsh-connect dsh-connect-feishu

配置

在 profile 的 cordis.patch.yml$DSH_HOME/profiles/web/cordis.patch.yml)里用 insert 追加(Host 平面):

- insert:
    - id: connect
      name: dsh-connect
    - id: connect-feishu
      name: dsh-connect-feishu
      config:
        appId: cli_xxxx
        appSecret: cli_secret_xxxx
        transport: websocket
        requireMention: true
        dmMode: open

启动

重启 dsh web(Host 插件需重启进程才生效),按 docs/feishu-setup.md 完成飞书侧订阅后,即可在飞书里对话。

详细的分步操作(含飞书端设置与验证)见 docs/QUICKSTART.md

指令清单

指令说明
/menu打开主菜单(层级点选,同一张卡片原地更新,可返回 / 退出)
/settings/set设置:切换模型 / 推理强度 / 通知开关 / 配置总览
/model查看当前模型,点选切换
/status会话状态、模型、工作目录、排队数、会话 ID
/task/tasks /todo查看当前任务清单
/chat/session /sessions列出对话,点选切换或新建
/dir/cd /pwd切换工作目录(点选,或 /dir <绝对路径>
/workspace <绝对路径>新建工作区
/workspaces列出所有工作区
/plugins查看插件清单
/compact压缩当前会话上下文
/history [条数]查看最近会话消息
/goals查看当前目标
/new/reset开启新对话
/clear清空当前对话
/stop/cancel停止当前任务
/help列出全部命令

所有 / 指令都由插件本地执行,不消耗模型;其余文本作为任务发送给 DSH Agent。

配置

dsh-connect(核心)

默认说明
agentPreset未设置=roster 默认每个绑定会话采用的 Agent 预设(如 standard
workDirDSH 第一个工作区Agent 工作目录(绝对路径,可显式指定)
workspaces[]/dir 交互式选择里列出的工作目录列表
allowUsers[]发送者白名单(空=全部放行)
allowChats[]会话白名单(空=全部放行)
stateDir./.dsh-connect绑定路由 bindings.json 存放目录

dsh-connect-feishu(飞书)

默认说明
appId / appSecret环境变量 FEISHU_APP_ID / FEISHU_APP_SECRET应用凭据
transportwebsocket长连接(推荐);webhook 需公网 HTTPS
verificationToken / encryptKey仅 webhook 模式需要
requireMentiontrue群聊需 @机器人 才响应
dmModeopen单聊策略:open 接收 / closed 忽略

原理

  • Agent 创建/恢复:复用 DSH 官方驱动范式(见 dsh-headless)——ctx.agents.create({ meta:{cwd, agentPreset}, agentOptions:{provider,model}, setup });恢复走 ctx.agents.resume
  • 预设挂载setupinstallModelSelection + ctx.agentPresets.mount(agentCtx, presetId),让绑定会话获得标准工具集(bash/fs/…)。
  • 流式:监听 session/eventassistant/chunk(text-delta),经 createAsyncQueue 桥接进飞书 channel.stream() 的打字机卡片;turn/end 判定回合结果。
  • 串行:每个 chatKey 一个 AgentRunner,消息入队串行执行,agent.followup 天然排队。

测试

pnpm build        # 先构建(生成 lib/)
pnpm test         # 单元测试(纯逻辑)+ 冒烟测试(Cordis 运行时加载契约)
  • packages/connect/test/unit.test.mjs:命令解析、绑定持久化、异步队列、回合结果推导。
  • packages/connect/test/smoke.mjs:把两个插件加载进真实 Cordis 上下文,验证 ctx.connect 服务注册、适配器注册、白名单授权、notify 主动推送与飞书适配器构造。

文档

许可

MIT