Skip to content
dsh.fish
Bundle

dsh-codex-sync

Two-way Codex↔DSH bridge: skills from ~/.codex/skills, session import with workspace attach, live MCP mirroring of mcp_servers, and a Codex-side reverse MCP installer.

Source
Walvez
License
MIT
Updated
Updated 7 days ago

Readme

<div align="center">

# ⚡ dsh-codex-sync

**Codex 与 DSH 双向桥接:挂载 `~/.codex/skills`、带工作区绑定的会话导入、`mcp_servers` 实时镜像,以及 Codex 端反向 MCP 安装器。**<br/>
*项目会话双向流转 · 技能实时挂载 · MCP 自动镜像 · 原生现代化交互*

<p align="center">
  <a href="README.md"><b>English</b></a> •
  <a href="README.zh-CN.md"><b>简体中文</b></a>
</p>

[![npm version](https://img.shields.io/npm/v/dsh-codex-sync?color=cb3837&style=flat-square&logo=npm)](https://www.npmjs.com/package/dsh-codex-sync)
[![npm downloads](https://img.shields.io/npm/dt/dsh-codex-sync?color=2088FF&style=flat-square&logo=npm)](https://www.npmjs.com/package/dsh-codex-sync)
[![CI](https://github.com/Walvez/dsh-codex-sync/actions/workflows/ci.yml/badge.svg?style=flat-square)](https://github.com/Walvez/dsh-codex-sync/actions)
[![Node](https://img.shields.io/badge/Node.js-%3E%3D20.0-339933?style=flat-square&logo=node.js&logoColor=white)](package.json)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](LICENSE)
[![Awesome DSH Plugin](https://awesome-dsh-plugin.com/badge.svg)](https://awesome-dsh-plugin.com/p/Walvez/dsh-codex-sync/)

<br/>

<table>
  <tr>
    <td align="center" width="50%">
      <b>🎛️ 侧边栏原生同步设置</b><br/>
      <img src="docs/sync-settings-modal.png" alt="Codex 同步设置模态卡片:快捷操作、开关、语言" width="100%"/>
    </td>
    <td align="center" width="50%">
      <b>📍 顶部工作区快捷入口</b><br/>
      <img src="docs/sidebar-entry.png" alt="工作区头部 Codex 快捷入口" width="100%"/>
    </td>
  </tr>
  <tr>
    <td align="center" width="50%">
      <b>📥 从 Codex 导入项目对话</b><br/>
      <img src="docs/import-picker.png" alt="从 Codex 导入对话:多项目折叠、状态标签" width="100%"/>
    </td>
    <td align="center" width="50%">
      <b>📤 导出 DSH 对话到 Codex</b><br/>
      <img src="docs/export-picker.png" alt="导出到 Codex 对话框:智能归属、来源切换" width="100%"/>
    </td>
  </tr>
</table>

</div>

---

## 🤔 为什么要用这个插件?

在使用 OpenAI Codex 时,你可能已经积累了:
1. **大量项目的对话历史**(包含完整的代码上下文、架构讨论与调试记录);
2. **丰富的自定义 Skills 库**(`~/.codex/skills` 下各种专有工具与指令);
3. **精心配置的 MCP 服务工具链**(数据库、搜索、浏览器自动化等)。

当你想在 **DeepSeek Harness (DSH)** 中体验强大的开源模型生态或开展双 Agent 协作时,通常会遇到:
- **历史无法迁移**:两边会话格式互不相通,想在 DSH 中接续之前的 Codex 对话极其繁琐;
- **配置割裂与漂移**:Skills 和 MCP 必须在两边重复配置维护,改了一边另一边就失效;
- **单向死胡同**:市面上的迁移脚本往往只是一次性的、粗暴的单向文件拷贝,在 DSH 续聊后无法安全带回 Codex。

**`dsh-codex-sync` 正是为解决这些痛点而生!** 它不是一次性迁移脚本,而是让 Codex 与 DSH **持续互联互通、双向无缝流转** 的现代化扩展。

---

## ✨ 核心方便之处

### 1. 💬 项目会话双向安全互导(Codex ⇄ DSH)
- **从 Codex 导入**:
  - 按项目(Workspace)树状聚合所有历史对话;
  - 完整保留用户消息、助手回复、思维链推理(Reasoning)与工具调用轨迹;
  - 导入后自动关联对应工作区,在 DSH 中**直接断点续聊**;
  - 支持增量更新:Codex 续聊过的旧对话会标记「有更新」,再次勾选仅增量追加新 Turn,不重复创建会话。
- **导出到 Codex**:
  - 在 DSH 续聊的内容或新建的原生会话,可一键导出回 Codex;
  - 自动校验 Codex 已有项目库,智能锁定未知目录,杜绝孤儿会话;
  - 导出生成独立的全新 Codex 会话副本(`history_mode: legacy`),**绝不破坏或覆盖原 Codex 历史**;
  - 导出完成后重启 Codex 即可在对应项目下查看并继续工作。
- **子代理智能收纳**:
  - 默认过滤子代理线程,保持列表干净清爽;
  - 点击「过滤子代理」可随时展开并嵌套在主会话下方,按需单独导出,不污染父会话。

### 2. ⚡ Skills 实时一等公民挂载
- 直接将 `~/.codex/skills/*/SKILL.md` 注册为 DSH 原生一等公民技能;
- 支持完整的子目录资源引用与多文件架构;
- **改完即用**:在本地修改 `SKILL.md`,DSH 下次调用即时生效,无需重启 DSH 服务。

### 3. 🔌 MCP 自动双向镜像
- **Codex → DSH**:后台自动监听 `~/.codex/config.toml`,将 `[mcp_servers.*]` 动态镜像到 DSH,支持热重载,并内置常用服务的静音与冲突排除策略;
- **DSH → Codex(反向桥)**:一行命令配置 `[mcp_servers.dsh-plugins]`,让 Codex Agent 也具备搜索、检查与安装 DSH 插件的能力。

### 4. 🎨 极度优雅的原生现代化 UI
- **专属入口**:自适应融入工作区标题栏(展开时位于工作区标题旁,收起窄栏时整齐排列在搜索图标下方);
- **居中模态卡片**:点击呼出高对比度毛玻璃控制面板,快捷操作、状态卡片、功能开关一目了然;
- **原生设计语言**:采用 iOS 风格平滑切换滑块与纯 CSS 过渡,自适应 DSH 深浅色主题,零样式残留与无横向溢出。

---

## 📦 快速开始

### 1. 安装到 DSH

通过 DSH 插件市场一键安装(推荐):
```bash
dsh plugin --profile web add dsh-codex-sync
```

或在 profile 的 `cordis.patch.yml` 中配置:
```yaml
- insert:
    - id: codex-sync
      name: dsh-codex-sync
      config:
        maxSkills: 30
        mcpMirrorDeny:
          - node_repl
        mcpMirrorSilent:
          - exa
```

### 2. 配置 Codex 反向 MCP 桥(可选)

```bash
# 自动在 ~/.codex/config.toml 挂载 [mcp_servers.dsh-plugins]
npx dsh-codex-sync codex-install

# 检查双向同步健康状态
dsh-codex-sync doctor
```

---

## 🎛️ 同步控制面板与开关

点击侧边栏工作区的 **Codex 图标** 即可打开居中设置面板:

| 分组 | 项目 | 对应命令 / 配置键 | 行为说明 |
|---|---|---|---|
| **操作** | 从 Codex 导入 | `/import-all` | 打开项目选择对话框,按项目勾选导入历史对话 |
| | 导出到 Codex | `/export-codex` | 将 DSH 会话写出为全新 Codex 对话副本 |
| | 会话修复¹ | `/repair-sessions [--fix]` | 扫描会话存储中的重放损伤并原地修复(见下方排障章节) |
| | 查看镜像状态 | `/mcp-status` | 弹窗查看每个 MCP 服务器的挂载状态与诊断信息 |
| | 刷新状态 | `/codex-settings` | 实时重新拉取宿主机所有开关的真实值 |
| **功能开关** | 导入命令 | `enableImport` | 启用 `/import-codex` 等 slash 命令族 |
| | 自动导入 | `autoImport` | 启动首个会话时自动增量导入 Codex 历史 |
| | 指令注入 | `enableInstructions` | 注入 `instructions.md` / `AGENTS.md` 进系统提示词 |
| | 配置摘要 | `enableConfig` | 注入 `config.toml` 模型配置摘要进系统提示词 |
| | 技能注册 | `enableSkills` | 将 `~/.codex/skills` 挂载为 DSH 原生技能 |
| | MCP 镜像 | `mcpMirror` | 自动监听并镜像 `[mcp_servers.*]`(开关立即生效) |
| **语言** | 语言切换 | `Language` | 切换界面简体中文 / English(本地记住) |

> ¹ 设置面板左下角有一个小提醒,把「导入对话报错」与该命令关联起来。

---

## 🩺 排障:导入对话的 token meter / 重放报错

**现象** —— 切换模型或压缩某个(导入的)对话时失败:

```
command.execute failed: internal: token meter: assistant/message at seq N has no matching step/start event
corrupt session log: seq gap in committed region at line L
```

**原因** —— 换模型时 DSH 的 token meter 会对整个事件日志做冷重放校验(旧模型的 usage 锚点失效)。v1.6.0 之前写入的日志缺少配对的 `step/start…step/end` 标记,混合日志还可能带有失效的 seq 引用——这些损伤只在冷重放时才会暴露。

**修复** —— 在任意 DSH 对话中执行(或终端运行 `dsh-codex-sync repair-sessions --fix`):

```
/repair-sessions --fix
```

修复过程会合并接缝、补齐缺失的 step 标记、重映射引用、重编号 seq,并在写入前用真实的 `@deepseek-ai/dsh-token-meter` 校验,每个修复过的日志旁保留 `.bak` 备份。**v1.6.0+** 的导入天然合规,理论上不会再触发此问题。

---

## 🤖 智能体辅助技能 (`codex-sync`)

本插件随包提供了一个内建的 `codex-sync` Skill。你可以直接在对话中让 AI Agent 操作同步:

- *“帮我预演一下导入 Codex 会话”* → 自动执行 `/import-codex --dry-run`;
- *“查看当前的 MCP 镜像状态”* → 自动执行 `/mcp-status`;
- *“开启自动导入功能”* → 自动执行 `/auto-import on`。

---

## 📄 开源许可

[MIT License](LICENSE) © 2026 Walvez

Install

dsh plugin --profile web add dsh-codex-sync@1.6.1

Profile: web

Source