dsh-erp-bridge:把 DSH 接进企业 ERP 的双向集成插件

前言

在 DeepSeek Harness(DSH)里做企业场景,常见做法是给 Agent 挂一组「查单据、改状态」的工具。单点查询往往够用,但和真实 ERP 协同时会卡在四件事:ERP 侧状态变了,Agent 怎么被可靠地叫醒;回合结束后,结果怎么带回 ERP 而不是进程内 fire-and-forget;进程重启会不会丢事件;写回是否默认开放、能否审计。社区插件 dsh-erp-bridge(维护者 dengkun0,分类:工作流)定位为一层可复用的集成引擎,而不是某一家 ERP 的 API 薄封装。下面介绍它的架构、安装方式与可复现演示路径。

这是什么

dsh-erp-bridge 是面向 DSH 的双向企业系统(ERP / MES / OA / 财务)集成插件。入站侧接收 HMAC 签名的 HTTP 事件,先落盘、去重,再创建只读 Session;出站侧把 Session 的 turn/end 投影成带幂等键与签名的回调,经持久 outbox 投递回 ERP。厂商差异通过适配器(mock、odoo、http-gateway)收敛;写回工具默认不注册,需策略白名单且每次过 DSH 审批。审计从 Session 日志折叠,不另建第二套真相。

数据流可概括为:

ERP ──签名事件──▶ 入站监听器 ──▶ inbox 台账 ──▶ 只读 Session ──▶ ERP 工具
                                                              │
ERP ◀──签名回调── 投递器 ◀── outbox 台账 ◀── turn/end 投影 ◀──┘

README 注明已在 DSH Desktop 0.2.1-rc.3 上完成两条真实端到端链路;包版本 0.1.0,许可证 MIT。目录页:https://www.skillhub.cn/plugins/dengkun0/dsh-erp-bridge。

核心功能

入站:签名事件与只读 Session

ERP 的审批完成、单据变更、异常预警等以 HMAC 签名的 HTTP 事件进入插件。事件先写入 inbox 台账并去重,再创建 read-only Session,把事件作为明确标记的不可信数据交给 Agent。监听器默认在 127.0.0.1:3081 提供 POST /erp/events;健康检查为 GET http://127.0.0.1:3081/erp/health。

出站:持久投递与退避

Session 的 turn/end 被投影为结果回调,带幂等键与 HMAC 签名投递回 ERP。对 5xx / 408 / 429 按指数退避重试;4xx 判为永久失败;进程重启后继续从 outbox 推进。

适配器

适配器 用途
mock 开箱即用,内存演示数据,不连网
odoo Odoo 12–18 JSON-RPC
http-gateway 用友 U8/NC、金蝶 K3、SAP ECC 等经客户中间件对接的最小 HTTP 契约

写回与策略

erp_create_draft、erp_commit 默认不注册。仅当 policy.allowWrite: true 且实体同时在 policy.writableEntities 与适配器 writable 中时才出现;每次调用需通过 ctx.approval。审批不可用则拒绝(fail-closed)。erp_retry 受 policy.allowResend 控制。

工具与审计

始终注册的只读工具包括:erp_status、erp_query、erp_get、erp_ledger、erp_audit。erp_audit 从当前 Session 日志折叠「谁、调了什么工具、参数、结果、谁批准/拒绝」;erp_ledger 侧重 inbox/outbox 投递状态。

非目标(README 明确):不替代 ERP 自有审批流;不做浏览器自动化;不全量同步 ERP 数据进 DSH;不在插件内保存 ERP 密码明文。

安装与启用

前置

  • DSH Desktop / Host 0.2.1-rc.3(对应 @deepseek-ai/dsh-base 版本)
  • Node ^22.19 || >=24
  • 插件仅使用 Node 内置模块,无需额外 npm 依赖

安装到当前 profile

在 DSH 会话中让 Agent 执行,或通过终端调用 DSH 插件管理。命令来自仓库 README,目标为本地目录的绝对路径:

plugin_manager install_bundle  target: <绝对路径>/dsh-erp-bridge

安装器会链入 profile、追加 bundle 并通过 HMR 激活。安装后只读 ERP 工具出现在工具列表;数据目录默认为 <DSH_PROFILE_DIR>/erp-bridge,仓库附带 cordis.patch.yml 可将演示数据放在 <profile>/.dsh-erp-bridge。

修改代码后需在插件管理中对该 bundle 禁用再启用(include:dsh-erp-bridge),仅改文件不会自动重载 ESM 模块。

卸载:

plugin_manager remove_bundle  target: dsh-erp-bridge

台账留在 dataDir;删除 dataDir 才会清空幂等与重试历史。

插件在 DSH 当前进程权限下运行;安装前应自行审阅源码与 MIT 许可证,并按企业规范配置凭据与网络边界。

典型用法:5 分钟 mock 演示

演示使用仓库自带 mock ERP,无需真实 ERP。

1、启动 mock ERP(另开终端;--data-dir 与插件配置一致)

node mock-erp/server.mjs --port 3082 --data-dir "C:\Users\<你>\.dsh\profiles\desktop\.dsh-erp-bridge"

2、发送一条签名 ERP 事件

node test/emit-live.mjs "PO-2026-0002:submitted:v1" "purchase_order.submitted"

mock 用 dataDir/secret 中的密钥签名并转发到 127.0.0.1:3081/erp/events。随后可用 erp_ledger kind=inbox 查看 received → prompted,Session 列表出现只读会话,Agent 可调用 erp_query / erp_get / erp_ledger;回合结束后 outbox 出现 done,GET http://127.0.0.1:3082/mock/state 可见结果回调。

3、查看证据链

在 Session 内依次让 Agent 调用:

erp_status
erp_ledger kind=all
erp_audit

4、试写回

将当前 Session 权限切到 workspace-write(审批策略 ask),再让 Agent 创建采购订单草稿并提交;erp_create_draft 与 erp_commit 各需一次审批。在 danger-full-access(审批策略 never)下,DSH 审批服务会直接拒绝写工具,属预期行为。

配置要点

配置写在 profile 的 cordis.patch.yml(或 bundle 自带 patch)中,整段替换、不深合并。摘录结构如下(生产需按环境改 dataDir、网关 URL、凭据引用):

- id: dsh-erp-bridge
  name: dsh-erp-bridge
  config:
    dataDir: 'D:\dsh-data\erp-bridge'

    adapter:
      id: http-gateway
      baseUrl: 'http://erp-gateway.internal:8080'
      authRef: ERP_GATEWAY_TOKEN
      entities:
        purchase_order:
          fields: [id, number, vendor, vendorName, amount, currency, status]
          writable: true

    ingress:
      enabled: true
      mode: standalone
      host: 127.0.0.1
      port: 3081
      path: /erp/events
      signature:
        secretRef: DSH_ERP_HMAC_SECRET
        timestampWindowSec: 300
        autoGenerate: false

    outbound:
      enabled: true
      targetUrl: 'http://erp-gateway.internal:8080/dsh/turn-result'
      scope: linked
      maxAttempts: 8

    inbound:
      enabled: true
      permissionPreset: read-only
      eventNames: []

    policy:
      allowWrite: false
      writableEntities: [purchase_order]
      maxQueryRows: 50

入站默认只绑回环地址,外层由反代终结 TLS;ingress.signature.secretRef 依次查 DSH 凭据 seam、环境变量、dataDir/secret。完整字段见仓库 lib/config.js。

适用场景与注意

适合谁:需要在 DSH 里做「ERP 事件驱动 Agent、回合结果回写 ERP、可审计、写回可控」的团队;已有 Odoo 或愿意按 http-gateway 五端点契约写中间件对接传统 ERP 的环境。

注意:

  1. 本包为本地目录安装,不是凭插件名自动从 GitHub 拉取的 CLI 别名命令。
  2. dataDir 需单实例独占;密钥与台账与 profile 演示目录可隔离。
  3. 入站仅接受 HMAC-SHA256 签名,时间窗默认 ±5 分钟(见 README 安全边界章节)。
  4. SkillHub 等为社区插件目录,与 DeepSeek / 幻方无官方从属关系;星标与传播数据以各站点当时展示为准。

结尾

经过上面的步骤,可以把 dsh-erp-bridge 理解为:签名入站 + inbox/outbox 台账 + 只读默认 + 审批门控写回 + Session 级审计,而不是零散 ERP API 工具集。进一步细节见仓库 实现方案 与 验收证据。

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

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

Xiaoye