Gordonynh/dsh-plugin-codex-import
DeepSeek Harness plugin: import OpenAI Codex conversation history into DSH sessions via /codex-import
이것은 DeepSeek Harness(DSH) 플러그인입니다. 이 사이트는 GitHub README, 설치 정보, 유지보수 상태, 공개 보안 시그널을 모아 보여줍니다.
dsh-plugin-codex-import
English | 中文
一个 DeepSeek Harness 插件, 用一条斜杠命令把 OpenAI Codex 的历史对话导入 DSH 会话——按项目工作区分组, 可继续对话、可搜索、可分叉。
/codex-import
Imported 679 session(s) from /Users/you/.codex.
Scanned 681, already present 0, failed 0.
Content: 10694 turns, 81513 steps, 13580 user messages, 81513 assistant messages, 101215 tool calls.
Grouped 529 session(s) into 116 workspace(s).
Reload the interface to see the imported sessions.
安装
dsh plugin --profile web add github:Gordonynh/dsh-plugin-codex-import
然后在 ~/.dsh/profiles/web/cordis.patch.yml 中启用:
- insert:
- id: codex-import
name: 'dsh-plugin-codex-import'
重启 harness。可用 dsh --profile web --dump-config | grep codex-import
确认插件已进入插件树。
用法
| 命令 | 效果 |
|---|---|
/codex-import | 导入所有尚未导入的 Codex 会话 |
/codex-import --dry-run | 只报告将导入什么,不写入 |
/codex-import --limit 20 | 导入 20 个后停止 |
/codex-import --since 30 | 只导入最近 30 天的会话 |
/codex-import --project ~/work | 只导入 cwd 在该路径下的会话 |
/codex-import --archived | 同时扫描 ~/.codex/archived_sessions |
重复运行是安全的:已导入的会话 id 会被跳过,Codex 原始文件永不改动。
配置
- insert:
- id: codex-import
name: 'dsh-plugin-codex-import'
config:
codexHome: '~/.codex' # 默认:$CODEX_HOME,否则 ~/.codex
provider: 'codex' # 记录在导入的助手消息上
groupIntoWorkspaces: true # 把导入的会话挂到工作区
映射方式
Codex(rollout-*.jsonl) | DeepSeek Harness 会话事件 |
|---|---|
session_meta | 会话头(id、createdAt、cwd) |
用户 message(真人输入) | user/message,source:{kind:"user"} |
注入上下文 / developer 角色 | user/message,source:{kind:"plugin",plugin:"codex-import"} |
reasoning | assistant/message 的 reasoning 块 |
助手 message / agent_message | assistant/message 的 text 块 |
function_call / custom_tool_call | tool-call 块 + tool/call 事件 |
各类 *_output | tool/result(在步内按 call id 配对) |
web_search_call / tool_search_call / image_generation_call | 成对的 tool/call + tool/result |
turn_context.model | AssistantMessage.source.model |
| 首条真人提问 | session/title 事件(无须额外调用模型起标题) |
event_msg 遥测、ghost_snapshot、token 计数 | 丢弃(UI 重复信息) |
Codex 记录的是扁平事件流,Harness 需要的是
turn/start → (user/message | step/start … step/end)* → turn/end 的括号结构。
插件优先按 Codex 的 turn_id 重建该结构,缺失时以真人消息为轮次边界。
存储完全交给 Harness 自己。 会话通过
ctx.sessionPersistence.create() / .append() 写入,工作区通过
ctx.workspaceRegistry.create() / workspace.attachSession() 分配。插件不碰
会话目录、不碰 zstd 容器、不碰工作区注册表文件——物理编码、路径布局、持久化
与工作区记账都留在它们该在的地方,因此 Harness 的格式变更不会让插件悄悄失配。
转换途中的自动修复:悬空的工具调用补上合成错误结果(TOOL_NOT_STARTED),
确保没有助手消息带着无人应答的调用;无主的工具输出被丢弃;非 JSON 的自定义
工具输入包装为 {"input": …},使 tool/call.arguments 始终可解析;图片以
文字占位符代替(Harness 的图片块需要附件服务引用,插件无法伪造);被 Codex
压缩过的会话导入压缩前的完整历史。
项目目录已不存在的会话仍会被导入,但保持未分组——工作区必须指向真实存在的 目录,这是 Harness 自身的规则。
验证
node test/verify.mjs # 语法、参数解析、映射边界,
# 并把本机全部真实 rollout 过一遍 harness 的重建路径
node test/integration.mjs # 在临时目录里启动真实的 dsh-session、持久化与
# 工作区插件,通过它们完成一次真实导入
verify.mjs 调用 Harness 自己的 foldSurface / deriveEventMessage——即恢复
会话时实际走的重建路径。integration.mjs 证明 Harness 真实的持久化服务接受
本插件产出的会话头与事件批次,且工作区注册表接受由此产生的会话。
作者机器实测:679 个真实会话、19.6 万+ 条重建消息,零失败。
注意事项
- DSH 处于 developer preview,会话格式钉在版本 0 且无兼容性承诺。若将来 Harness 拒读 v0 日志,重新导入即可——Codex 原件不受影响。
- 继续一个导入的会话时,历史会发给 DSH 当前配置的模型;原提供商专有的重放 状态不会带过去。
- 需要 Node ≥ 22(与 Harness 自身要求一致)。
许可协议
以自定义协议开放源代码(source-available)——不是 OSI 认证的开源协议。 摘要如下(以协议文本为准):
| 对象 | 权利 |
|---|---|
| 所有人 | 自由的非商业使用、修改、再分发(沿用本协议、保留声明) |
| 个人(全球) | 额外允许:商业使用 |
| DeepSeek 及其合作企业 | 额外允许:商业使用、闭源专有衍生、再许可——见补充协议 |
| 其他企业/组织 | 仅限非商业;商业使用需另行获得作者书面许可 |
보안 및 설치 증거
이 점수는 공개 저장소 메타데이터와 이 사이트에 등록된 설치 증거에만 기반하며, 코드 보안 감사와 다릅니다.
공개 플러그인 카탈로그에서 왔으며, 공개 GitHub 저장소로 연결됩니다.
GitHub 메타데이터에서 라이선스가 감지되지 않았습니다.
최근 180일 내 코드 업데이트가 있습니다.
재현 가능한 정확한 설치 메타데이터가 아직 등록되지 않았습니다. 저장소 설명에 따라 직접 확인하세요.
검사한 패키지 메타데이터에 설치 라이프사이클 스크립트가 선언되지 않았습니다.
missing-license