Skip to main content

dsh-sdr/packages/dsh-sdr

24Stars6Forks0Issues0Watchers

Runs a nine-stage foreign trade acquisition SOP with human approval gates, customer dedup, and audit logging in a safe dry-run mode.

Evidence5/5methodologySourceInstallMaintenanceDSH versionSecurity scan
Machine-auditedInstall commandRepo verifieddsh-plugin topicLicenseREADMEAI wiki
Language
Python
License
MIT
Branch
main
ai-agentb2bcold-emailcordisdeepseek-harnessdshdsh-pluginexport

Install

cmdweb profile
$ dsh plugin --profile web add @xuxchloris/dsh-sdr

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

Install via your agent

Install the DeepSeek Harness plugin Xuxchloris/deepseek-harness-sdr-plugin/packages/dsh-sdr for me: review the repository at https://github.com/Xuxchloris/deepseek-harness-sdr-plugin first, then run the install command and verify the plugin loads successfully.

Paste this instruction to the DSH Web GUI assistant — it will install and verify for you.

一句话定位

给 DeepSeek Harness Web 增加「SDR 数字员工」模式,让 Agent 严格按九阶段外贸获客 SOP(任务解析→客户发现→背调→评分→开发信→人工审批→跟进→报价→结案)跑流程,并在开发信发出前强制人工审批。

核心能力

  • 推进九阶段外贸获客 SOP:服务端状态机控制阶段顺序,模型不能跳阶段也不能自己指定阶段
  • 人工审批卡点:草稿必须经人类逐封选择,所有草稿都通过 sdr_review_drafts 批准后,sdr_continue_after_approval 才放行
  • 草稿哈希绑定:每条批准凭证绑定草稿内容 SHA-256 哈希,草稿被改动后原有批准自动失效
  • 客户去重:基于 domain/email/phone/company 计算 canonical_lead_id,跨活动复用同一批客户不会重复开发
  • 混合 RAG 知识库:默认本地 BM25+向量重排;可换 PostgreSQL+pgvector 适配器,支持来源版本引用与 Recall@K/MRR 评测
  • 真实发送边界:Email/WhatsApp/CRM 三个 connector 默认全部 dry-run,模型拿不到 send_email 这类通用发送工具,调用名包含 approve/send_email/send 的工具会被门控拒绝

技术实现

  • 语言: JavaScript (ESM,"type": "module")
  • 关键依赖: 仅使用 Node.js 标准库 (node:fs/promises、node:crypto、node:os、node:path、node:url);可选注入 pg 作为 Postgres adapter
  • 架构模式: DSH bundle 插件,通过 cordis.patch.yml 注入 dsh-sdr-installer 行(角色 installer)把 preset 写入 $DSH_HOME/.agent-presets/sdr,并由 agent.cordis.yml 在 agent 行通过 inject: [tools, userQuestions] 调用原生 JS 服务
  • 入口文件: packages/dsh-sdr/lib/index.js(导出 apply(ctx, config) 与领域类 SdrService、JsonStore、ConnectorRegistry)

适用场景

做外贸获客的中小企业用户希望把「找客户、写开发信」这种重复流程交给 Agent,但又不放心让 AI 自己直接发邮件给陌生买家——这个插件用服务端状态机把流程拆成九个必须按顺序走的阶段,并在开发信发出前要求人类逐封批准,保证 Agent 永远不会绕过人发出消息。

前置依赖与兼容性

依赖最低版本说明
DeepSeek Harness0.1.0-rc.6仓库 README 与 cordis.patch.yml 均以 0.1.0-rc.6 为目标,其他版本未测
Node.js20.0.0package.json 的 engines.node 声明 >=20
平台跨平台无 os / cpu 限制,依赖仅限 Node 标准库
原生模块无不依赖 node-pty、node:sqlite 等原生模块

安装方式

dsh plugin --profile web add github:Xuxchloris/deepseek-harness-sdr-plugin/packages/dsh-sdr

配置项

配置类型说明默认值
DSH_HOME环境变量DSH 主目录,preset 写入 $DSH_HOME/.agent-presets/sdr~/.dsh(即 os.homedir()/.dsh)
DSH_SDR_DATA_FILE环境变量任务状态 JSON 文件路径$DSH_HOME/.dsh-sdr/state.json(Windows 下若未设 DSH_HOME,则为 %USERPROFILE%\.dsh-sdr\state.json)
DSH_SDR_DEPLOYMENT_CONFIG_JSON环境变量部署基线 connector 配置(JSON 字符串),Agent 运行时会保留为基线未设置
DSH_SDR_AGENT_KNOWLEDGE环境变量 (1)是否允许 Agent 写入知识条目;开启后仍会拒绝包含凭证的内容未设置(不允许写入)
DSH_SDR_AGENT_CONFIG环境变量 (1)是否允许 Agent 配置 connector 非敏感参数未设置(不允许配置)
DSH_SDR_AGENT_LIVE_CONFIG环境变量 (1)是否允许 Agent 把 connector 切到 live;仅允许保存,不会自动启用真实发送未设置(仅 dry-run)

常见问题

Q: 安装后 DSH Web 模式菜单里没有「SDR 数字员工」怎么办?

A: 重新执行一次 dsh plugin --profile web add ...,然后重启 dsh web 并新建一个会话——旧会话里加载的是安装前的 preset,必须新建会话才能看到新模式。

Q: 真实邮件会发出去吗?

A: 默认不会。内置的 Email / WhatsApp / CRM 三个 connector 的 send() 都返回 blocked-dry-run,没有真实凭证也不会发出。要对接真实渠道需要部署方自己注册 connector 实现,审批流程仍然不变。

Q: 开发信改过之后,原来的批准还算数吗?

A: 不算。每条批准凭证绑定的是草稿 subject+body 的 SHA-256 哈希,草稿改过之后再调用 sdr_review_drafts 会报「哈希不匹配」,必须重新审批。

Q: 任务状态保存在哪里?怎么改路径?

A: 默认写入 $DSH_HOME/.dsh-sdr/state.json,Windows 若没设 DSH_HOME 则是 %USERPROFILE%\.dsh-sdr\state.json。设置环境变量 DSH_SDR_DATA_FILE 即可改成自定义路径。

Q: 审批阶段报 fetch failed 怎么办?

A: 这表示当前会话不支持向用户发起交互式提问,任务不会绕过审批继续推进,会冻结在 human_approval 阶段。改用 DSH Web 模式菜单里的「SDR 数字员工」会话即可。

Q: 多实例部署能共享数据吗?

A: 默认的本地 JSON 存储只适合单实例。多实例/生产环境请用 PostgresKnowledgeRepository,自己注入 pg pool、embedder、reranker;任务状态也需要部署方自己安排共享存储。

Q: 不想让 Agent 写入知识或改 connector 配置,怎么部署?

A: 默认就是不允许。DSH_SDR_AGENT_KNOWLEDGE、DSH_SDR_AGENT_CONFIG、DSH_SDR_AGENT_LIVE_CONFIG 三个开关默认关闭,只有显式设为 1 才放行;并且 Agent 写入密码、token、API key 等敏感字段会被直接拒绝。

Q: 没有 DSH Web 也能跑吗?

A: 可以做离线演示。在 packages/dsh-sdr 目录执行 npm test 跑 7 个 node:test 单元测试,或在仓库根目录执行 node scripts/demo_dsh_sdr.mjs 跑端到端 demo,全部使用合成数据,不需要任何凭证。

上手难度

入门 — 安装一行命令即可使用;默认配置齐全、dry-run 默认安全、无需任何凭证即可演示九阶段流程;进阶调优只需理解 4 个环境变量即可。

已知问题与限制

  • 只针对 DeepSeek Harness 0.1.0-rc.6 验证,其他版本未测(README.md:143 / cordis.patch.yml:1)
  • 默认本地 JSON 状态存储只适合单实例部署;多实例需要切换到 PostgreSQL adapter 并自己共享状态文件(README.md:146)
  • Email / WhatsApp / CRM 三个真实 connector 不随插件提供,只有接口和 dry-run 实现;要发真实消息必须由部署方注册自定义 connector(README.md:147)
  • 模型无法调用任何名字包含 approve、send_email、send-email 或 send 的工具,所有审批和发送都必须经过原生人工审批门控(lib/domain.js:336-342)
  • 当会话不支持交互式提问时(如部分 headless 环境),审批请求会失败,任务冻结在审批阶段,不会跳过审批继续推进(README.md:148)
  • Agent 通过 sdr_knowledge_upsert 写入的内容若疑似包含 PRIVATE KEY、sk-…、password=、api_key= 等模式会被直接拒绝;connector 配置中 password/secret/token/api_key/private_key 等键名(非 _ref 结尾)同样会被拒绝(lib/domain.js:74、84、108)

Read the usage guide →

Install steps, key points, FAQ and compatibility for this plugin — auto-derived from indexed fields.

Listing badge

Listed on deepseek-plugin.org
[![Listed on deepseek-plugin.org](https://img.shields.io/badge/listed_on-deepseek--plugin.org-007EC6)](https://deepseek-plugin.org/plugins/Xuxchloris/deepseek-harness-sdr-plugin/packages/dsh-sdr)

Paste this markdown into your GitHub README to link back to this listing. The badge only states the listing — not a security endorsement.

← Back to plugin directory