Skip to content

feat: add CLI history import/export with selective browse - #54

Open
SherlockNolan wants to merge 4 commits into
Dailin521:mainfrom
SherlockNolan:feature/history-import-export-cli
Open

feat: add CLI history import/export with selective browse#54
SherlockNolan wants to merge 4 commits into
Dailin521:mainfrom
SherlockNolan:feature/history-import-export-cli

Conversation

@SherlockNolan

Copy link
Copy Markdown

Summary

  • add CLI history export/import support for Codex rollout files and SQLite thread metadata
  • add selective export TUI with search, keyboard navigation, archive visibility toggle, archive/live toggle, and transcript preview fixes
  • keep imports incremental with conflict handling and provider metadata alignment

Tests

  • npm test (51 passed)

Copy link
Copy Markdown
Owner

感谢你提交这个 PR,并为历史导入导出、选择界面、冲突处理和对话预览补充了实现与测试。

完整审查后,目前还有以下问题需要在本 PR 中处理,因此暂时无法合并:

  1. 归档安全

    当前归档路径和文件类型校验不够严格,需要限制 rollout、SQLite 文件的允许目录和文件名,拒绝链接、异常路径及不一致的 thread id。同时,新增的 tar@^6.2.1npm audit 报告存在 critical 漏洞,需要升级、更换依赖或调整归档实现。

  2. 备份与回滚

    导入备份没有保存被覆盖、删除或新增的完整 rollout。实测 overwrite 后执行 restore,原本的 transcript 无法恢复。请确保备份能够完整还原导入前的 rollout、SQLite 和相关状态。

  3. 导入原子性

    当前先复制 rollout,再合并 SQLite。归档缺失文件、SQLite schema 不兼容或中途失败时,会留下部分导入状态。请在写入前完成完整验证,并在任何步骤失败时自动回滚。

  4. SQLite 迁移范围

    目标没有数据库时,当前实现会复制完整的 state_5.sqlite,包括非 thread 表;同时分别复制 DB、WAL、SHM 也不能保证一致性。请只迁移必要的 thread metadata,并使用可靠的一致性快照或专用迁移格式。

  5. Provider 与 Model 一致性

    import --provider 会更新导入记录和原有本地历史,但不会同步根 model_provider,可能导致历史不可见。当前 main 还包含新的 model 同步逻辑,导入流程也需要兼容。请明确只修改导入记录,或同步更新根 provider/model。

  6. CLI 与 dry-run

    当前参数解析器可能把布尔参数后面的 archive path 当作参数值,例如 import --dry-run archive.tgz 会被解析为缺少归档路径。另外,非交互环境中存在冲突时,dry-run 无法正常输出计划。请区分布尔参数与带值参数,并让 dry-run 无需冲突决策即可报告结果。

  7. Transcript 与 TUI 测试

    transcript 同时读取多种 rollout 消息记录,但没有去重,可能重复显示同一条消息并提前触发预览上限。TUI 的搜索、分页、选择、预览、resize、退出、raw mode 恢复及 archive 切换也需要补充自动化测试。

  8. 与当前 main 的兼容

    该分支目前落后当前 main,并与 AGENTS.md、README、文档和 src/cli.js 存在冲突。请 rebase 当前 main,保留现有 watch、provider/model 同步和最新 CLI 行为,然后重新运行完整测试。

  9. 依赖与文档

    请使用项目默认 registry 重新生成 lockfile;移除未被导入端使用的 global state 数据,或补全其迁移逻辑;同时修正文档中“不会修改消息历史、标题、cwd 或时间”等与 overwrite import 行为不一致的说明。

本次验证结果:

  • 原有测试 51/51 通过
  • git diff --checknpm pack --dry-run 通过
  • npm audit 报告新增直接依赖存在 1 个 critical
  • 补充测试复现了路径校验、恢复失败、部分导入、整库复制、provider 不一致、CLI 参数、dry-run 和 transcript 重复等问题
  • 当前未发现该 PR 的 CI workflow run 或 commit status

再次感谢你的提交。请在本 PR 中处理以上问题并补齐测试,更新后可继续审查。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants