dsh-codex-session:在 DSH 桌面端新建会话时选用 Codex 或默认会话

前言

在 DSH 桌面端做智能体开发时,模型提供方、工具循环、审批和会话界面通常都由 DSH 统一承担。若希望推理走本机已登录的 Codex App Server,又不愿换一套客户端或丢掉 DSH 的工具与审批链路,常见做法是单独接一层 LLM 提供方插件。社区里曾有 dsh-llm-codex-app-server 等实现,但在 DSH 0.2.0-rc.2 的桌面 profile 上,依赖 @deepseek-ai/* 的 Host 半插件往往无法解析这些包,加载会失败。

下面介绍维护者 alfredhuang211 发布的客户端类插件 dsh-codex-session:新建会话时可在「DSH 默认」与「Codex」之间选择;Codex 会话仍使用 DSH 的会话日志、工具循环、审批和完整桌面 UI,只有模型请求由本机 Codex App Server 提供。

这是什么

dsh-codex-session 是面向 DSH 桌面版(desktop profile)的插件。Codex 侧请求调用工具时,插件将其转成 DSH 的 tool-call,由 DSH 执行、审批并写入日志,再把结果交回同一 Codex turn。界面不新开窗口、不修改 DSH 包、不遮蔽内置插槽。

插件仅使用 Node 内置模块,安装时无需再拉取 npm 依赖;实现上通过 Cordis 注入的服务访问 DSH,不 import DSH 包。

核心功能

会话类型与 Agent 预设

安装并重启 DSH 桌面 App 后,新建会话时输入框上方会出现「会话类型」选择器;Agent 预设里会多出 Codex。选择 Codex 后,该会话的模型路由钉在 codex-local 提供方上,由插件 spawn 本机 codex app-server,以 newline-delimited JSON-RPC 与 Codex 通信。

DSH 工具桥接

Codex 看到的是 DSH 侧的工具命名空间(如 deepseek_harness)。原生 Codex 能力中一批会绕过 DSH 直接动本机的项,插件默认通过 disabledFeatures 关闭(含 shell_tool、unified_exec 等),避免命令执行不出现在会话记录、不受沙箱与审批约束。需要恢复 Codex 原样时,可在配置里将 disabledFeatures 设为 [](需自行承担风险)。

模型发现

模型列表默认不向仓库写死,而是向本机 Codex 查询 model/list,结果缓存 5 分钟(modelCacheTtlMs 默认 300000)。也可在 cordis.patch.yml 中固定 model 或完整 models 列表。

界面扩展(Client 半)

  • conversation.input.dock:空白会话上的会话类型选择器;已开始的 Codex 会话显示后端标识。
  • settings.plugins.tab:设置页「Codex 会话」相关入口。

安装与启用

前提:

  1. 已安装 DSH 桌面版,版本 ≥ 0.2.0-rc.2(engines.dsh 要求)。
  2. codex CLI 在 PATH 上或 ~/.codex 已完成登录;部分文档还要求 codex login status 通过,且 ~/.codex/config.toml 中 [model_providers.custom](或你使用的段)指向可用后端。
  3. Node 版本满足 ^22.19.0 || >=24.0.0。

推荐锁定插件版本安装:

dsh plugin --profile desktop add git+https://github.com/alfredhuang211/dsh-codex-session.git#v0.1.0

跟随 main 最新提交:

dsh plugin --profile desktop add git+https://github.com/alfredhuang211/dsh-codex-session.git

若已发布到 npm,也可:

dsh plugin --profile desktop add dsh-codex-session

装完后重启 DSH 桌面 App(Host 半的 bundle patch 在启动时读取)。

可选自检,列出本机 Codex 实际提供的模型:

cd ~/.dsh/profiles/desktop/node_modules/dsh-codex-session && npm run models-check

卸载:

dsh plugin --profile desktop remove dsh-codex-session

典型用法

  1. 按上一节安装并重启 App。
  2. 新建会话,在输入框上方选择会话类型(DSH 默认或 Codex),或在 Agent 预设中选择 Codex。
  3. 使用 DSH 原生模型选择器切换发现到的模型(列表来自本机 Codex,除非你在配置里写死了 models)。
  4. 正常对话;工具调用走 DSH 审批与日志,模型流由本机 Codex App Server 返回。

切换已有会话到 Codex 时走 agentPresets.select;若会话尚未就绪,界面会显示宿主返回的原因。「会话类型」选择器仅在空白会话上出现。

配置要点

在 cordis.patch.yml 的 codex-session 段可调整行为,常见项包括:

键 默认值 说明
preset codex 触发钉模型的 Agent 预设 id
provider codex-local 对外暴露的提供方路由
model 未设置 留空用本机 Codex 默认模型
modelProvider custom 传给 thread/start 的 Codex 内部提供方 id,需与 ~/.codex/config.toml 的 [model_providers.*] 对应;官方登录时可改为 openai
command codex Codex CLI 命令
timeoutMs 300000 单 turn 与流式 JSON-RPC 请求上限
disabledFeatures 见 README 列表 设为 [] 即恢复 Codex 原生能力

升级 Codex 或更换代理后,一般重启 App 即可让模型列表跟随变化;也可缩短 modelCacheTtlMs。

适用场景与注意

适合:已在本机登录 Codex,希望在 DSH 桌面里用同一套 UI、工具循环和审批跑 Codex 模型,并与「DSH 默认」会话并存。

限制与注意(来自仓库说明):

  • 图片输入暂不支持,含图片的块会被替换为占位文本。
  • Codex 预设的子插件列表复制自内置 standard,DSH 大版本升级后可能需要重新同步。
  • Codex 侧沙箱为 read-only、审批 never;改工作区须经由 DSH 工具。
  • 会话级线程缓存在内存中,进程重启或空闲回收会冷启动新线程并重建历史。

安全:插件以当前 DSH 桌面进程权限运行,会启动本机 codex 子进程并与本机 Codex 配置交互。安装前请阅读仓库源码与 MIT 许可证,确认 disabledFeatures 与 modelProvider 符合你的环境策略。社区目录 SkillHub 与 DeepSeek / 幻方无官方从属关系,属社区「一切皆插件」生态中的独立条目。

结尾

dsh-codex-session 把「新建会话选 DSH 默认还是 Codex」做成桌面端一等公民:模型走本机 Codex App Server,执行与可见性仍归 DSH。需要细节、验证命令与发布说明时,以 GitHub README 为准。

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

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

Xiaoye