dsh-plugin-codex-link: Driving Codex Sessions in DSH

前言

在 DSH 里编排智能体时,常见做法是只在本机 DSH 会话里调工具、读日志。若你同时在用 OpenAI Codex CLI 或桌面端,会话、回合和额度都在 Codex 侧,DSH 默认拿不到「切换线程、发指令、看工具调用过程、派子任务只取结果」这一整条链路。手工在 Codex 窗口里复制粘贴,既慢,也难和 DSH 的自动化对齐。

下面介绍社区插件 dsh-plugin-codex-link(GitHub 仓库 CN-Mg/codex-link)。它通过 Codex 自带的 codex app-server(JSON-RPC over stdio)和 codex exec --json,把会话控制暴露为 DSH 工具;Codex 侧不需要再装任何插件。维护者 CN-Mg(npm 包作者字段为 Bolin),npm 包名 dsh-plugin-codex-link,当前资料中版本 0.4.0,许可证 MIT。社区目录 skillhub.cn 将其归类为「趣味换装」,与功能无关时以 README 能力描述为准。

这是什么

一句话:DSH 与 Codex 之间的会话控制桥——切换 Codex 会话、发送指令、实时读取过程、派遣子智能体,并在 DSH 设置页用左侧面板切换操作方式。

插件只依赖宿主提供的 ctx.tools / webServer,自身零 npm 依赖(仅用 Node 内置模块)。Node 引擎要求 >= 22。DSH 兼容性在 package 中标注对 0.2.1-rc.3 为 compatible。

三种操作方式

方式保存在 <DSH_HOME>/codex-link/ui.json,可在 设置 → Codex 联动 随时切换;codex_task 的 channel 可临时覆盖。

方式 说明 主要工具
直控会话 DSH 直接驱动已绑定的 Codex 会话,实时读过程,可追加/中止 codex_send / codex_watch / codex_result
子智能体 每次任务起独立 Codex 进程,只回最终结果,不占用当前在看会话 codex_task(channel=isolated)
混合(默认) 有绑定会话走直控;无绑定或需隔离时走子智能体 两者皆可

README 中的维护者默认示例:工作区 C:\Users\Bolin\Desktop\DSH\Wechat,默认会话名「微信工作区(DSH)」(不存在时自动创建)。你本地会以配置、设置页或「当前 DSH 会话目录 → 用户主目录」的自动规则为准。

核心能力与工具一览

需求 工具
查看/切换指定 Codex 会话 codex_threads / codex_use
发送指令、运行中追加或中止 codex_send(mode=auto/steer/interrupt)
派遣子智能体,只取最终结果 codex_task(channel=auto/isolated/session)
读取运行过程 codex_watch(游标续读)
取最终回答、耗时、token 用量 codex_result
查询 5 小时 / 7 天额度 codex_usage
健康检查 codex_status
把 Codex 窗口切到项目 codex_open_project

排查问题可先调用 codex_status,查看 app-server 连接、Codex 路径与版本、默认工作区/会话、当前 DSH 绑定。

codex_use 绑定成功后写入 <DSH_HOME>/codex-link/bindings.json,DSH 重启后仍生效。codex_send 在其它客户端占用会话时会返回 BUSY_THREAD;配置 queueFallback: true(默认)时,可改用 Codex 官方 codex queue 投递到桌面端正在写的会话,过程改从 rollout JSONL 增量读取。

安装与启用

装完无需配置即可使用:工作区留空时优先「当前 DSH 会话目录」,否则用户主目录;也可在 设置 → Codex 联动 → 工作区 固定目录(写入 ui.json,优先级高于 cordis.patch.yml 里的 workspaceRoot)。

Codex 侧:已安装并登录 Codex CLI/桌面端即可,无需插件。

从 npm 安装(CLI / Web profile)

# DSH CLI / Web profile
dsh plugin --profile web add dsh-plugin-codex-link

# 或从 GitHub 指定 tag
dsh plugin --profile web add "github:<owner>/dsh-plugin-codex-link#v0.3.0"

DSH 桌面端

Plugins 页 → 安装 → 输入包名 dsh-plugin-codex-link → 重启 DSH。

桌面 profile 由桌面端独占管理,不能用 dsh plugin --profile desktop add。本地开发时可在 Plugins → 安装 → 填仓库绝对路径(或 file: spec)→ 重启。

显式配置可在 profile 的 cordis.patch.yml 覆盖(注意 config 整块替换,需写全要保留的键):

- id: dsh-plugin-codex-link
  name: dsh-plugin-codex-link
  config:
    workspaceRoot: 'D:\your\project'   # 留空 = 自动
    defaultThreadName: '你的 Codex 会话名'
    codexPath: null

常用配置项包括:mode(direct/subagent/hybrid,默认 hybrid)、sandbox(默认 workspace-write)、approvalPolicy、networkAccess、approvals(默认拒绝审批并记录)、maxParallelTasks(默认 2)等,完整表格见仓库 README。

典型用法

经过上面的安装,可按 README 推荐流程操作。

直控一条任务

  1. codex_threads(可选)列出会话;
  2. codex_use 绑定目标(支持完整 ID、前缀 ≥6 位、列表序号、标题片段;create=true 可在默认工作区新建);
  3. codex_send 发送指令;
  4. codex_watch 循环读过程(cursor 续读,waitMs 默认 8000,上限 20000);
  5. codex_result 取最终回答与用量;需中止用 codex_interrupt(queue 回退通道下不可用,请在 Codex 里停止)。

子智能体一次拿结果

调用 codex_task,参数 task 必填;channel=isolated 时走 codex exec --json 独立进程。返回的线程 id 可用 codex_use <threadId> 接管后再走直控看过程。

方式切换

打开 设置 → Codex 联动,在三种操作方式卡片中点选;或对单次任务用 codex_task 的 channel=auto/isolated/session。

微信渠道建议:一轮任务最多 3 条进度 + 1 条最终结果,避免占满消息配额(README 说明)。

适用场景与注意

适合谁:已在用 DSH 编排对话或自动化,同时依赖 Codex CLI/桌面端做编码回合;需要在 DSH 里切换线程、旁观工具调用、或派隔离子任务而不污染当前 Codex 窗口会话。

权限与安全:插件以当前 DSH 进程权限运行,安装前请自行审阅 源码 与 MIT 许可证。app-server 仅 stdio,不监听端口。新建会话默认沙箱 workspace-write、审批策略偏保守;将 approvals 设为 allow 会自动批准 Codex 审批请求,风险自负。

已知限制(节选):插件更新后需重启 DSH 才能加载新 host/client;thread/list 不返回空会话;同一会话被桌面端与 DSH 同时直写时会 BUSY_THREAD;线程级窗口聚焦无官方 API,v1 主要支持项目级 codex_open_project。

社区插件目录与 DeepSeek / 幻方无官方从属关系;星标等元数据以目录页为准(资料中 GitHub 1 stars)。

结尾

dsh-plugin-codex-link 把 Codex 的 app-server 与 exec 能力封装成 DSH 工具集,并用设置页统一工作区、默认会话与三种操作方式,适合要把 Codex 回合纳入 DSH 工作流的开发者。

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

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

Xiaoye