agent-dump 1.2.4__tar.gz → 1.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. {agent_dump-1.2.4 → agent_dump-1.2.5}/Cargo.lock +8 -1
  2. {agent_dump-1.2.4 → agent_dump-1.2.5}/Cargo.toml +1 -1
  3. {agent_dump-1.2.4 → agent_dump-1.2.5}/PKG-INFO +58 -15
  4. {agent_dump-1.2.4 → agent_dump-1.2.5}/README.md +57 -14
  5. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/Cargo.toml +2 -0
  6. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/diagnostics.rs +3 -3
  7. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/export.rs +9 -1
  8. agent_dump-1.2.5/crates/agent-dump-core/src/providers/antigravity_cli/mod.rs +294 -0
  9. agent_dump-1.2.5/crates/agent-dump-core/src/providers/antigravity_cli/proto.rs +453 -0
  10. agent_dump-1.2.5/crates/agent-dump-core/src/providers/antigravity_cli/tests.rs +295 -0
  11. agent_dump-1.2.5/crates/agent-dump-core/src/providers/antigravity_cli/transcript.rs +280 -0
  12. agent_dump-1.2.5/crates/agent-dump-core/src/providers/claude/mod.rs +740 -0
  13. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/claude/transcript.rs +166 -113
  14. agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/children.rs +193 -0
  15. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/codex/enrichment.rs +37 -16
  16. agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/exec.rs +465 -0
  17. agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/mod.rs +1197 -0
  18. agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/rollout.rs +115 -0
  19. agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/transcript.rs +566 -0
  20. agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/usage.rs +134 -0
  21. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/contract.rs +32 -2
  22. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/cursor/mod.rs +166 -239
  23. agent_dump-1.2.5/crates/agent-dump-core/src/providers/cursor/transcript.rs +427 -0
  24. agent_dump-1.2.5/crates/agent-dump-core/src/providers/cursor/workspace.rs +110 -0
  25. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/desktop/cherry.rs +223 -58
  26. agent_dump-1.2.5/crates/agent-dump-core/src/providers/desktop/deepchat.rs +469 -0
  27. agent_dump-1.2.5/crates/agent-dump-core/src/providers/desktop/minimax.rs +528 -0
  28. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/desktop/mod.rs +11 -8
  29. agent_dump-1.2.5/crates/agent-dump-core/src/providers/desktop/tests.rs +810 -0
  30. agent_dump-1.2.5/crates/agent-dump-core/src/providers/droid/mod.rs +343 -0
  31. agent_dump-1.2.5/crates/agent-dump-core/src/providers/dsh/log.rs +198 -0
  32. agent_dump-1.2.5/crates/agent-dump-core/src/providers/dsh/mod.rs +285 -0
  33. agent_dump-1.2.5/crates/agent-dump-core/src/providers/dsh/transcript.rs +742 -0
  34. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/files.rs +142 -25
  35. agent_dump-1.2.5/crates/agent-dump-core/src/providers/gemini_cli/chat.rs +551 -0
  36. agent_dump-1.2.5/crates/agent-dump-core/src/providers/gemini_cli/mod.rs +220 -0
  37. agent_dump-1.2.5/crates/agent-dump-core/src/providers/grok/mod.rs +243 -0
  38. agent_dump-1.2.5/crates/agent-dump-core/src/providers/grok/transcript.rs +716 -0
  39. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/kimi/mod.rs +207 -63
  40. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/kimi/transcript.rs +22 -14
  41. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/kimi/wire.rs +88 -13
  42. agent_dump-1.2.5/crates/agent-dump-core/src/providers/kimi_code/mod.rs +315 -0
  43. agent_dump-1.2.5/crates/agent-dump-core/src/providers/kimi_code/wire.rs +429 -0
  44. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/mod.rs +7 -0
  45. agent_dump-1.2.5/crates/agent-dump-core/src/providers/pi/mod.rs +556 -0
  46. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/pi/transcript.rs +232 -72
  47. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/registry.rs +117 -3
  48. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/source_tests.rs +9 -5
  49. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/sqlite/connection.rs +28 -3
  50. agent_dump-1.2.5/crates/agent-dump-core/src/providers/sqlite/legacy.rs +499 -0
  51. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/sqlite/mod.rs +478 -74
  52. agent_dump-1.2.5/crates/agent-dump-core/src/providers/sqlite/v2.rs +535 -0
  53. agent_dump-1.2.5/crates/agent-dump-core/src/providers/text.rs +193 -0
  54. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/index/tests.rs +2 -2
  55. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/index.rs +45 -15
  56. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/scanner.rs +14 -15
  57. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/cache/tests.rs +59 -7
  58. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/cache.rs +50 -15
  59. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/storage/mod.rs +1 -0
  60. agent_dump-1.2.5/crates/agent-dump-core/src/storage/zstd.rs +49 -0
  61. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/locales/en.json +1 -1
  62. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/locales/zh.json +1 -1
  63. agent_dump-1.2.4/crates/agent-dump-core/src/providers/claude/mod.rs +0 -414
  64. agent_dump-1.2.4/crates/agent-dump-core/src/providers/codex/mod.rs +0 -469
  65. agent_dump-1.2.4/crates/agent-dump-core/src/providers/codex/transcript.rs +0 -371
  66. agent_dump-1.2.4/crates/agent-dump-core/src/providers/cursor/transcript.rs +0 -577
  67. agent_dump-1.2.4/crates/agent-dump-core/src/providers/desktop/deepchat.rs +0 -290
  68. agent_dump-1.2.4/crates/agent-dump-core/src/providers/desktop/minimax.rs +0 -333
  69. agent_dump-1.2.4/crates/agent-dump-core/src/providers/desktop/tests.rs +0 -443
  70. agent_dump-1.2.4/crates/agent-dump-core/src/providers/pi/mod.rs +0 -282
  71. agent_dump-1.2.4/crates/agent-dump-core/src/providers/sqlite/legacy.rs +0 -137
  72. agent_dump-1.2.4/crates/agent-dump-core/src/providers/sqlite/v2.rs +0 -227
  73. {agent_dump-1.2.4 → agent_dump-1.2.5}/LICENSE +0 -0
  74. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/json/diagnostic.rs +0 -0
  75. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/json/encoding.rs +0 -0
  76. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/json.rs +0 -0
  77. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/mod.rs +0 -0
  78. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/value.rs +0 -0
  79. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/config.rs +0 -0
  80. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/lib.rs +0 -0
  81. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/formats.rs +0 -0
  82. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/i18n.rs +0 -0
  83. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/mod.rs +0 -0
  84. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/render.rs +0 -0
  85. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/parallel.rs +0 -0
  86. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/codex/patch.rs +0 -0
  87. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/error.rs +0 -0
  88. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/jsonl.rs +0 -0
  89. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/title.rs +0 -0
  90. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/context.rs +0 -0
  91. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/filter.rs +0 -0
  92. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/mod.rs +0 -0
  93. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/read.rs +0 -0
  94. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/text.rs +0 -0
  95. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/transcript.rs +0 -0
  96. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/assembly.rs +0 -0
  97. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/mod.rs +0 -0
  98. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/timestamp.rs +0 -0
  99. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/storage/private_files.rs +0 -0
  100. {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/storage/source_io.rs +0 -0
  101. {agent_dump-1.2.4 → agent_dump-1.2.5}/pyproject.toml +0 -0
  102. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/.gitattributes +0 -0
  103. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/README.md +0 -0
  104. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-chunk.txt +0 -0
  105. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-handoff.txt +0 -0
  106. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-merge.txt +0 -0
  107. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-report.txt +0 -0
  108. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-retry.txt +0 -0
  109. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-chunk.txt +0 -0
  110. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-handoff.txt +0 -0
  111. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-merge.txt +0 -0
  112. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-report.txt +0 -0
  113. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-retry.txt +0 -0
  114. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/read-session-en.txt +0 -0
  115. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/read-session-zh.txt +0 -0
  116. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/system.txt +0 -0
  117. {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/uri.txt +0 -0
  118. {agent_dump-1.2.4 → agent_dump-1.2.5}/rust-toolchain.toml +0 -0
  119. {agent_dump-1.2.4 → agent_dump-1.2.5}/rustfmt.toml +0 -0
  120. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/cli_args.rs +0 -0
  121. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/events.rs +0 -0
  122. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/handoff.rs +0 -0
  123. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/llm.rs +0 -0
  124. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/log.rs +0 -0
  125. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/mod.rs +0 -0
  126. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/model.rs +0 -0
  127. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/progress.rs +0 -0
  128. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/prompts.rs +0 -0
  129. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/reduction.rs +0 -0
  130. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/sessions.rs +0 -0
  131. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/summary.rs +0 -0
  132. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/command.rs +0 -0
  133. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/date_input.rs +0 -0
  134. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/main.rs +0 -0
  135. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/shortcut.rs +0 -0
  136. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/terminal/mod.rs +0 -0
  137. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/terminal/reader.rs +0 -0
  138. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/terminal/selector.rs +0 -0
  139. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/terminal/tui.rs +0 -0
  140. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/collect.rs +0 -0
  141. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/config.rs +0 -0
  142. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/interactive.rs +0 -0
  143. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/list.rs +0 -0
  144. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/machine.rs +0 -0
  145. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/maintenance.rs +0 -0
  146. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/mod.rs +0 -0
  147. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/read.rs +0 -0
  148. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/reader.rs +0 -0
  149. {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/uri.rs +0 -0
@@ -10,7 +10,7 @@ checksum = "320119579fcad9c21884f5c4861d16174d0e06250625266f50fe6898340abefa"
10
10
 
11
11
  [[package]]
12
12
  name = "agent-dump"
13
- version = "1.2.4"
13
+ version = "1.2.5"
14
14
  dependencies = [
15
15
  "agent-dump-core",
16
16
  "caseless",
@@ -38,6 +38,7 @@ dependencies = [
38
38
  "num-bigint",
39
39
  "regex",
40
40
  "rusqlite",
41
+ "ruzstd",
41
42
  "serde",
42
43
  "serde_json",
43
44
  "sha2",
@@ -1412,6 +1413,12 @@ version = "1.0.23"
1412
1413
  source = "registry+https://github.com/rust-lang/crates.io-index"
1413
1414
  checksum = "cf54715a573b99ac80df0bc206da022bcd442c974952c7b9720069370852e21f"
1414
1415
 
1416
+ [[package]]
1417
+ name = "ruzstd"
1418
+ version = "0.9.0"
1419
+ source = "registry+https://github.com/rust-lang/crates.io-index"
1420
+ checksum = "a252f5e20f038fe7b4ea53e073e65398d652c864cc162fc77c56c2f13717b888"
1421
+
1415
1422
  [[package]]
1416
1423
  name = "ryu"
1417
1424
  version = "1.0.23"
@@ -46,7 +46,7 @@ nix = { version = "0.31", default-features = false, features = ["fs", "user"] }
46
46
 
47
47
  [package]
48
48
  name = "agent-dump"
49
- version = "1.2.4"
49
+ version = "1.2.5"
50
50
  edition = "2024"
51
51
  rust-version = "1.90"
52
52
  publish = false
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-dump
3
- Version: 1.2.4
3
+ Version: 1.2.5
4
4
  Classifier: Environment :: Console
5
5
  Classifier: License :: OSI Approved :: MIT License
6
6
  Classifier: Programming Language :: Rust
@@ -71,13 +71,22 @@ Follow the generated read commands and cursors until `has_more=false` to cover t
71
71
  - **OpenCode** - Open source AI coding assistant
72
72
  - **ZCode** - ZCode coding assistant sessions
73
73
  - **Claude Code** - Anthropic's AI coding tool
74
+ - **Qoder** - Qoder CLI sessions
75
+ - **Qoder CN** - Qoder CN CLI sessions
74
76
  - **Codex** - OpenAI's command-line AI coding assistant
75
77
  - **Kimi** - Moonshot AI assistant
78
+ - **Kimi-Code** - Kimi Code CLI sessions
76
79
  - **Cursor** - Cursor composer sessions
80
+ - **Droid** - Factory Droid CLI sessions
81
+ - **Grok** - Grok CLI sessions
77
82
  - **Pi** - Earendil's AI coding agent
83
+ - **oh-my-pi** - Pi-based coding agent (`omp`)
84
+ - **Gemini CLI** - Google's command-line AI coding agent
85
+ - **DSH** - DeepSeek Harness sessions
78
86
  - **DeepChat** - Current local sessions from unencrypted databases
79
87
  - **Cherry Studio** - Local 2.x chats and agent sessions
80
88
  - **MiniMax Code** - Current CLI sessions from local SQLite storage
89
+ - **Antigravity CLI** - Conversation databases; tool results are not decoded
81
90
  - **More Tools** - PRs are welcome to support other AI coding tools
82
91
 
83
92
  ## Features
@@ -88,7 +97,7 @@ Follow the generated read commands and cursors until `has_more=false` to cover t
88
97
  - **Summarize conversations**: Collect all eligible user/assistant text through bounded chunks, or hand the task to an external Agent. Failures are marked as incomplete.
89
98
  - **Automate**: Query metadata, capabilities, search evidence, and statistics as JSON; unknown facts remain explicit.
90
99
 
91
- Available formats and message details depend on the source tool. Normalized output does not reproduce every private field or attachment file. Run `agent-dump --providers --json` to inspect capabilities.
100
+ Available formats and message details depend on the source tool. Normalized output does not reproduce every private field or attachment file. Except for MiniMax Code, transcripts drop `system-reminder` and slash-command wrapper tags (`command-*`, `local-command-*`), trim trailing whitespace, and omit messages left empty by that cleanup. Run `agent-dump --providers --json` to inspect capabilities.
92
101
 
93
102
  ## Installation
94
103
 
@@ -196,12 +205,21 @@ Supported URI schemes:
196
205
  - `codex://<session_id>` - Codex sessions
197
206
  - `codex://threads/<session_id>` - Codex sessions
198
207
  - `kimi://<session_id>` - Kimi sessions
208
+ - `kimi-code://<session_id>` - Kimi-Code sessions
199
209
  - `claude://<session_id>` - Claude Code sessions
200
- - `cursor://<requestid>` - Cursor sessions (`requestid` is used as URI identifier)
210
+ - `qoder://<session_id>` - Qoder sessions
211
+ - `qoder-cn://<session_id>` - Qoder CN sessions
212
+ - `cursor://<composer_id>` - Cursor sessions (legacy `cursor://<requestid>` URIs still resolve to the same session)
213
+ - `droid://<session_id>` - Droid sessions
214
+ - `grok://<session_id>` - Grok sessions
201
215
  - `pi://<session_id>` - Pi sessions
216
+ - `omp://<session_id>` - oh-my-pi sessions
217
+ - `gemini-cli://<session_id>` - Gemini CLI sessions
218
+ - `dsh://<session_id>` - DSH sessions
202
219
  - `deepchat://<session_id>` - DeepChat sessions
203
220
  - `cherry://topic-<id>` / `cherry://session-<id>` - Cherry Studio chats / agent sessions
204
221
  - `minimax://<session_id>` - MiniMax Code CLI sessions
222
+ - `antigravity-cli://<conversation_id>` - Antigravity CLI conversations
205
223
 
206
224
  ### Typical Errors
207
225
 
@@ -256,37 +274,62 @@ listed and fails when there is nothing to list because no provider has data.
256
274
 
257
275
  ## Path Discovery
258
276
 
259
- `agent-dump` resolves most session roots in this order: official environment variable, tool default directory, then local development fallback under `data/<agent>`. ZCode currently uses only its macOS/Windows default database path.
277
+ `agent-dump` resolves most session roots in this order: official environment variable, tool default directory, then local development fallback under `data/<agent>`. ZCode currently uses only its macOS/Windows default database path. Path environment variables are trimmed, blank values are ignored, and a leading `~` expands to the home directory.
260
278
 
261
279
  - **Codex**: `CODEX_HOME` -> `~/.codex` -> `data/codex`
262
280
  - **Claude Code**: `CLAUDE_CONFIG_DIR` -> `~/.claude` -> `data/claudecode`
281
+ - **Qoder**: `QODER_CONFIG_DIR` -> `~/.qoder` -> `data/qoder`
282
+ - **Qoder CN**: `QODERCN_CONFIG_DIR` -> `~/.qoder-cn` -> `data/qoder-cn`
263
283
  - **Kimi**: `KIMI_SHARE_DIR` -> `~/.kimi` -> `data/kimi`
284
+ - **Kimi-Code**: `KIMI_CODE_HOME` -> `~/.kimi-code` -> `data/kimi-code`. A session is a `sessions/<hash>/<id>/` directory with both `state.json` and `agents/main/wire.jsonl`; sessions without messages are skipped. The working directory comes from `workDir` or `custom.cwd` in `state.json`, then `session_index.jsonl` in the data root.
264
285
  - **OpenCode**: `OPENCODE_DB` selects one database (relative to `XDG_DATA_HOME/opencode` or `~/.local/share/opencode`). Otherwise use `opencode.db` there, then the legacy Windows `LOCALAPPDATA`/`APPDATA` location, then `data/opencode/opencode.db`.
286
+ - **Droid**: `FACTORY_HOME_OVERRIDE/.factory` -> `~/.factory` -> `data/droid`. A session is a `<id>.jsonl` file in `sessions/` or one folder below it whose first line is a `session_start` record; sessions without visible messages are skipped, and so are messages marked `llm_only`. The working directory comes from `lastCwd` or `cwd` in `session_start`. Token usage and the model come from the sibling `<id>.settings.json`; custom model ids map through `customModels` in the data root `settings.json`.
265
287
  - **ZCode**: macOS `~/.zcode/cli/db/db.sqlite`; Windows `%USERPROFILE%\.zcode\cli\db\db.sqlite`; no Linux default path
266
- - **Cursor**: Cursor's default user `globalStorage/state.vscdb`
267
- - **Pi**: `PI_HOME` -> `~/.pi` -> `data/pi`
288
+ - **Cursor**: `CURSOR_DATA_PATH/globalStorage/state.vscdb`; defaults to the `User` directory under macOS `~/Library/Application Support/Cursor`, Windows `%APPDATA%\Cursor`, or Linux `${XDG_CONFIG_HOME:-~/.config}/Cursor`. The working directory comes from the workspace folder in `workspaceStorage/*/workspace.json` that lists the composer.
289
+ - **Grok**: `GROK_HOME` -> `~/.grok` -> `data/grok`. Every `summary.json` under `sessions/`, at any depth, is a session when its `info` has both `id` and `cwd`; messages come from the sibling `updates.jsonl`, and sessions without messages are skipped. Prompts discarded by a rewind are left out of the transcript. See the [Grok reading rules](docs/providers/grok.md).
290
+ - **Pi**: `PI_CODING_AGENT_SESSION_DIR` -> absolute `sessionDir` in the agent directory's `settings.json` -> `<agent directory>/sessions` -> `data/pi`. The agent directory is `PI_CODING_AGENT_DIR`, then `PI_HOME/agent`, then `~/.pi/agent`.
291
+ - **oh-my-pi**: `XDG_DATA_HOME/omp/sessions` when `XDG_DATA_HOME/omp` exists (not on Windows) -> `~/.omp/agent/sessions` -> `data/omp`
292
+ - **Gemini CLI**: `GEMINI_CLI_HOME/.gemini/tmp` -> `~/.gemini/tmp` -> `data/gemini-cli`. `GEMINI_CLI_HOME` is the directory that contains `.gemini`, not the data directory itself.
293
+ - **DSH**: `DSH_HOME` -> `~/.dsh` -> `data/dsh`. Sessions are logs under `sessions/<project>/<session>/`; attachments are read from `attachments/v1` in the data root.
268
294
  - **DeepChat**: `DEEPCHAT_USER_DATA_DIR/app_db/agent.db`; defaults to macOS `~/Library/Application Support/DeepChat/app_db/agent.db`, Windows `%APPDATA%\DeepChat\app_db\agent.db`, or Linux `${XDG_CONFIG_HOME:-~/.config}/DeepChat/app_db/agent.db`.
269
- - **Cherry Studio**: `CHERRY_STUDIO_USER_DATA_DIR/Data/cherrystudio.sqlite`; otherwise the first existing database in the user data directories configured by `~/.cherrystudio/boot-config.json`, then the platform default: macOS `~/Library/Application Support/CherryStudio`, Windows `%APPDATA%\CherryStudio`, or Linux `${XDG_CONFIG_HOME:-~/.config}/CherryStudio` (each with `Data/cherrystudio.sqlite`). The override is provided by agent-dump; use it for portable/dev installations or to select among multiple installations.
270
- - **MiniMax Code**: `MINIMAX_DATA_DIR` → `MAVIS_DATA_DIR` → `~/.minimax`; the database is `v2/sqlite/runtime-state.sqlite` under the selected root. Only one root is selected; a missing explicit path never falls back to another installation.
295
+ - **Cherry Studio**: `CHERRYSTUDIO_USER_DATA_DIR` or `CHERRY_STUDIO_USER_DATA_DIR`, then `Data/cherrystudio.sqlite`; otherwise the first existing database in the user data directories configured by `~/.cherrystudio/boot-config.json`, then the platform default: macOS `~/Library/Application Support/CherryStudio`, Windows `%APPDATA%\CherryStudio`, or Linux `${XDG_CONFIG_HOME:-~/.config}/CherryStudio` (each with `Data/cherrystudio.sqlite`). Use the override for portable/dev installations or to select among multiple installations.
296
+ - **MiniMax Code**: `MINIMAX_DATA_DIR` → `MAVIS_DATA_DIR` → `~/.minimax`, or `~/.minimax-code` when only that directory has a database; the database is `v2/sqlite/runtime-state.sqlite` under the selected root. Only one root is selected; a missing explicit path never falls back to another installation.
297
+ - **Antigravity CLI**: `AGY_CONVERSATIONS_DIR` -> `~/.gemini/antigravity-cli/conversations` -> `data/antigravity-cli/conversations`. Each `<conversation_id>.db` below it is a session; the optional `conversation_summaries.db` in its parent directory supplies the title, working directory, and update time. Antigravity IDE `.gemini/antigravity/conversations/*.pb` files are not read.
271
298
 
272
299
  Notes:
273
300
 
274
301
  - On Windows, prefer configuring the tool's official environment variable when available.
275
302
  - The `data/<agent>` fallback is kept for local development and tests.
276
303
 
277
- DeepChat reads saved sessions in the current `agent.db`, including migrated history, ACP sessions, and subagent sessions; drafts are excluded. It supports listing, query, search, stats, collect, and print / JSON / Markdown exports. Structured messages take precedence over the `content` fallback. Text, reasoning, and tool records are normalized; compaction markers do not enter collect. JSON also retains attachment references, links, and other message blocks. Attachment files and offloaded tool output are not read. Token totals come from message records; billing cost is unavailable.
304
+ Codex scans `sessions` and `archived_sessions` and reads only `rollout-*.jsonl` and `rollout-*.jsonl.zst`; when both exist, the uncompressed file wins. Raw export of a compressed rollout writes the decompressed JSONL. Titles come from the title index, then the first line of the first user message in the first 20 records that is not injected context. Developer and system messages, and user messages that contain injected-context markers, are excluded. Token totals add each `token_count` delta once, include remote compaction and subagent usage, exclude history a fork replays from its parent, and record cache reads. Subagent rollouts are listed as separate sessions; when the parent never received a completion notification, the subagent's final reply is inserted into the parent. For uncompressed files over 256 KiB, listing reads only the head and tail, so the message count is unknown.
305
+
306
+ Claude Code lists `<project>/<session>.jsonl` files and the subagent transcripts under `<session>/subagents/`, including workflow agents in `subagents/workflows/<run>/agent-*.jsonl`. Each subagent is a separate session identified by its agent ID, and the parent message that starts it records `subagent_id`. Sessions without a visible message are skipped. Titles use the latest custom title, then the AI title, the subagent name or description, `sessions-index.json`, and the first line of the first user prompt within the first 20 records. Message counts include visible records only. Token totals keep the last usage of each API request and count cache reads and writes as input.
307
+
308
+ Qoder and Qoder CN keep the Claude Code project layout under `projects/` and follow the same rules; assistant messages are labeled `qoder` or `qoder-cn`.
309
+
310
+ Pi reads only the active branch: it follows `parentId` back from the last entry that has an id, so abandoned branches are excluded from exports, search, and counts. Legacy files without entry ids are read in file order. Tool results are merged into their tool calls with status and `details`; bash executions get a status from the exit code and cancellation flag. Only custom messages with `display: true` are kept. Tokens are recorded per message, and input includes cache reads and writes. Sessions without visible messages are not listed. Titles come from the `session_info` name, then a `title` record, the header `title`, and the first user message. For files over 256 KiB, listing reads only the head and tail, so the message count is unknown.
311
+
312
+ oh-my-pi follows the Pi rules; assistant messages are labeled `omp`. Subagent and advisor transcripts in the directory named after a session file are listed as separate sessions, identified by their header `id`, without a link to the parent session.
313
+
314
+ Gemini CLI lists `tmp/<project>/chats/*.jsonl` and legacy `*.json` chats, plus subagent chats in `chats/<parent session id>/`. A legacy `.json` chat that was resumed as `.jsonl` is read only from the `.jsonl` file. Files without a `sessionId` and sessions without messages are skipped. JSONL records are replayed in order, including `$set`, `$patch`, and `$rewindTo` updates. The working directory comes from `tmp/<project>/.project_root`. Titles use the chat `summary`, then the first user prompt that does not start with `<session_context>` or `<hook_context>`. User text prefers `displayContent`. Thought summaries become reasoning, and tool calls take results from the call record or a later `functionResponse`. Input tokens include cached and tool-use prompt tokens; output totals include thinking tokens. Subagent chats are listed as separate sessions without a link to the parent.
315
+
316
+ DSH reads one log per session directory: the newest `session.jsonl`, `session.v<N>.jsonl` or `.jsonl.zstd` file by format version, then modification time. A log counts only in the directories DSH derives from its own working directory and session ID. Logs with an invalid header or non-contiguous sequence numbers and sessions without messages are skipped. A record or zstd frame still being written at the end is ignored, and raw export of a compressed log writes the decompressed JSONL. A forked session excludes the events it inherited from its parent. A streamed step without a final message is rebuilt from its chunks. Tool results are merged into their tool calls with status and metadata. Images are read only when the attachment matches its recorded SHA-256 digest and size; a message whose images are all unavailable shows `Image attachment unavailable`. Titles come from the session title, then the subagent label, the first user message, an inherited title and the working directory name. Input tokens include cache reads and writes, and output tokens include reasoning. Billing cost is never estimated.
317
+
318
+ DeepChat reads saved sessions in the current `agent.db`, including migrated history, ACP sessions, and subagent sessions; drafts, sessions without messages, and sessions whose parent chain forms a loop are excluded. The update time is the latest of the session, message, block, and usage records. It supports listing, query, search, stats, collect, and print / JSON / Markdown exports. Structured messages take precedence over the `content` fallback, and plain-text `content` becomes message text. Text, reasoning, plan, image, and tool records are normalized; other blocks with text become message text, and compaction markers do not enter collect. Referenced sessions, attachment paths, and links become message text, so search finds them; JSON also keeps the attachment and link records. Attachment files and offloaded tool output are not read. Token totals come from `deepchat_usage_stats`, falling back to message metadata, with cached tokens capped at the input count; billing cost is unavailable.
278
319
 
279
320
  SQLCipher databases, direct reads of legacy `chat.db`, and raw export are unsupported. The reader does not run DeepChat migrations or Tape recovery. Set `DEEPCHAT_USER_DATA_DIR` to read a custom user data directory.
280
321
 
281
- Cherry Studio supports listing, query, search, stats, collect, and print / JSON / Markdown exports from its current 2.x database, including migrated history. Ordinary chats expose only the active root-to-leaf path; other branches and parallel model replies are excluded from exports, search, and counts. Structural roots and empty reserved user leaves are excluded. Agent sessions are read chronologically and use their workspace as the working directory; ordinary chats have no working directory. Deleted sessions and chat messages are excluded.
322
+ Cherry Studio supports listing, query, search, stats, collect, and print / JSON / Markdown exports from its current 2.x database, including migrated history. Ordinary chats expose only the active root-to-leaf path; other branches and parallel model replies are excluded from exports, search, and counts. Structural roots, records that are neither user nor assistant messages, and messages with neither content nor usage are excluded; sessions left without messages are not listed. Agent sessions are read chronologically and use their workspace as the working directory; ordinary chats have no working directory. Deleted sessions and messages are excluded. File parts become images or `Attachment:` text, and compact summaries become message text. Missing token totals are summed from their details, reasoning tokens are recorded, and recorded USD costs count toward the cost. An unnamed session takes its title from the first user message, then `Cherry Studio`; the update time is the session's last activity.
282
323
 
283
324
  Text, reasoning, tool calls/results, code, and translations are normalized. JSON retains file references and control events; compaction summaries and internal events do not enter collect or search. Token totals come from message stats. Per-currency costs are preserved in JSON without conversion or an aggregate billing total. The reader never opens attachment files, scans SDK logs, or runs application migrations. Direct reads of 1.x IndexedDB/Redux data and raw export are unsupported.
284
325
 
285
- MiniMax Code supports listing, query, search, stats, collect, and print / JSON / Markdown exports from the current CLI's migrated display messages. Visible conversations, child tasks, and archived sessions are included; hidden and internal peek/channel/cron sessions are excluded. Messages follow database row order and preserve text, reasoning, tool state/results, and attachment references. Compaction, review, and system events do not enter collect or search. The model comes from session metadata and remains unknown when absent; JSON retains recorded per-message token usage without estimating billing cost.
326
+ MiniMax Code supports listing, query, search, stats, collect, and print / JSON / Markdown exports from the current CLI's migrated display messages. Sessions without message rows, hidden root sessions, and internal peek/channel/cron sessions are excluded; hidden child sessions and archived sessions are kept. Untitled sessions use the first non-automated user message, and the update time includes message and token-usage times. Messages follow database row order and preserve text, reasoning, tool state/results, and attachment references; attachments and message errors also become text. Compaction and review events keep their user/assistant role with a label such as `Context compacted`, so they enter search and collect; system events and permission responses do not. A tool fails when its result reports `isError` or `error`, and a task tool's single child session becomes `subagent_id`. The session model comes from session metadata and remains unknown when absent. Token usage comes from `local_runtime_token_usage`: session stats count every row, and a turn with one model attaches its model, tokens (including reasoning), and recorded USD cost to the turn's last assistant message. Billing cost is never estimated.
327
+
328
+ Set `MINIMAX_DATA_DIR` explicitly for custom profiles or other directories. The reader does not read model-context JSONL or attachment files, run migrations, or recover rewound messages. Raw export, direct legacy storage reads, and desktop data are unsupported. Pending migrations and corrupt sessions produce diagnostics instead of appearing empty. See the [MiniMax Code design and acceptance scope](docs/providers/minimax.md).
286
329
 
287
- Set `MINIMAX_DATA_DIR` explicitly for custom profiles, earlier source builds using `~/.minimax-code`, or other directories. The reader does not read model-context JSONL or attachment files, run migrations, or recover rewound messages. Raw export, direct legacy storage reads, and desktop data are unsupported. Pending migrations and corrupt sessions produce diagnostics instead of appearing empty. See the [MiniMax Code design and acceptance scope](docs/providers/minimax.md).
330
+ Antigravity CLI supports listing, query, search, stats, collect, and print / JSON / Markdown exports. Databases are opened read-only, and only the Protobuf fields for user prompts, assistant text, title updates, tool calls, step times, and token usage are decoded. Tool results are not stored in a known format, so tool calls have status `unknown` and keep the native step type and status in metadata; other unrecognized steps are skipped. Databases without steps are not listed. Titles come from the latest title step, the summary title, then the first user prompt. Steps without a native time use the summary update time or the database modification time and are marked as inferred, so collect does not date them. Usage repeated across retries is counted once and attached to the next assistant message; usage after the last step becomes a usage-only assistant message. Input includes cache tokens and session output includes reasoning; cost is not estimated. Raw export is unsupported. A malformed step or unsupported table fails only that session. See the [Antigravity CLI reading rules](docs/providers/antigravity-cli.md).
288
331
 
289
- OpenCode supports legacy SQLite and 2.x `session_v2/session_message`. When both schemas coexist, V2 wins for the same session ID; legacy-only sessions remain readable. V2 messages follow `seq` order, and counts include system and status records. Synthetic input, system/skill messages, compaction and shell records are excluded from collect. `OPENCODE_DB` selects a custom or channel database; a missing explicit path never falls back, and `:memory:` is unavailable. Attachments stay in JSON metadata without fetching referenced files. Running and archived records remain readable; pending inbox items are excluded. Raw export remains normalized `.raw.json`, not an OpenCode import file. See the [design and acceptance scope](docs/providers/opencode-v2.md).
332
+ OpenCode supports legacy SQLite and 2.x `session_v2/session_message`. When both schemas coexist, V2 wins for the same session ID. Until `migration.v1-v2` is completed, legacy sessions that OpenCode has not copied yet stay listed; after that only V2 is read, so sessions deleted in V2 do not come back. Sessions without visible messages are not listed, and message counts include only visible messages. An empty title falls back to the first user text, then `Untitled Session`. V2 messages follow `seq` order. Image attachments become image parts; other attachments, `@agent`/`@skill` mentions, errors and system, compaction or switch records become labelled text. Only invalid message JSON or a non-array assistant `content` fails a V2 session; other malformed fields are left empty. Input tokens include cache reads and writes, output tokens include reasoning, and legacy parent sessions add their descendants' usage. ZCode uses the legacy reader, skips `subagent_child` sessions and keeps plan and image parts. Synthetic input, system/skill messages, compaction and shell records are excluded from collect. `OPENCODE_DB` selects a custom or channel database; a missing explicit path never falls back, and `:memory:` is unavailable. Referenced attachment files are never opened. Running and archived records remain readable; pending inbox items are excluded. Raw export remains normalized `.raw.json`, not an OpenCode import file. See the [design and acceptance scope](docs/providers/opencode-v2.md).
290
333
 
291
334
  ## Command-line Arguments
292
335
 
@@ -541,7 +584,7 @@ agent-dump --interactive --time-field updated -d 7
541
584
 
542
585
  `--days` uses the Provider-reported `updated_at` by default, so it finds sessions with activity in the last N days, including sessions created much earlier. Add `--time-field created` to filter by creation time instead. This option is available only for list, search, browse and interactive modes; collect dates and statistics retain their existing meaning.
543
586
 
544
- Activity lists order by updated time before applying a result limit. Human lists and interactive selection retain Provider groups; dates and Today/Yesterday groups use the selected time field. Search still orders primarily by relevance. JSON records retain both original timestamps. Discovery may scan metadata outside the creation-time window to find old active sessions; filtering uses the existing Provider-projected `updated_at` fact without adding a separate file-modification-time filter. Provider coverage and partial-discovery diagnostics remain unchanged.
587
+ Activity lists order by updated time before applying a result limit. Human lists and interactive selection retain Provider groups; dates and Today/Yesterday groups use the selected time field. Search still orders primarily by relevance. JSON records retain both original timestamps. Discovery may scan metadata outside the creation-time window to find old active sessions. File-based Providers skip session files last modified before the window, so a file whose modification time is older than its recorded activity is not found by an activity window; filtering otherwise uses the Provider-projected `updated_at` fact. Provider coverage and partial-discovery diagnostics remain unchanged.
545
588
 
546
589
  ### Machine-readable output
547
590
 
@@ -589,7 +632,7 @@ Give an Agent this single command to obtain instructions and executable commands
589
632
  agent-dump codex://SESSION_ID --read-prompt
590
633
  ```
591
634
 
592
- `--read-prompt` works with every registered Provider, including Claude Code, OpenCode, ZCode, Kimi, Cursor, Pi, DeepChat, Cherry Studio and MiniMax Code. It validates the URI syntax without discovering sources, reading transcripts, calling a model or creating files. Generated commands use the running native executable's absolute path and require the original Provider path environment variables. Instructions follow `--lang en|zh`. Generating a prompt does not confirm that the session exists or has been read.
635
+ `--read-prompt` works with every registered Provider, including Claude Code, Qoder, Qoder CN, OpenCode, ZCode, Kimi, Kimi-Code, Cursor, Droid, Grok, Pi, oh-my-pi, Gemini CLI, DSH, DeepChat, Cherry Studio, MiniMax Code and Antigravity CLI. It validates the URI syntax without discovering sources, reading transcripts, calling a model or creating files. Generated commands use the running native executable's absolute path and require the original Provider path environment variables. Instructions follow `--lang en|zh`. Generating a prompt does not confirm that the session exists or has been read.
593
636
 
594
637
  Direct reading is also available:
595
638
 
@@ -47,13 +47,22 @@ Follow the generated read commands and cursors until `has_more=false` to cover t
47
47
  - **OpenCode** - Open source AI coding assistant
48
48
  - **ZCode** - ZCode coding assistant sessions
49
49
  - **Claude Code** - Anthropic's AI coding tool
50
+ - **Qoder** - Qoder CLI sessions
51
+ - **Qoder CN** - Qoder CN CLI sessions
50
52
  - **Codex** - OpenAI's command-line AI coding assistant
51
53
  - **Kimi** - Moonshot AI assistant
54
+ - **Kimi-Code** - Kimi Code CLI sessions
52
55
  - **Cursor** - Cursor composer sessions
56
+ - **Droid** - Factory Droid CLI sessions
57
+ - **Grok** - Grok CLI sessions
53
58
  - **Pi** - Earendil's AI coding agent
59
+ - **oh-my-pi** - Pi-based coding agent (`omp`)
60
+ - **Gemini CLI** - Google's command-line AI coding agent
61
+ - **DSH** - DeepSeek Harness sessions
54
62
  - **DeepChat** - Current local sessions from unencrypted databases
55
63
  - **Cherry Studio** - Local 2.x chats and agent sessions
56
64
  - **MiniMax Code** - Current CLI sessions from local SQLite storage
65
+ - **Antigravity CLI** - Conversation databases; tool results are not decoded
57
66
  - **More Tools** - PRs are welcome to support other AI coding tools
58
67
 
59
68
  ## Features
@@ -64,7 +73,7 @@ Follow the generated read commands and cursors until `has_more=false` to cover t
64
73
  - **Summarize conversations**: Collect all eligible user/assistant text through bounded chunks, or hand the task to an external Agent. Failures are marked as incomplete.
65
74
  - **Automate**: Query metadata, capabilities, search evidence, and statistics as JSON; unknown facts remain explicit.
66
75
 
67
- Available formats and message details depend on the source tool. Normalized output does not reproduce every private field or attachment file. Run `agent-dump --providers --json` to inspect capabilities.
76
+ Available formats and message details depend on the source tool. Normalized output does not reproduce every private field or attachment file. Except for MiniMax Code, transcripts drop `system-reminder` and slash-command wrapper tags (`command-*`, `local-command-*`), trim trailing whitespace, and omit messages left empty by that cleanup. Run `agent-dump --providers --json` to inspect capabilities.
68
77
 
69
78
  ## Installation
70
79
 
@@ -172,12 +181,21 @@ Supported URI schemes:
172
181
  - `codex://<session_id>` - Codex sessions
173
182
  - `codex://threads/<session_id>` - Codex sessions
174
183
  - `kimi://<session_id>` - Kimi sessions
184
+ - `kimi-code://<session_id>` - Kimi-Code sessions
175
185
  - `claude://<session_id>` - Claude Code sessions
176
- - `cursor://<requestid>` - Cursor sessions (`requestid` is used as URI identifier)
186
+ - `qoder://<session_id>` - Qoder sessions
187
+ - `qoder-cn://<session_id>` - Qoder CN sessions
188
+ - `cursor://<composer_id>` - Cursor sessions (legacy `cursor://<requestid>` URIs still resolve to the same session)
189
+ - `droid://<session_id>` - Droid sessions
190
+ - `grok://<session_id>` - Grok sessions
177
191
  - `pi://<session_id>` - Pi sessions
192
+ - `omp://<session_id>` - oh-my-pi sessions
193
+ - `gemini-cli://<session_id>` - Gemini CLI sessions
194
+ - `dsh://<session_id>` - DSH sessions
178
195
  - `deepchat://<session_id>` - DeepChat sessions
179
196
  - `cherry://topic-<id>` / `cherry://session-<id>` - Cherry Studio chats / agent sessions
180
197
  - `minimax://<session_id>` - MiniMax Code CLI sessions
198
+ - `antigravity-cli://<conversation_id>` - Antigravity CLI conversations
181
199
 
182
200
  ### Typical Errors
183
201
 
@@ -232,37 +250,62 @@ listed and fails when there is nothing to list because no provider has data.
232
250
 
233
251
  ## Path Discovery
234
252
 
235
- `agent-dump` resolves most session roots in this order: official environment variable, tool default directory, then local development fallback under `data/<agent>`. ZCode currently uses only its macOS/Windows default database path.
253
+ `agent-dump` resolves most session roots in this order: official environment variable, tool default directory, then local development fallback under `data/<agent>`. ZCode currently uses only its macOS/Windows default database path. Path environment variables are trimmed, blank values are ignored, and a leading `~` expands to the home directory.
236
254
 
237
255
  - **Codex**: `CODEX_HOME` -> `~/.codex` -> `data/codex`
238
256
  - **Claude Code**: `CLAUDE_CONFIG_DIR` -> `~/.claude` -> `data/claudecode`
257
+ - **Qoder**: `QODER_CONFIG_DIR` -> `~/.qoder` -> `data/qoder`
258
+ - **Qoder CN**: `QODERCN_CONFIG_DIR` -> `~/.qoder-cn` -> `data/qoder-cn`
239
259
  - **Kimi**: `KIMI_SHARE_DIR` -> `~/.kimi` -> `data/kimi`
260
+ - **Kimi-Code**: `KIMI_CODE_HOME` -> `~/.kimi-code` -> `data/kimi-code`. A session is a `sessions/<hash>/<id>/` directory with both `state.json` and `agents/main/wire.jsonl`; sessions without messages are skipped. The working directory comes from `workDir` or `custom.cwd` in `state.json`, then `session_index.jsonl` in the data root.
240
261
  - **OpenCode**: `OPENCODE_DB` selects one database (relative to `XDG_DATA_HOME/opencode` or `~/.local/share/opencode`). Otherwise use `opencode.db` there, then the legacy Windows `LOCALAPPDATA`/`APPDATA` location, then `data/opencode/opencode.db`.
262
+ - **Droid**: `FACTORY_HOME_OVERRIDE/.factory` -> `~/.factory` -> `data/droid`. A session is a `<id>.jsonl` file in `sessions/` or one folder below it whose first line is a `session_start` record; sessions without visible messages are skipped, and so are messages marked `llm_only`. The working directory comes from `lastCwd` or `cwd` in `session_start`. Token usage and the model come from the sibling `<id>.settings.json`; custom model ids map through `customModels` in the data root `settings.json`.
241
263
  - **ZCode**: macOS `~/.zcode/cli/db/db.sqlite`; Windows `%USERPROFILE%\.zcode\cli\db\db.sqlite`; no Linux default path
242
- - **Cursor**: Cursor's default user `globalStorage/state.vscdb`
243
- - **Pi**: `PI_HOME` -> `~/.pi` -> `data/pi`
264
+ - **Cursor**: `CURSOR_DATA_PATH/globalStorage/state.vscdb`; defaults to the `User` directory under macOS `~/Library/Application Support/Cursor`, Windows `%APPDATA%\Cursor`, or Linux `${XDG_CONFIG_HOME:-~/.config}/Cursor`. The working directory comes from the workspace folder in `workspaceStorage/*/workspace.json` that lists the composer.
265
+ - **Grok**: `GROK_HOME` -> `~/.grok` -> `data/grok`. Every `summary.json` under `sessions/`, at any depth, is a session when its `info` has both `id` and `cwd`; messages come from the sibling `updates.jsonl`, and sessions without messages are skipped. Prompts discarded by a rewind are left out of the transcript. See the [Grok reading rules](docs/providers/grok.md).
266
+ - **Pi**: `PI_CODING_AGENT_SESSION_DIR` -> absolute `sessionDir` in the agent directory's `settings.json` -> `<agent directory>/sessions` -> `data/pi`. The agent directory is `PI_CODING_AGENT_DIR`, then `PI_HOME/agent`, then `~/.pi/agent`.
267
+ - **oh-my-pi**: `XDG_DATA_HOME/omp/sessions` when `XDG_DATA_HOME/omp` exists (not on Windows) -> `~/.omp/agent/sessions` -> `data/omp`
268
+ - **Gemini CLI**: `GEMINI_CLI_HOME/.gemini/tmp` -> `~/.gemini/tmp` -> `data/gemini-cli`. `GEMINI_CLI_HOME` is the directory that contains `.gemini`, not the data directory itself.
269
+ - **DSH**: `DSH_HOME` -> `~/.dsh` -> `data/dsh`. Sessions are logs under `sessions/<project>/<session>/`; attachments are read from `attachments/v1` in the data root.
244
270
  - **DeepChat**: `DEEPCHAT_USER_DATA_DIR/app_db/agent.db`; defaults to macOS `~/Library/Application Support/DeepChat/app_db/agent.db`, Windows `%APPDATA%\DeepChat\app_db\agent.db`, or Linux `${XDG_CONFIG_HOME:-~/.config}/DeepChat/app_db/agent.db`.
245
- - **Cherry Studio**: `CHERRY_STUDIO_USER_DATA_DIR/Data/cherrystudio.sqlite`; otherwise the first existing database in the user data directories configured by `~/.cherrystudio/boot-config.json`, then the platform default: macOS `~/Library/Application Support/CherryStudio`, Windows `%APPDATA%\CherryStudio`, or Linux `${XDG_CONFIG_HOME:-~/.config}/CherryStudio` (each with `Data/cherrystudio.sqlite`). The override is provided by agent-dump; use it for portable/dev installations or to select among multiple installations.
246
- - **MiniMax Code**: `MINIMAX_DATA_DIR` → `MAVIS_DATA_DIR` → `~/.minimax`; the database is `v2/sqlite/runtime-state.sqlite` under the selected root. Only one root is selected; a missing explicit path never falls back to another installation.
271
+ - **Cherry Studio**: `CHERRYSTUDIO_USER_DATA_DIR` or `CHERRY_STUDIO_USER_DATA_DIR`, then `Data/cherrystudio.sqlite`; otherwise the first existing database in the user data directories configured by `~/.cherrystudio/boot-config.json`, then the platform default: macOS `~/Library/Application Support/CherryStudio`, Windows `%APPDATA%\CherryStudio`, or Linux `${XDG_CONFIG_HOME:-~/.config}/CherryStudio` (each with `Data/cherrystudio.sqlite`). Use the override for portable/dev installations or to select among multiple installations.
272
+ - **MiniMax Code**: `MINIMAX_DATA_DIR` → `MAVIS_DATA_DIR` → `~/.minimax`, or `~/.minimax-code` when only that directory has a database; the database is `v2/sqlite/runtime-state.sqlite` under the selected root. Only one root is selected; a missing explicit path never falls back to another installation.
273
+ - **Antigravity CLI**: `AGY_CONVERSATIONS_DIR` -> `~/.gemini/antigravity-cli/conversations` -> `data/antigravity-cli/conversations`. Each `<conversation_id>.db` below it is a session; the optional `conversation_summaries.db` in its parent directory supplies the title, working directory, and update time. Antigravity IDE `.gemini/antigravity/conversations/*.pb` files are not read.
247
274
 
248
275
  Notes:
249
276
 
250
277
  - On Windows, prefer configuring the tool's official environment variable when available.
251
278
  - The `data/<agent>` fallback is kept for local development and tests.
252
279
 
253
- DeepChat reads saved sessions in the current `agent.db`, including migrated history, ACP sessions, and subagent sessions; drafts are excluded. It supports listing, query, search, stats, collect, and print / JSON / Markdown exports. Structured messages take precedence over the `content` fallback. Text, reasoning, and tool records are normalized; compaction markers do not enter collect. JSON also retains attachment references, links, and other message blocks. Attachment files and offloaded tool output are not read. Token totals come from message records; billing cost is unavailable.
280
+ Codex scans `sessions` and `archived_sessions` and reads only `rollout-*.jsonl` and `rollout-*.jsonl.zst`; when both exist, the uncompressed file wins. Raw export of a compressed rollout writes the decompressed JSONL. Titles come from the title index, then the first line of the first user message in the first 20 records that is not injected context. Developer and system messages, and user messages that contain injected-context markers, are excluded. Token totals add each `token_count` delta once, include remote compaction and subagent usage, exclude history a fork replays from its parent, and record cache reads. Subagent rollouts are listed as separate sessions; when the parent never received a completion notification, the subagent's final reply is inserted into the parent. For uncompressed files over 256 KiB, listing reads only the head and tail, so the message count is unknown.
281
+
282
+ Claude Code lists `<project>/<session>.jsonl` files and the subagent transcripts under `<session>/subagents/`, including workflow agents in `subagents/workflows/<run>/agent-*.jsonl`. Each subagent is a separate session identified by its agent ID, and the parent message that starts it records `subagent_id`. Sessions without a visible message are skipped. Titles use the latest custom title, then the AI title, the subagent name or description, `sessions-index.json`, and the first line of the first user prompt within the first 20 records. Message counts include visible records only. Token totals keep the last usage of each API request and count cache reads and writes as input.
283
+
284
+ Qoder and Qoder CN keep the Claude Code project layout under `projects/` and follow the same rules; assistant messages are labeled `qoder` or `qoder-cn`.
285
+
286
+ Pi reads only the active branch: it follows `parentId` back from the last entry that has an id, so abandoned branches are excluded from exports, search, and counts. Legacy files without entry ids are read in file order. Tool results are merged into their tool calls with status and `details`; bash executions get a status from the exit code and cancellation flag. Only custom messages with `display: true` are kept. Tokens are recorded per message, and input includes cache reads and writes. Sessions without visible messages are not listed. Titles come from the `session_info` name, then a `title` record, the header `title`, and the first user message. For files over 256 KiB, listing reads only the head and tail, so the message count is unknown.
287
+
288
+ oh-my-pi follows the Pi rules; assistant messages are labeled `omp`. Subagent and advisor transcripts in the directory named after a session file are listed as separate sessions, identified by their header `id`, without a link to the parent session.
289
+
290
+ Gemini CLI lists `tmp/<project>/chats/*.jsonl` and legacy `*.json` chats, plus subagent chats in `chats/<parent session id>/`. A legacy `.json` chat that was resumed as `.jsonl` is read only from the `.jsonl` file. Files without a `sessionId` and sessions without messages are skipped. JSONL records are replayed in order, including `$set`, `$patch`, and `$rewindTo` updates. The working directory comes from `tmp/<project>/.project_root`. Titles use the chat `summary`, then the first user prompt that does not start with `<session_context>` or `<hook_context>`. User text prefers `displayContent`. Thought summaries become reasoning, and tool calls take results from the call record or a later `functionResponse`. Input tokens include cached and tool-use prompt tokens; output totals include thinking tokens. Subagent chats are listed as separate sessions without a link to the parent.
291
+
292
+ DSH reads one log per session directory: the newest `session.jsonl`, `session.v<N>.jsonl` or `.jsonl.zstd` file by format version, then modification time. A log counts only in the directories DSH derives from its own working directory and session ID. Logs with an invalid header or non-contiguous sequence numbers and sessions without messages are skipped. A record or zstd frame still being written at the end is ignored, and raw export of a compressed log writes the decompressed JSONL. A forked session excludes the events it inherited from its parent. A streamed step without a final message is rebuilt from its chunks. Tool results are merged into their tool calls with status and metadata. Images are read only when the attachment matches its recorded SHA-256 digest and size; a message whose images are all unavailable shows `Image attachment unavailable`. Titles come from the session title, then the subagent label, the first user message, an inherited title and the working directory name. Input tokens include cache reads and writes, and output tokens include reasoning. Billing cost is never estimated.
293
+
294
+ DeepChat reads saved sessions in the current `agent.db`, including migrated history, ACP sessions, and subagent sessions; drafts, sessions without messages, and sessions whose parent chain forms a loop are excluded. The update time is the latest of the session, message, block, and usage records. It supports listing, query, search, stats, collect, and print / JSON / Markdown exports. Structured messages take precedence over the `content` fallback, and plain-text `content` becomes message text. Text, reasoning, plan, image, and tool records are normalized; other blocks with text become message text, and compaction markers do not enter collect. Referenced sessions, attachment paths, and links become message text, so search finds them; JSON also keeps the attachment and link records. Attachment files and offloaded tool output are not read. Token totals come from `deepchat_usage_stats`, falling back to message metadata, with cached tokens capped at the input count; billing cost is unavailable.
254
295
 
255
296
  SQLCipher databases, direct reads of legacy `chat.db`, and raw export are unsupported. The reader does not run DeepChat migrations or Tape recovery. Set `DEEPCHAT_USER_DATA_DIR` to read a custom user data directory.
256
297
 
257
- Cherry Studio supports listing, query, search, stats, collect, and print / JSON / Markdown exports from its current 2.x database, including migrated history. Ordinary chats expose only the active root-to-leaf path; other branches and parallel model replies are excluded from exports, search, and counts. Structural roots and empty reserved user leaves are excluded. Agent sessions are read chronologically and use their workspace as the working directory; ordinary chats have no working directory. Deleted sessions and chat messages are excluded.
298
+ Cherry Studio supports listing, query, search, stats, collect, and print / JSON / Markdown exports from its current 2.x database, including migrated history. Ordinary chats expose only the active root-to-leaf path; other branches and parallel model replies are excluded from exports, search, and counts. Structural roots, records that are neither user nor assistant messages, and messages with neither content nor usage are excluded; sessions left without messages are not listed. Agent sessions are read chronologically and use their workspace as the working directory; ordinary chats have no working directory. Deleted sessions and messages are excluded. File parts become images or `Attachment:` text, and compact summaries become message text. Missing token totals are summed from their details, reasoning tokens are recorded, and recorded USD costs count toward the cost. An unnamed session takes its title from the first user message, then `Cherry Studio`; the update time is the session's last activity.
258
299
 
259
300
  Text, reasoning, tool calls/results, code, and translations are normalized. JSON retains file references and control events; compaction summaries and internal events do not enter collect or search. Token totals come from message stats. Per-currency costs are preserved in JSON without conversion or an aggregate billing total. The reader never opens attachment files, scans SDK logs, or runs application migrations. Direct reads of 1.x IndexedDB/Redux data and raw export are unsupported.
260
301
 
261
- MiniMax Code supports listing, query, search, stats, collect, and print / JSON / Markdown exports from the current CLI's migrated display messages. Visible conversations, child tasks, and archived sessions are included; hidden and internal peek/channel/cron sessions are excluded. Messages follow database row order and preserve text, reasoning, tool state/results, and attachment references. Compaction, review, and system events do not enter collect or search. The model comes from session metadata and remains unknown when absent; JSON retains recorded per-message token usage without estimating billing cost.
302
+ MiniMax Code supports listing, query, search, stats, collect, and print / JSON / Markdown exports from the current CLI's migrated display messages. Sessions without message rows, hidden root sessions, and internal peek/channel/cron sessions are excluded; hidden child sessions and archived sessions are kept. Untitled sessions use the first non-automated user message, and the update time includes message and token-usage times. Messages follow database row order and preserve text, reasoning, tool state/results, and attachment references; attachments and message errors also become text. Compaction and review events keep their user/assistant role with a label such as `Context compacted`, so they enter search and collect; system events and permission responses do not. A tool fails when its result reports `isError` or `error`, and a task tool's single child session becomes `subagent_id`. The session model comes from session metadata and remains unknown when absent. Token usage comes from `local_runtime_token_usage`: session stats count every row, and a turn with one model attaches its model, tokens (including reasoning), and recorded USD cost to the turn's last assistant message. Billing cost is never estimated.
303
+
304
+ Set `MINIMAX_DATA_DIR` explicitly for custom profiles or other directories. The reader does not read model-context JSONL or attachment files, run migrations, or recover rewound messages. Raw export, direct legacy storage reads, and desktop data are unsupported. Pending migrations and corrupt sessions produce diagnostics instead of appearing empty. See the [MiniMax Code design and acceptance scope](docs/providers/minimax.md).
262
305
 
263
- Set `MINIMAX_DATA_DIR` explicitly for custom profiles, earlier source builds using `~/.minimax-code`, or other directories. The reader does not read model-context JSONL or attachment files, run migrations, or recover rewound messages. Raw export, direct legacy storage reads, and desktop data are unsupported. Pending migrations and corrupt sessions produce diagnostics instead of appearing empty. See the [MiniMax Code design and acceptance scope](docs/providers/minimax.md).
306
+ Antigravity CLI supports listing, query, search, stats, collect, and print / JSON / Markdown exports. Databases are opened read-only, and only the Protobuf fields for user prompts, assistant text, title updates, tool calls, step times, and token usage are decoded. Tool results are not stored in a known format, so tool calls have status `unknown` and keep the native step type and status in metadata; other unrecognized steps are skipped. Databases without steps are not listed. Titles come from the latest title step, the summary title, then the first user prompt. Steps without a native time use the summary update time or the database modification time and are marked as inferred, so collect does not date them. Usage repeated across retries is counted once and attached to the next assistant message; usage after the last step becomes a usage-only assistant message. Input includes cache tokens and session output includes reasoning; cost is not estimated. Raw export is unsupported. A malformed step or unsupported table fails only that session. See the [Antigravity CLI reading rules](docs/providers/antigravity-cli.md).
264
307
 
265
- OpenCode supports legacy SQLite and 2.x `session_v2/session_message`. When both schemas coexist, V2 wins for the same session ID; legacy-only sessions remain readable. V2 messages follow `seq` order, and counts include system and status records. Synthetic input, system/skill messages, compaction and shell records are excluded from collect. `OPENCODE_DB` selects a custom or channel database; a missing explicit path never falls back, and `:memory:` is unavailable. Attachments stay in JSON metadata without fetching referenced files. Running and archived records remain readable; pending inbox items are excluded. Raw export remains normalized `.raw.json`, not an OpenCode import file. See the [design and acceptance scope](docs/providers/opencode-v2.md).
308
+ OpenCode supports legacy SQLite and 2.x `session_v2/session_message`. When both schemas coexist, V2 wins for the same session ID. Until `migration.v1-v2` is completed, legacy sessions that OpenCode has not copied yet stay listed; after that only V2 is read, so sessions deleted in V2 do not come back. Sessions without visible messages are not listed, and message counts include only visible messages. An empty title falls back to the first user text, then `Untitled Session`. V2 messages follow `seq` order. Image attachments become image parts; other attachments, `@agent`/`@skill` mentions, errors and system, compaction or switch records become labelled text. Only invalid message JSON or a non-array assistant `content` fails a V2 session; other malformed fields are left empty. Input tokens include cache reads and writes, output tokens include reasoning, and legacy parent sessions add their descendants' usage. ZCode uses the legacy reader, skips `subagent_child` sessions and keeps plan and image parts. Synthetic input, system/skill messages, compaction and shell records are excluded from collect. `OPENCODE_DB` selects a custom or channel database; a missing explicit path never falls back, and `:memory:` is unavailable. Referenced attachment files are never opened. Running and archived records remain readable; pending inbox items are excluded. Raw export remains normalized `.raw.json`, not an OpenCode import file. See the [design and acceptance scope](docs/providers/opencode-v2.md).
266
309
 
267
310
  ## Command-line Arguments
268
311
 
@@ -517,7 +560,7 @@ agent-dump --interactive --time-field updated -d 7
517
560
 
518
561
  `--days` uses the Provider-reported `updated_at` by default, so it finds sessions with activity in the last N days, including sessions created much earlier. Add `--time-field created` to filter by creation time instead. This option is available only for list, search, browse and interactive modes; collect dates and statistics retain their existing meaning.
519
562
 
520
- Activity lists order by updated time before applying a result limit. Human lists and interactive selection retain Provider groups; dates and Today/Yesterday groups use the selected time field. Search still orders primarily by relevance. JSON records retain both original timestamps. Discovery may scan metadata outside the creation-time window to find old active sessions; filtering uses the existing Provider-projected `updated_at` fact without adding a separate file-modification-time filter. Provider coverage and partial-discovery diagnostics remain unchanged.
563
+ Activity lists order by updated time before applying a result limit. Human lists and interactive selection retain Provider groups; dates and Today/Yesterday groups use the selected time field. Search still orders primarily by relevance. JSON records retain both original timestamps. Discovery may scan metadata outside the creation-time window to find old active sessions. File-based Providers skip session files last modified before the window, so a file whose modification time is older than its recorded activity is not found by an activity window; filtering otherwise uses the Provider-projected `updated_at` fact. Provider coverage and partial-discovery diagnostics remain unchanged.
521
564
 
522
565
  ### Machine-readable output
523
566
 
@@ -565,7 +608,7 @@ Give an Agent this single command to obtain instructions and executable commands
565
608
  agent-dump codex://SESSION_ID --read-prompt
566
609
  ```
567
610
 
568
- `--read-prompt` works with every registered Provider, including Claude Code, OpenCode, ZCode, Kimi, Cursor, Pi, DeepChat, Cherry Studio and MiniMax Code. It validates the URI syntax without discovering sources, reading transcripts, calling a model or creating files. Generated commands use the running native executable's absolute path and require the original Provider path environment variables. Instructions follow `--lang en|zh`. Generating a prompt does not confirm that the session exists or has been read.
611
+ `--read-prompt` works with every registered Provider, including Claude Code, Qoder, Qoder CN, OpenCode, ZCode, Kimi, Kimi-Code, Cursor, Droid, Grok, Pi, oh-my-pi, Gemini CLI, DSH, DeepChat, Cherry Studio, MiniMax Code and Antigravity CLI. It validates the URI syntax without discovering sources, reading transcripts, calling a model or creating files. Generated commands use the running native executable's absolute path and require the original Provider path environment variables. Instructions follow `--lang en|zh`. Generating a prompt does not confirm that the session exists or has been read.
569
612
 
570
613
  Direct reading is also available:
571
614
 
@@ -21,6 +21,8 @@ sha2.workspace = true
21
21
  tempfile.workspace = true
22
22
  walkdir.workspace = true
23
23
  rusqlite.workspace = true
24
+ # Codex compresses archived rollouts as `.jsonl.zst`; pure Rust keeps builds free of C toolchains.
25
+ ruzstd = { version = "0.9.0", default-features = false, features = ["std"] }
24
26
  num-bigint.workspace = true
25
27
  toml_edit.workspace = true
26
28
  url.workspace = true
@@ -16,12 +16,12 @@ pub fn record_warning(diagnostic: &RecoverableDiagnostic, zh: bool) -> String {
16
16
  format!("⚠️ Failed to convert message format: {error}")
17
17
  }
18
18
  }
19
- RecoverableDiagnostic::PiRecordConvertFailed(error) => {
19
+ RecoverableDiagnostic::PiRecordConvertFailed { provider, error } => {
20
20
  let error = safe_line(error);
21
21
  if zh {
22
- format!("警告: 转换 Pi 记录失败: {error}")
22
+ format!("警告: 转换 {provider} 记录失败: {error}")
23
23
  } else {
24
- format!("⚠️ Failed to convert Pi record: {error}")
24
+ format!("⚠️ Failed to convert {provider} record: {error}")
25
25
  }
26
26
  }
27
27
  RecoverableDiagnostic::TitleCacheFailed(error) => {
@@ -146,7 +146,15 @@ pub fn raw(
146
146
  output: &Path,
147
147
  ) -> crate::Result<PathBuf> {
148
148
  write(output, session_id, ".raw.jsonl", |file| {
149
- io::copy(&mut fs::File::open(source)?, file)?;
149
+ if !crate::storage::zstd::compressed(source) {
150
+ io::copy(&mut fs::File::open(source)?, file)?;
151
+ return Ok(());
152
+ }
153
+ let (frames, _) = crate::storage::zstd::frames(&fs::read(source)?)
154
+ .map_err(|error| format!("{}: {error}", source.display()))?;
155
+ for frame in frames {
156
+ file.write_all(&frame)?;
157
+ }
150
158
  Ok(())
151
159
  })
152
160
  }