OpenAI Codex 与 DSH 之间的终极双向桥:聊天双向同步、技能实时挂载、MCP 自动镜像。
44.4/100
综合分
26
GitHub 星标
376
npm 周下载
—/5
用户评分
数据截至 2026/10/6 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-codex-syncnpm 源 · dsh-codex-sync 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 28 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-codex-sync @ 1.6.2
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 04:32:27
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
可执行外部命令读写/删除本地文件发起外部网络请求
查看扫描证据(共 69 处,展示前 62 条)
- 读取本地文件lib/index.js:138
entries = readdirSync(join(home, 'skills')) - 读取本地文件lib/index.js:147
if (readdirSync(join(home, 'skills', e)).includes('SKILL.md')) return true - 读取本地文件lib/index.js:159
return [...parseCodexMcpServers(readFileSync(join(home, 'config.toml'), 'utf8')).keys()] - 读取本地文件lib/index.js:626
instructions: { path: existsSync(join(codexHome, 'instructions.md')) ? join(codexHome, 'instructions.md') : join(codexHome, 'AGENTS.md'), file: true } - 读取本地文件lib/index.js:642
if (!existsSync(target.path)) { - 读取本地文件bin/dsh-codex-sync.js:32
return JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf8')).version ?? '0.0.0' - 读取本地文件bin/dsh-codex-sync.js:106
content = readFileSync(CODEX_CONFIG, 'utf8') - 写入本地文件bin/dsh-codex-sync.js:117
writeFileSync(CODEX_CONFIG, content) - 读取本地文件bin/dsh-codex-sync.js:123
if (existsSync(cliPath)) { - 执行外部命令固定命令bin/dsh-codex-sync.js:128
execFileSync('git', ['clone', '--depth', '1', REVERSE_REPO, dir], { stdio: 'inherit' }) - 执行外部命令固定命令bin/dsh-codex-sync.js:134
execFileSync('pnpm', ['install'], { cwd: dir, stdio: 'inherit' }) - 执行外部命令固定命令bin/dsh-codex-sync.js:136
execFileSync('pnpm', ['build'], { cwd: dir, stdio: 'inherit' }) - 读取本地文件bin/dsh-codex-sync.js:137
if (!existsSync(cliPath)) { - 读取本地文件bin/dsh-codex-sync.js:157
content = readFileSync(CODEX_CONFIG, 'utf8') - 写入本地文件bin/dsh-codex-sync.js:167
writeFileSync(CODEX_CONFIG, content.slice(0, start) + content.slice(end + MARKER_END.length)) - 读取本地文件bin/dsh-codex-sync.js:172
if (existsSync(dir)) { - 删除本地文件递归bin/dsh-codex-sync.js:173
rmSync(dir, { recursive: true, force: true }) - 请求外部主机mcp.cloudflare.combin/dsh-codex-sync.js:182
const res = await fetch('https://mcp.cloudflare.com/mcp', { - 发起网络请求bin/dsh-codex-sync.js:182
const res = await fetch('https://mcp.cloudflare.com/mcp', { - 读取本地文件lib/bridge.js:49
const content = readFileSync(join(codexHome, file), 'utf8') - 读取本地文件lib/bridge.js:62
content = readFileSync(join(codexHome, 'config.toml'), 'utf8') - 读取本地文件lib/bridge.js:96
return readdirSync(join(codexHome, 'skills')).filter((e) => !e.startsWith('.')).length - 读取本地文件lib/skill-provider.js:37
entries = readdirSync(join(codexHome, 'skills')) - 读取本地文件lib/skill-provider.js:52
readFileSync(file, 'utf8') - 读取本地文件lib/skill-provider.js:57
readFileSync(file, 'utf8') - 读取本地文件lib/skill-provider.js:76
content = readFileSync(file, 'utf8') - 读取本地文件lib/skill-provider.js:103
content = readFileSync(candidate.locator.file, 'utf8') - 读取本地文件lib/skill-provider.js:127
entries = readdirSync(PLUGIN_SKILLS_DIR) - 读取本地文件lib/import-service.js:223
size = statSync(file).size - 读取本地文件lib/import-service.js:391
size = statSync(file).size - 读取本地文件lib/export-codex.js:264
if (existsSync(db)) { - 执行外部命令固定命令lib/export-codex.js:266
const out = execFileSync('sqlite3', [db, "SELECT DISTINCT cwd FROM threads WHERE cwd IS NOT NULL AND cwd != '';"], { stdio: ['ignore', 'pipe', 'ignore - 读取本地文件lib/export-codex.js:274
if (existsSync(sessionsDir)) { - 读取本地文件lib/export-codex.js:297
if (!existsSync(root)) continue - 读取本地文件lib/export-codex.js:364
if (existsSync(db)) { - 执行外部命令固定命令lib/export-codex.js:387
execFileSync('sqlite3', [db, sql], { stdio: 'pipe' }) - 写入本地文件lib/export-codex.js:394
appendFileSync(join(codexHome, 'session_index.jsonl'), `${JSON.stringify({ - 写入本地文件lib/export-codex.js:624
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件lib/export-codex.js:625
writeFileSync(path, body) - 执行外部命令固定命令lib/session-repair.mjs:70
const raw = execFileSync('zstd', ['-dc', file], { maxBuffer: 1 << 28 }).toString('utf8') - 读取本地文件lib/session-repair.mjs:301
if (!existsSync(root)) return out - 读取本地文件lib/session-repair.mjs:302
for (const ws of readdirSync(root)) { - 读取本地文件lib/session-repair.mjs:304
let st; try { st = statSync(wp) } catch { continue } - 读取本地文件lib/session-repair.mjs:306
for (const d of readdirSync(wp)) { - 读取本地文件lib/session-repair.mjs:308
let dst; try { dst = statSync(dp) } catch { continue } - 读取本地文件lib/session-repair.mjs:314
const versioned = readdirSync(dp).filter((n) => /^session\.v\d+\.jsonl\.zstd$/.test(n)).sort() - 写入本地文件lib/session-repair.mjs:417
copyFileSync(file, `${file}.bak`) - 写入本地文件lib/session-repair.mjs:422
writeFileSync(targetFile, bytes) - 删除本地文件lib/session-repair.mjs:423
if (targetFile !== file) rmSync(file) - 写入本地文件lib/session-repair.mjs:468
copyFileSync(f, `${f}.bak`) - 写入本地文件lib/session-repair.mjs:469
writeFileSync(f, encodeLog(headerLine, repaired)) - 读取本地文件lib/mcp.js:300
text = readFileSync(configPath, 'utf8') - 读取本地文件lib/state.js:24
return JSON.parse(readFileSync(statePath(), 'utf8')) - 写入本地文件lib/state.js:35
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件lib/state.js:36
writeFileSync(path, `${JSON.stringify(next, null, 2)}\n`) - 读取本地文件lib/codex-reader.mjs:45
entries = readdirSync(dir, { withFileTypes: true }) - 读取本地文件lib/codex-reader.mjs:155
for (const rawLine of readFileSync(file, 'utf8').split('\n')) { - 执行外部命令固定命令lib/zstd-frame.mjs:11
return execFileSync('zstd', ['--quiet', '--compress', '--stdout', '--check'], { - 写入本地文件lib/dsh-writer.mjs:93
mkdirSync(dir, { recursive: true }) - 写入本地文件lib/dsh-writer.mjs:94
writeFileSync(path, Buffer.concat([ - 读取本地文件lib/dsh-writer.mjs:106
projectDirs = readdirSync(root, { withFileTypes: true }) - 读取本地文件lib/dsh-writer.mjs:113
if (existsSync(sessionDir)) return sessionDir
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
涉及外部主机:mcp.cloudflare.com
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-session-format-catalog@deepseek-ai/dsh-session-format-v0-to-v1@deepseek-ai/dsh-session-format-v1-to-v2@deepseek-ai/dsh-session-format-v2-to-v3@deepseek-ai/dsh-session-format-v3-to-v4@deepseek-ai/dsh-mcp-client给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
4 张 · 点击查看大图功能亮点
- 聊天双向同步
- 技能实时挂载
- MCP自动镜像
最近更新
在 GitHub 查看全部 →v1.6.12026-08-26
· Highlights
· Settings modal hint: a subtle bottom-left note in the Codex Sync settings modal now points users to /repair-sessions --fix when imported chats fail with token-meter / replay errors (bilingual, styled with existing design tokens).
· Docs: both READMEs gained a new Actions table row and a Troubleshooting section covering symptoms, root cause, and the one-command fix.
· 🇨🇳 中文说明 (Chinese Translation)
· 主要变化
· 设置面板提醒:Codex 同步设置弹窗左下角新增一条弱化的小提醒——导入的对话若出现 token meter / 重放类报错,可用 /repair-sessions --fix 一键修复(双语文案,沿用现有设计令牌)。
· 文档:中英 README 均新增「操作」表格行与排障章节,覆盖症状、根因与一键修复命令。
v1.6.02026-08-26
· 主要变化
· 导入即可安全重放:转换器现在会在每条 assistant 消息和工具事件前后成对写入 step/start…step/end 标记,导入的会话切换模型后不会再因 token meter 冷重放失败(no matching step/start event)。
· 新增:repair-sessions —— 扫描会话存储中的重放损伤(缺 step 配对、失效的 chunk 引用、改写头加旧游标尾造成的 seq 缺口),原地修复日志,写入前先用 DSH 真实的 token meter 校验。可用命令行(dsh-codex-sync repair-sessions [--fix])和斜杠命令(/repair-sessions [--fix])。每个修复过的日志旁都保留 .bak 备份。
· npm test 现在自动定位 dsh 检出目录,以解析 @deepseek-ai/*(共 40 个测试)。
· 🇨🇳 中文说明(中文翻译)
· 主要变化
· 导入即合规:转换器现在为每条 assistant 消息和工具事件补齐配对的 step/start…step/end 标记,导入的会话切换模型后不会再触发 token meter 冷重放报错(no matching step/start event)。
· 新功能:repair-sessions —— 扫描会话存储中的三类重放损伤(缺 step 配对、失效的 chunk 引用、改写头加旧游标尾造成的 seq 缺口)并原地修复;写入前用 DSH 真实的 token meter 校验,每个修复过的日志旁保留 .bak 备份。命令行(dsh-codex-sync repair-sessions [--fix])和斜杠命令(/repair-sessions [--fix])均可使用。
· npm test 现在自动探测 dsh 安装目录,以解析 @deepseek-ai/*(共 40 个测试)。
v1.3.62026-08-26
· 🐛 v1.3.6 修复的问题
· 会话恢复与模型切换兼容性:修复从 Codex 导入的会话缺少 agentPreset 头字段的问题。此前 DSH 恢复会话时会自动挂上默认智能体配置档(opencodex),导致核心工具(如 tool-cordis)重复注册,抛出 duplicate action 运行时错误。
· 自动给导入的会话头打上 agentPreset 标识,恢复会话、切换模型都不再报错。
---
· 🇨🇳 中文说明
· 会话恢复模型兼容修复:修复从 Codex 导入的会话在 DSH 中恢复时,因会话头缺少 agentPreset 字段,DSH 自动补挂默认配置档,导致 tool-cordis 等工具重复注册、抛出 duplicate action 异常的问题。
· 自动给新导入的会话打上 agentPreset 标识,会话恢复、模型切换流畅无报错。
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成⚡ dsh-codex-sync
Codex 与 DSH 双向桥接:挂载 ~/.codex/skills、带工作区绑定的会话导入、mcp_servers 实时镜像,以及 Codex 端反向 MCP 安装器。 项目会话双向流转 · 技能实时挂载 · MCP 自动镜像 · 原生现代化交互
English •
Awesome DSH Plugin
🎛️ 侧边栏原生同步设置
📍 顶部工作区快捷入口
📥 从 Codex 导入项目对话
📤 导出 DSH 对话到 Codex
🤔 为什么要用这个插件?
在使用 OpenAI Codex 时,你可能已经积累了:
1. 大量项目的对话历史(包含完整的代码上下文、架构讨论与调试记录);
2. 丰富的自定义 Skills 库(~/.codex/skills 下各种专有工具与指令);
3. 精心配置的 MCP 服务工具链(数据库、搜索、浏览器自动化等)。
展开完整文档(README 剩余 1 节)
⚡ dsh-codex-sync Codex 与 DSH 双向桥接:挂载 ~/.codex/skills、带工作区绑定的会话导入、mcp_servers 实时镜像,以及 Codex 端反向 MCP 安装器。 项目会话双向流转 · 技能实时挂载 · MCP 自动镜像 · 原生现代化交互 English • Awesome DSH Plugin 🎛️ 侧边栏原生同步设置 📍 顶部工作区快捷入口 📥 从 Codex 导入项目对话 📤 导出 DSH 对话到 Codex 🤔 为什么要用这个插件? 在使用 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 插件市场一键安装(推荐): dsh plugin --profile web add dsh-codex-sync 或在 profile 的 cordis.patch.yml 中配置: - insert: - id: codex-sync name: dsh-codex-sync config: maxSkills: 30 mcpMirrorDeny: - node_repl mcpMirrorSilent: - exa 2. 配置 Codex 反向 MCP 桥(可选) 自动在 ~/.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 © 2026 Walvez
预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Walvez/dsh-codex-sync
OpenAI Codex 与 DSH 之间的终极双向桥:聊天双向同步、技能实时挂载、MCP 自动镜像。
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,487已汉化DSH
73
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,894已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,379已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
DS Bot 是一个基于 DeepSeek Harness简称 dsh的 bot 插件,插件将 dsh 改造为 bot…
★ 5,084已汉化DSH
71.1
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,778已汉化DSH
71.1