dsh-import-agents 把 pi、opencode、codex、claude-code 的会话、聊天记录与…
41.5/100
综合分
18
GitHub 星标
148
npm 周下载
—/5
用户评分
数据截至 2026/10/9 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dsh-import-agentsnpm 源 · dsh-import-agents 的发布者账号已校验与本仓库一致
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:已验证
是什么
dsh 原生插件 · chat
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 25 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查✓ 自动检查通过展开查看检查明细 ↓
以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。
✓npm 包dsh-import-agents @ 0.3.1
✓Node 引擎未声明 engines.node
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明
验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/10/30 15:49:15
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件
查看扫描证据(共 27 处,展示前 24 条)
- 读取本地文件plugin/migrate-on-start.mjs:41
const parsed = JSON.parse(readFileSync(path, 'utf8')) - 写入本地文件plugin/migrate-on-start.mjs:58
mkdirSync(dirname(path), { recursive: true }) - 写入本地文件plugin/migrate-on-start.mjs:59
writeFileSync(tmp, JSON.stringify(state, null, 2)) - 写入本地文件plugin/migrate-on-start.mjs:60
renameSync(tmp, path) - 读取本地文件lib/pi-reader.mjs:25
projects = readdirSync(root, { withFileTypes: true }) - 读取本地文件lib/pi-reader.mjs:32
for (const entry of readdirSync(projectDir, { withFileTypes: true })) { - 读取本地文件lib/codex-reader.mjs:31
entries = readdirSync(dir, { withFileTypes: true }) - 读取本地文件lib/claude-reader.mjs:39
projects = readdirSync(root, { withFileTypes: true }) - 读取本地文件lib/claude-reader.mjs:46
for (const entry of readdirSync(projectDir, { withFileTypes: true })) { - 读取本地文件lib/agents.mjs:22
return readdirSync(dir, { withFileTypes: true }) - 读取本地文件lib/agents.mjs:55
const parsed = parseFrontmatter(readFileSync(file, 'utf8')) - 读取本地文件lib/agents.mjs:68
body: parsed === null ? readFileSync(file, 'utf8') : parsed.body, - 读取本地文件lib/agents.mjs:121
const existing = existsSync(dir) - 读取本地文件lib/agents.mjs:122
? readdirSync(dir).find(entry => entry === 'SKILL.md') - 读取本地文件lib/agents.mjs:125
const current = readFileSync(join(dir, 'SKILL.md'), 'utf8') - 写入本地文件lib/agents.mjs:154
mkdirSync(plan.target.slice(0, plan.target.lastIndexOf('/')), { recursive: true }) - 写入本地文件lib/agents.mjs:156
writeFileSync(plan.target, `${skillFrontmatter(named)}${named.body}`) - 写入本地文件lib/dsh-writer.mjs:88
mkdirSync(dir, { recursive: true }) - 写入本地文件lib/dsh-writer.mjs:89
writeFileSync(path, Buffer.concat([ - 读取本地文件lib/dsh-writer.mjs:101
projectDirs = readdirSync(root, { withFileTypes: true }) - 读取本地文件lib/dsh-writer.mjs:108
if (existsSync(sessionDir)) return sessionDir - 删除本地文件递归plugin/plugin-test.mts:30
rmSync('/tmp/dsh-plugin-test', { recursive: true, force: true }) - 读取本地文件plugin/plugin-test.mts:113
const state = existsSync(statePath) ? JSON.parse(readFileSync(statePath, 'utf8')) : {} - 读取本地文件plugin/plugin-test.mts:113
const state = existsSync(statePath) ? JSON.parse(readFileSync(statePath, 'utf8')) : {}
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 全包扫描 · 来源 npm 发布包
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-commands@deepseek-ai/dsh-session@deepseek-ai/dsh-session-persistence@deepseek-ai/dsh-user-questions给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
界面预览
5 张 · 点击查看大图功能亮点
- 导入多平台会话记录
- 导入聊天记录
- 导入智能体
把 pi / opencode / codex / claude-code 的会话、聊天记录和智能体导入 DeepSeek Harness——一键 Sync 按钮、斜杠命令、会话启动迁移提示词
最近更新
在 GitHub 查看全部 →v0.3.12026-10-09
· [0.3.1] - 2026-10-08
· 修复
· dsh-import-agents 现在通过当前 harness 持久化 API 写入导入的会话,并生成符合 format-v4 规范的事件日志。GUI 内的导入(/import-*、Sync 按钮)曾报 gateway/internal: encodeCurrent requires Session format v4 失败;修好后又无法追加;再修好后日志在读取时又通不过 v4 校验。共修复八处不匹配:
1. 头部版本——sessionPersistence.create 必须收到当前的 SESSION_FORMAT_VERSION(4)以及显式的 isSeeded: false;插件此前硬编码 version: 0,v4 头部编码器会拒绝。版本改为模块内常量(手动与 harness 的 SESSION_FORMAT_VERSION 同步),不再直接 import @deepseek-ai/dsh-session:直接 import 会解析到本仓库嵌套的预发布副本(0.1.0-rc.6,其 SESSION_FORMAT_VERSION 为 0),而不是运行中应用自带的当前版本,那样会继续产出 version: 0 的头部并报同样的错。
2. 基于句柄的写入——持久化服务不再暴露 append(id, events);create 返回 SessionHandle。插件改用 handle.append(events) 写事件,用 handle.flush() 落盘,用 handle.close() 释放所有权。
3. list() 快照——list() 返回 { header, revision, … },会话 id 位于 snapshot.header.id(此前是 meta.id / meta.cwd)。已在 import-service.mjs、migrate-on-start.mjs 和 attach-workspaces.mjs 中修正。
4. 重复检测——后端现在报 session "…" already exists,跳过检查改为匹配 already exists,不再匹配已废弃的提示。
5. 工具结果——format v4 要求 tool/result 消息必须是一等的 tool 角色消息:role: 'tool'、与 source.callId 匹配的 toolCallId、原始结果内容(已废弃的 tool-result 包装会被拒绝)以及 isError。转换器此前写的是 role: 'user' 消息包裹 tool-result 块,会报 format v4 tool/result at seq N requires a tool-role message。
6. 轮次/步骤生命周期——format v4 要求每个 assistant 步骤在其轮次内都有 step/start … step/end 包裹,且轮次只有在没有未闭合步骤时才能关闭。转换器此前只发 turn/start + assistant/message + turn/end,会报 assistant/message does not match an open turn and step。buildDshEvents 现在用辅助函数包裹每个 assistant 步骤并关闭轮次。
7. 有界源读取——所有会话读取器以及只读头部的读取都用 readFileSync(file, 'utf8'),无法加载超过 V8 最大字符串长度(2^29 − 24 ≈ 512 MB 字符)的转录文件,会抛 Cannot create a string longer than 0x1fffffe8 characters。655 MB 的 codex rollout 文件就会触发。新增的 lib/lines.mjs 用 UTF-8 StringDecoder 分块解码单个文件,逐行产出;pi-reader、codex-reader、claude-reader、plugin/import-service.mjs、plugin/migrate-on-start.mjs 和 CLI 的 import.mjs 现在都用 fileLines() / readFirstLine()。
8. 批量追加——后端会把整批 append 序列化成一个字符串(eventLines = events.map(eventLine).join('\n')),一次追加超大导入会超出同一上限。插件现在通过 appendInBatches 按约 32 MB 的连续批次写入事件。
已针对运行中 harness 的持久化
v0.2.62026-08-17
· 0.2.6 — 安装简化为官方一条命令流程
文档
· README(中英文)现在只保留官方一条命令安装(已验证可安装并自动激活 dsh.bundle 层);手动 pnpm add + cordis.patch.yml 的替代方案已移除。
dsh plugin --profile web add dsh-import-agents
📖 README · 📦 npm
v0.2.52026-08-17
· 0.2.5 — 命令行全部统一到 /import-all
变更
· node import.mjs all 现在导入全部四个来源(pi / opencode / codex / claude-code)外加智能体,与界面里的 /import-all 完全一致。两个「all」入口现在语义相同(之前命令行只覆盖 pi + opencode + 智能体)。
· README(英文 / 中文)已同步更新。
📖 README · 📦 npm
数据来自仓库的 GitHub Release,可能与插件实际版本不一致。
README
由 DeepSeek 最新模型翻译生成dsh-import-agents
English · 简体中文
DeepSeek Honeys
dsh-import-agents 把 pi、opencode、codex、claude-code 的会话、聊天记录与 agent 导入 DeepSeek Harness(dsh)。导入的会话出现在会话列表,可携带完整上下文继续对话;自定义 agent 与模式提示词变成可发现的 dsh skills;composer 里的一键 同步 按钮即可完成全部导入。
| 资源 | 链接 |
| English README | README.md |
| npm 包 | dsh-import-agents |
| 源码 | github.com/Chang-Tong/dsh-import-agents |
目录
- 特性
- 截图
- 安装
- 使用
- 工作原理
- 配置
- 测试
- 常见问题
- License
特性
- 四种来源,一条命令。 导入 pi(JSONL)、opencode(SQLite)、codex(JSONL)、claude-code(JSONL)的会话——都是真实、可继续的 dsh 会话。
- 真正可继续。 可浏览原始完整历史(文本、推理、工具调用),并接着上次继续对话——模型拿到完整上下文。
- Agents 变成 skills。
展开完整文档(README 剩余 1 节)
dsh-import-agents
English · 简体中文
DeepSeek Honeys
dsh-import-agents 把 pi、opencode、codex、claude-code 的会话、聊天记录与 agent 导入 DeepSeek Harness(dsh)。导入的会话出现在会话列表,可携带完整上下文继续对话;自定义 agent 与模式提示词变成可发现的 dsh skills;composer 里的一键 同步 按钮即可完成全部导入。
| 资源 | 链接 |
| English README | README.md |
| npm 包 | dsh-import-agents |
| 源码 | github.com/Chang-Tong/dsh-import-agents |
目录
- 特性
- 截图
- 安装
- 使用
- 工作原理
- 配置
- 测试
- 常见问题
- License
特性
- 四种来源,一条命令。 导入 pi(JSONL)、opencode(SQLite)、codex(JSONL)、claude-code(JSONL)的会话——都是真实、可继续的 dsh 会话。
- 真正可继续。 可浏览原始完整历史(文本、推理、工具调用),并接着上次继续对话——模型拿到完整上下文。
- Agents 变成 skills。 pi 的 agent / 模式提示词与 opencode 的 agent 转成 $DSH_AGENTS_HOME/skills 下的技能包,frontmatter 记录来源(metadata.source / metadata.kind)。
- 一键同步按钮。 composer 工具行常驻一个小按钮,点击执行 /import-all,结果内联显示。
- 新会话主动询问迁移。 新顶层会话启动时,若有未导入历史会自动询问是否迁移;按项目记住决定,绝不重复打扰。
- 按工作区分组。 导入的会话自动挂到与原始 cwd 匹配的工作区(没有则创建);/attach-workspaces 可补挂旧导入。
- 幂等。 会话 id 稳定(pi-<uuid> / oc-<id> / codex-<id> / claude-<id>),重复导入自动跳过。
- 零运行时依赖。 只用 Node 内置模块(node:zlib 的 zstd、node:sqlite)加 dsh 平台模块。
截图
截取自干净的 Docker 演示环境(英文界面),内含示例 pi / codex 会话。
带 同步 按钮的 dsh web 主界面(composer 工具行):
带同步按钮的 dsh web 主界面
点击 同步 即执行完整导入,结果内联展示:
同步按钮与导入结果
导入的会话按原始项目目录挂到对应工作区,标题带来源标签([pi]、[opencode]、[codex] …):
会话列表中的导入会话
导入的会话打开后与原生 dsh 会话一致——文本、推理、工具调用完整保留,还能接着聊:
导入会话的完整历史
工具调用完整保留为真实轨迹条目——Trajectory 标签页为每次调用渲染卡片(下图是导入的 codex 会话中的一次 bash 调用):
轨迹与工具卡片
安装
插件已发布到 npm:dsh-import-agents,并声明了 dsh.bundle——官方一键安装命令会自动把它激活到 profile 里,无需手动配置。
一键安装(推荐)
dsh plugin --profile web add dsh-import-agents
dsh plugin add 会安装包并自动追加到 profile 的 bundle 列表(层直接激活,无需手动配置)。之后重启 dsh web 并刷新页面即可。
dsh plugin --profile <名字> 后面可以跟任意 pnpm 子命令——例如 dsh plugin --profile web remove dsh-import-agents 卸载。
安装源(spec)
<spec> 参数就是标准的 pnpm 包 spec:
| 来源 | 命令 |
| npm(最新版) | dsh plugin --profile web add dsh-import-agents |
| npm(指定版本/范围) | dsh plugin --profile web add dsh-import-agents@0.2.4 · @^0.2 |
| GitHub(短格式) | dsh plugin --profile web add github:Chang-Tong/dsh-import-agents |
| GitHub(锁定 commit) | dsh plugin --profile web add github:Chang-Tong/dsh-import-agents#<sha> |
| Git 完整地址 | dsh plugin --profile web add git+https://github.com/Chang-Tong/dsh-import-agents.git · #v0.2.4 |
| 本地 checkout | cd <目录> && dsh plugin --profile web add . 或 file:/路径/dsh-import-agents |
| 开发链接 | dsh plugin --profile web add link:/路径/dsh-import-agents |
| tarball | dsh plugin --profile web add ./dsh-import-agents-0.2.4.tgz(或 https://… 地址) |
注意事项:
- 相对路径 spec(.、../插件 及其 file: / link: 形式)锚定到调用目录——在插件 checkout 目录里执行 add . 安装的就是当前这个 checkout。
- 从 Git 安装带源码的插件时,安装过程会跑 prepare 脚本构建;pnpm ≥ 10 默认阻止脚本,直到在 profile 的 pnpm-workspace.yaml 里允许:第一次 add 会失败并给出 allowBuilds 提示,把提示的 key 复制进去再跑一次即可。安装构建好的 tarball 或本地 checkout 不需要这步。
- 每次安装后,声明了 dsh.bundle 的依赖会自动加入层栈(自动激活);没声明 dsh.bundle 的包只作为普通依赖安装(会打印一次性警告)。
重启并验证
1. 重启 dsh web——主机插件在启动时注册斜杠命令;前端产物(同步按钮)由 dsh web 自动加载。
2. 刷新页面——重启后旧页面的 RPC 连接已断开。
3. 确认生效:输入框工具行出现 同步 按钮,输入 /import-all 有响应。
可选的自检命令
npm view dsh-import-agents version # 查看最新发布版本
pnpm list dsh-import-agents # 确认已装进 profile
想关闭「新会话主动询问迁移」:在插入行上写 config: { offerOnStart: false }。源路径与默认值同样可在此覆盖,见 配置。
使用
快速开始
1. 重启后刷新页面。
2. 点 composer 工具行里的 同步 按钮,或直接输入 /import-all。
3. 导入的会话出现在会话列表(按工作区分组);导入的 agent 变成可用的 skills。
一切幂等——想跑多少次都行,已导入的会自动跳过。
斜杠命令
| 命令 | 作用 |
| /import-pi [选项] | 导入 pi 会话 |
| /import-opencode [选项] | 导入 opencode 会话 |
| /import-codex [选项] | 导入 codex 会话 |
| /import-claude-code [选项] | 导入 claude-code 会话 |
| /import-agents | 把 pi/opencode 的 agent 与模式提示词导入为 skills |
| /import-all [选项] | 以上全部(4 个来源 + agents) |
| /attach-workspaces | 把已导入会话挂到 cwd 匹配的工作区(补挂旧导入) |
选项:--limit N · --project 子串 · --since ISO|ms · --no-tools · --tools-as-text · --tool-truncate N
CLI(不需要 dsh)
node import.mjs all # dry-run 预览(不写任何东西)
node import.mjs all --apply # 真正写入会话 + skills
node import.mjs sessions codex --apply --limit 20 # 只导入单个来源
node import.mjs agents --apply # 只导入 agents/提示词 → skills
node export.mjs # 把会话导出为 Markdown,供任意 agent 阅读
- import.mjs 默认 dry-run;加 --apply 才写入。
- all 导入 pi + opencode + codex + claude-code + agents——与 GUI 里的 /import-all 完全一致。
- export.mjs 输出到 $DSH_HOME/exports/<来源>/<会话id>.md(支持 --source、--project、--limit、--since、--out、--no-reasoning、--no-tools)。
工作原理
flowchart LR
subgraph sources["本地数据"]
PI["pi 会话~/.pi/agent/sessions/.jsonl"]
OC["opencode 会话~/.local/share/opencode/opencode.db"]
CX["codex 会话~/.codex/sessions//.jsonl"]
CC["claude-code 会话~/.claude/projects/*/.jsonl"]
AG["pi agents & 提示词opencode agents"]
end
subgraph plugin["dsh-import-agents"]
R["解析器pi / opencode / codex / claude-reader"]
C["转换turn 结构 + 工具事件"]
W["写入dsh JSONL 持久化或 ctx.sessionPersistence"]
S["skillsSKILL.md 技能包"]
end
subgraph dsh["DeepSeek Harness"]
SL["会话列表 & 继续对话"]
TR["轨迹 & 工具卡片"]
SK["ctx.skills.list()"]
end
PI --> R
OC --> R
CX --> R
CC --> R
AG --> S
R --> C --> W --> SL
W --> TR
S --> SK
导入器本质是一个纯转换器:lib/ 把各来源解析成归一化消息流,再输出与 dsh 完全一致的 JSONL 事件布局(带校验和的 zstd 帧、项目目录编码)——dsh 自带的 list / load / prepare 可以逐字节读回。
会话(聊天记录)。 每条 user 消息开启一个 turn(turn/start + user/message),随后的 assistant 消息以递增 step 加入同一 turn,turn 以 turn/end 收尾。pi 的 thinking → dsh 的 reasoning 块;pi toolCall / opencode tool / claude tool_use / codex tool_use → tool-call 内容块 并配套写入 tool/call + tool/result 事件:轨迹视图渲染工具卡片,占位 tool/result 让恢复会话时每个 tool_calls 都有应答(OpenAI 兼容 API 会拒绝孤立的 tool_calls)。--tools-as-text 转成纯文本(无轨迹卡片);--no-tools 完全丢弃。机械记录(step-start、patch、compaction 等)跳过。
agents / 提示词 → skills。 写入 $DSH_AGENTS_HOME/skills/<名称>/SKILL.md(默认 ~/.agents/skills/),ctx.skills.list() 即可发现。名称冲突自动改名 <名称>-<来源>(如 k3-reviewer-opencode);已存在的 bundle 只补 SKILL.md 不动其他文件;同名同内容自动跳过;frontmatter 记录 metadata.source / metadata.kind 溯源。
配置
| 键 | 默认值 | 含义 |
| offerOnStart | true | 新顶层会话启动时是否询问迁移 |
| piRoot | ~/.pi/agent/sessions | pi 会话根目录 |
| piAgentRoot | ~/.pi/agent | pi agents / 提示词根目录 |
| opencodeDb | ~/.local/share/opencode/opencode.db | opencode SQLite 路径 |
| opencodeConfig | ~/.config/opencode | opencode agents 根目录 |
| codexRoot | ~/.codex/sessions | codex 会话根目录 |
| claudeRoot | ~/.claude/projects | claude-code 项目根目录 |
| skillsRoot | $DSH_AGENTS_HOME/skills | skills 输出根目录 |
| toolTruncate | 1000 | 工具调用参数截断长度(字符) |
迁移询问只对全新顶层会话(startup、非 subagent)且带 cwd、存在未导入历史时触发。每个项目的决定与全局 agents 决定记录在 $DSH_HOME/import-pi-opencode-state.json;headless 等无 UI provider 的环境自动静默跳过。
测试
- verify.mts — 在 staging 目录上用真实 dsh JSONL 后端 + skill provider 读回导入产物(在 dsh 仓库根执行 node --import tsx/esm ../dsh-import-agents/verify.mts <sessions根> <skills根>)→ 期望输出 SESSIONS ALL PASS / SKILLS ALL PASS。
- plugin/plugin-test.mts — 端到端:在真实 cordis 上下文加载插件,跑命令与新会话迁移询问,断言幂等与状态持久化。
- tests/ — Vitest 组件测试:同步按钮(sync-button.spec.tsx、sync-button-hide.spec.tsx)、opencode-reader.spec.ts 与 attach-workspaces.spec.ts。
- CI(GitHub Actions,macos-latest,Node 22):pnpm install → pnpm run build → npx vitest run。
pnpm install # devDependencies(esbuild、vitest)
pnpm run build # 重建 lib/client.js(同步按钮 bundle)
npx vitest run # 组件测试
常见问题
为什么点同步显示「新导入 0,已存在跳过 N」? 这正是幂等性在工作:这些会话之前已导入,所以跳过,不会产生重复。
工具调用的结果为什么没有? 各来源格式本身不保存工具结果,只有调用。导入会保留调用为 tool-call 块并配套占位 tool/result 事件——轨迹照常渲染卡片,恢复会话时请求也合法。
会不会一直问我迁移? 只在存在未导入会话时问,且按项目记忆。选了「不导入」或导入完成后,决定写入 $DSH_HOME/import-pi-opencode-state.json,不再打扰。
为什么 dsh 重启后必须刷新页面? 重启后旧页面的 RPC 连接已断开,未刷新时点同步或任何命令都会失败。
Node 版本要求? Node ≥ 22.19——与 dsh 一致(node:sqlite、node:zlib 的 zstd)。
License
MIT——见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
Chang-Tong/dsh-import-agents
dsh-import-agents 把 pi、opencode、codex、claude-code 的会话、聊天记录与…
相关插件 · 对话 / 记忆
上下文中枢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