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.
- {agent_dump-1.2.4 → agent_dump-1.2.5}/Cargo.lock +8 -1
- {agent_dump-1.2.4 → agent_dump-1.2.5}/Cargo.toml +1 -1
- {agent_dump-1.2.4 → agent_dump-1.2.5}/PKG-INFO +58 -15
- {agent_dump-1.2.4 → agent_dump-1.2.5}/README.md +57 -14
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/Cargo.toml +2 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/diagnostics.rs +3 -3
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/export.rs +9 -1
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/antigravity_cli/mod.rs +294 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/antigravity_cli/proto.rs +453 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/antigravity_cli/tests.rs +295 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/antigravity_cli/transcript.rs +280 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/claude/mod.rs +740 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/claude/transcript.rs +166 -113
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/children.rs +193 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/codex/enrichment.rs +37 -16
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/exec.rs +465 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/mod.rs +1197 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/rollout.rs +115 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/transcript.rs +566 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/codex/usage.rs +134 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/contract.rs +32 -2
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/cursor/mod.rs +166 -239
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/cursor/transcript.rs +427 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/cursor/workspace.rs +110 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/desktop/cherry.rs +223 -58
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/desktop/deepchat.rs +469 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/desktop/minimax.rs +528 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/desktop/mod.rs +11 -8
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/desktop/tests.rs +810 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/droid/mod.rs +343 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/dsh/log.rs +198 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/dsh/mod.rs +285 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/dsh/transcript.rs +742 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/files.rs +142 -25
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/gemini_cli/chat.rs +551 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/gemini_cli/mod.rs +220 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/grok/mod.rs +243 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/grok/transcript.rs +716 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/kimi/mod.rs +207 -63
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/kimi/transcript.rs +22 -14
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/kimi/wire.rs +88 -13
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/kimi_code/mod.rs +315 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/kimi_code/wire.rs +429 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/mod.rs +7 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/pi/mod.rs +556 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/pi/transcript.rs +232 -72
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/registry.rs +117 -3
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/source_tests.rs +9 -5
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/sqlite/connection.rs +28 -3
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/sqlite/legacy.rs +499 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/sqlite/mod.rs +478 -74
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/sqlite/v2.rs +535 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/providers/text.rs +193 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/index/tests.rs +2 -2
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/index.rs +45 -15
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/scanner.rs +14 -15
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/cache/tests.rs +59 -7
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/cache.rs +50 -15
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/storage/mod.rs +1 -0
- agent_dump-1.2.5/crates/agent-dump-core/src/storage/zstd.rs +49 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/locales/en.json +1 -1
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/locales/zh.json +1 -1
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/claude/mod.rs +0 -414
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/codex/mod.rs +0 -469
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/codex/transcript.rs +0 -371
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/cursor/transcript.rs +0 -577
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/desktop/deepchat.rs +0 -290
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/desktop/minimax.rs +0 -333
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/desktop/tests.rs +0 -443
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/pi/mod.rs +0 -282
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/sqlite/legacy.rs +0 -137
- agent_dump-1.2.4/crates/agent-dump-core/src/providers/sqlite/v2.rs +0 -227
- {agent_dump-1.2.4 → agent_dump-1.2.5}/LICENSE +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/json/diagnostic.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/json/encoding.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/json.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/mod.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/compat/value.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/config.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/lib.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/formats.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/i18n.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/mod.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/output/render.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/parallel.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/codex/patch.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/error.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/jsonl.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/providers/title.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/context.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/filter.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/mod.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/read.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/text.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/query/transcript.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/assembly.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/mod.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/session/timestamp.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/storage/private_files.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/crates/agent-dump-core/src/storage/source_io.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/pyproject.toml +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/.gitattributes +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/README.md +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-chunk.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-handoff.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-merge.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-report.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/insight-retry.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-chunk.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-handoff.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-merge.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-report.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/pm-retry.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/read-session-en.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/read-session-zh.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/system.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/resources/prompts/uri.txt +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/rust-toolchain.toml +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/rustfmt.toml +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/cli_args.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/events.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/handoff.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/llm.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/log.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/mod.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/model.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/progress.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/prompts.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/reduction.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/sessions.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/collect/summary.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/command.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/date_input.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/main.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/shortcut.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/terminal/mod.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/terminal/reader.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/terminal/selector.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/terminal/tui.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/collect.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/config.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/interactive.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/list.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/machine.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/maintenance.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/mod.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/read.rs +0 -0
- {agent_dump-1.2.4 → agent_dump-1.2.5}/src/workflows/reader.rs +0 -0
- {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.
|
|
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"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agent-dump
|
|
3
|
-
Version: 1.2.
|
|
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
|
-
- `
|
|
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**:
|
|
267
|
-
- **
|
|
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
|
|
270
|
-
- **MiniMax Code**: `MINIMAX_DATA_DIR` → `MAVIS_DATA_DIR` → `~/.minimax
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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;
|
|
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
|
|
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
|
|
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
|
-
- `
|
|
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**:
|
|
243
|
-
- **
|
|
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
|
|
246
|
-
- **MiniMax Code**: `MINIMAX_DATA_DIR` → `MAVIS_DATA_DIR` → `~/.minimax
|
|
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
|
-
|
|
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
|
|
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.
|
|
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
|
-
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
19
|
+
RecoverableDiagnostic::PiRecordConvertFailed { provider, error } => {
|
|
20
20
|
let error = safe_line(error);
|
|
21
21
|
if zh {
|
|
22
|
-
format!("警告: 转换
|
|
22
|
+
format!("警告: 转换 {provider} 记录失败: {error}")
|
|
23
23
|
} else {
|
|
24
|
-
format!("⚠️ Failed to convert
|
|
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
|
-
|
|
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
|
}
|