dsh-agent-relay:在 DSH 与 Codex 原生会话之间做持久双向消息中继

前言

在 DeepSeek Harness(DSH)里跑 Web 会话、在 Codex CLI 里跑独立线程时,两边往往各自有一套工具与会话历史,缺少一条「可投递、可回溯、重启后仍有效」的通道。复制粘贴或临时脚本难以覆盖线程发现、委派任务回传等需求。Agent Relay 以 DSH bundle 形式提供中继服务:DSH 侧通过注册的 relay_send 工具(发送方取自 exec.agent),Codex 侧通过绑定成员的 stdio MCP 伴侣(发送方取自 bearer 凭证),实现持久、双向的消息交换。

这是什么

Agent Relay(npm 包名 dsh-agent-relay-plugin,当前版本 0.1.0)由维护者 lyuwen 发布,分类为工作流类 DSH 插件。它在 DSH 原生会话与 Codex 原生线程之间建立 durable messaging:支持 push 投递、线程发现(relay_threads)、以及委派工作回到发起对话的会话;中继自身的 ephemeral 线程不会进入用户可见历史。许可证为 MIT。

核心功能

以下能力均来自项目 README 与 package.json 说明,并已标注验证环境。

  1. 双向 push 投递:真实 DSH Web 会话与持久 Codex 线程可互相发消息;各端按各自 harness 的接入方式连到中继。
  2. DSH 侧工具:通过 Cordis 注册的 relay_send,发送身份来自 profile 的 exec.agent。
  3. Codex 侧 MCP:捆绑的 MCP companion 提供 relay_send、relay_inbox、relay_members、relay_status 等;外部成员(如自启 TUI)走 pull 路径,消息可排队并在 relay_inbox 一次性取走。
  4. 成员与寻址:relay_members 列出成员别名、标题、cwd;to 可接受别名、唯一 id 前缀或完整 member id;歧义或未知名称会返回候选列表而非猜测。
  5. 可选会话创建:在配置 allowSessionCreation(及 maxSpawnedMembers 上限)时,成员可创建新会话。
  6. 默认运行参数:默认 teamId: relay,bridgePort: 33120;日志与状态位于 $DSH_HOME/agent-relay/(含 journal.jsonl);未配置 transport 时对 Codex daemon 默认 socket 做 lazy attach,daemon 晚于 host 启动时也会在出现后挂上。

兼容性(README 表格):

组件 已验证版本
DeepSeek Harness 0.2.0-rc.2;engines.dsh 为 >=0.2.0-rc.2 <0.3.0
Codex CLI 0.163.0(stdio / WebSocket app-server 及 daemon unix WebSocket);协议曾在 0.162.1 探测
Node >=22

安装与启用

Agent Relay 是 DSH bundle:安装后会在 profile 中增加一条默认 disabled 的 Host 行;仅在 profile 用户层启用后,每次 boot 该 profile 时才会启动中继。

安装 bundle(任选其一,命令来自官方 README):

# 预构建 tarball:无构建脚本、无额外网络
dsh plugin --profile web add ./dsh-agent-relay-plugin-0.1.0.tgz
# 或本地 checkout 路径:
dsh plugin --profile web add /path/to/dsh-agent-relay
# 或发布后:
dsh plugin --profile web add dsh-agent-relay-plugin

在 $DSH_HOME/profiles/web/cordis.patch.yml 顶层 YAML 数组中增加 enable 块。后续 layer 会整段替换某行的 config,因此需写全各键:

- id: agent-relay
  disabled: false
  config:
    codexProxy: ~/.codex/app-server-control/app-server-control.sock
    codexExecutable: /path/to/codex
    allowSessionCreation: true
    externalMembers:
      - id: codex-tui
        tokenFile: $DSH_HOME/agent-relay/codex-tui.token

重启 profile 后,中继随 profile 启动;Codex daemon 若晚于 host 出现,也会在 attach 时机连上。

卸载:

dsh plugin --profile web remove dsh-agent-relay-plugin

Codex 侧配置与 skill 安装

Codex 通过 bundle 内的 MCP companion 连到中继。在 ~/.codex/config.toml 中增加(token 与 external member 一致):

[mcp_servers.agent-relay]
command = "/path/to/node"
args = ["$DSH_HOME/profiles/web/node_modules/dsh-agent-relay-plugin/dist/mcp.mjs"]
default_tools_approval_mode = "approve"

[mcp_servers.agent-relay.env]
AGENT_RELAY_URL = "http://127.0.0.1:33120/relay"
AGENT_RELAY_TOKEN = "<the codex-tui member token>"

创建成员 token 目录并向两侧 harness 安装 skill:

mkdir -p "$DSH_HOME/agent-relay" && chmod 700 "$DSH_HOME/agent-relay"
printf '%s\n' "$TOKEN" > "$DSH_HOME/agent-relay/codex-tui.token"
chmod 600 "$DSH_HOME/agent-relay/codex-tui.token"
node "$DSH_HOME/profiles/web/node_modules/dsh-agent-relay-plugin/tools/install-skill.mjs" \
  --dsh-home "$DSH_HOME" --codex-home "$HOME/.codex" --agents-home "$HOME/.agents"

在不 boot 的情况下检查 layer 是否合成正确,再重启 profile:

dsh --profile web --dump-config | grep -A4 'id: agent-relay'

自管 Codex 的 pull 路径

中继可驱动其托管的 Codex;若使用自启 TUI、IDE 会话或自有 daemon,则由 Codex 主动 pull。在 patch 中固定 bridgePort 与 externalMembers(token 与 Codex 环境变量一致),并在该 Codex 的 config.toml 中配置同一 MCP 与 AGENT_RELAY_URL / AGENT_RELAY_TOKEN。发往外部成员的消息保持 queued,不会注入 relay 未拥有的进程,且 survive relay 重启;relay_inbox 交付后 relay 记录 accepted,receipt.deliveredBy: "pull"。

开发与真实环境 profile(可选)

README 描述了隔离开发 home(relay-dev)与用户真实 ~/.dsh 下的 web-relay profile:前者不修改用户真实 profile;后者共享 storages/sessions,需注意同一 home 上多 host 并发时的 workspace/registry 编辑。若仅日常使用,按上文在 web profile 启用即可;开发 overlay 细节见 GitHub README 的 “How it is wired” 一节。

适用场景与注意

适合谁:需要在 DSH Web 会话与 Codex 线程之间做正式消息通道、线程发现或跨 harness 委派任务的开发者;已使用 DSH >=0.2.0-rc.2 且 Node >=22 的环境。

权限与安全:插件随当前 DSH profile 进程权限运行,会读写 $DSH_HOME/agent-relay/、接触 Codex socket 与 MCP 配置。安装前应阅读 GitHub 仓库 源码与 MIT 许可证,自行评估 token、external member 与 allowSessionCreation 的风险。

生态说明:DSH 社区插件目录(如 SkillHub 上的 lyuwen/dsh-agent-relay)为独立站点,与 DeepSeek / 幻方无官方从属关系;本文事实以仓库 README 与 package 元数据为准。

结尾

Agent Relay 把「DSH 原生会话 ↔ Codex 原生线程」之间的消息做成 bundle 级能力:安装后显式启用、配置 Codex MCP 与 token,即可在两侧 harness 各自原生接入方式下做持久双向 relay。进一步语义与验证证据见仓库 README。

  • 目录页:https://www.skillhub.cn/plugins/lyuwen/dsh-agent-relay
  • GitHub:https://github.com/lyuwen/dsh-agent-relay
羽毛球分组比赛记分
小程序二维码

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

小夜