agent-dump 1.2.6__tar.gz → 1.2.7__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 (140) hide show
  1. {agent_dump-1.2.6 → agent_dump-1.2.7}/Cargo.lock +17 -17
  2. {agent_dump-1.2.6 → agent_dump-1.2.7}/Cargo.toml +2 -2
  3. {agent_dump-1.2.6 → agent_dump-1.2.7}/PKG-INFO +13 -11
  4. {agent_dump-1.2.6 → agent_dump-1.2.7}/README.md +12 -10
  5. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/sqlite/connection.rs +1 -5
  6. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/query/filter.rs +86 -66
  7. {agent_dump-1.2.6 → agent_dump-1.2.7}/pyproject.toml +1 -1
  8. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/README.md +2 -2
  9. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/mod.rs +1 -0
  10. agent_dump-1.2.7/src/collect/pool.rs +38 -0
  11. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/reduction.rs +222 -149
  12. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/workflows/collect.rs +20 -6
  13. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/workflows/list.rs +46 -30
  14. {agent_dump-1.2.6 → agent_dump-1.2.7}/LICENSE +0 -0
  15. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/Cargo.toml +0 -0
  16. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/compat/json/diagnostic.rs +0 -0
  17. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/compat/json/encoding.rs +0 -0
  18. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/compat/json/mod.rs +0 -0
  19. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/compat/mod.rs +0 -0
  20. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/compat/value.rs +0 -0
  21. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/config.rs +0 -0
  22. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/lib.rs +0 -0
  23. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/output/diagnostics.rs +0 -0
  24. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/output/export.rs +0 -0
  25. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/output/formats.rs +0 -0
  26. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/output/i18n.rs +0 -0
  27. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/output/mod.rs +0 -0
  28. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/output/render.rs +0 -0
  29. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/parallel.rs +0 -0
  30. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/antigravity_cli/mod.rs +0 -0
  31. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/antigravity_cli/proto.rs +0 -0
  32. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/antigravity_cli/tests.rs +0 -0
  33. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/antigravity_cli/transcript.rs +0 -0
  34. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/claude/mod.rs +0 -0
  35. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/claude/transcript.rs +0 -0
  36. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/codex/children.rs +0 -0
  37. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/codex/enrichment.rs +0 -0
  38. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/codex/exec.rs +0 -0
  39. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/codex/mod.rs +0 -0
  40. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/codex/patch.rs +0 -0
  41. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/codex/rollout.rs +0 -0
  42. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/codex/transcript.rs +0 -0
  43. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/codex/usage.rs +0 -0
  44. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/contract.rs +0 -0
  45. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/cursor/mod.rs +0 -0
  46. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/cursor/transcript.rs +0 -0
  47. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/cursor/workspace.rs +0 -0
  48. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/desktop/cherry.rs +0 -0
  49. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/desktop/deepchat.rs +0 -0
  50. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/desktop/minimax.rs +0 -0
  51. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/desktop/mod.rs +0 -0
  52. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/desktop/tests.rs +0 -0
  53. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/droid/mod.rs +0 -0
  54. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/dsh/log.rs +0 -0
  55. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/dsh/mod.rs +0 -0
  56. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/dsh/transcript.rs +0 -0
  57. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/error.rs +0 -0
  58. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/files.rs +0 -0
  59. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/gemini_cli/chat.rs +0 -0
  60. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/gemini_cli/mod.rs +0 -0
  61. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/grok/mod.rs +0 -0
  62. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/grok/transcript.rs +0 -0
  63. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/jsonl.rs +0 -0
  64. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/kimi/mod.rs +0 -0
  65. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/kimi/transcript.rs +0 -0
  66. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/kimi/wire.rs +0 -0
  67. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/kimi_code/mod.rs +0 -0
  68. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/kimi_code/wire.rs +0 -0
  69. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/mod.rs +0 -0
  70. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/pi/mod.rs +0 -0
  71. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/pi/transcript.rs +0 -0
  72. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/registry.rs +0 -0
  73. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/sqlite/legacy.rs +0 -0
  74. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/sqlite/mod.rs +0 -0
  75. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/sqlite/v2.rs +0 -0
  76. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/tests.rs +0 -0
  77. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/text.rs +0 -0
  78. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/providers/title.rs +0 -0
  79. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/query/context.rs +0 -0
  80. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/query/index/mod.rs +0 -0
  81. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/query/index/tests.rs +0 -0
  82. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/query/mod.rs +0 -0
  83. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/query/read.rs +0 -0
  84. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/query/scanner.rs +0 -0
  85. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/query/text.rs +0 -0
  86. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/query/transcript.rs +0 -0
  87. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/session/assembly.rs +0 -0
  88. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/session/cache/mod.rs +0 -0
  89. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/session/cache/tests.rs +0 -0
  90. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/session/mod.rs +0 -0
  91. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/session/timestamp.rs +0 -0
  92. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/storage/mod.rs +0 -0
  93. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/storage/private_files.rs +0 -0
  94. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/storage/source_io.rs +0 -0
  95. {agent_dump-1.2.6 → agent_dump-1.2.7}/crates/agent-dump-core/src/storage/zstd.rs +0 -0
  96. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/locales/en.json +0 -0
  97. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/locales/zh.json +0 -0
  98. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/.gitattributes +0 -0
  99. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/insight-chunk.txt +0 -0
  100. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/insight-handoff.txt +0 -0
  101. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/insight-merge.txt +0 -0
  102. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/insight-report.txt +0 -0
  103. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/insight-retry.txt +0 -0
  104. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/pm-chunk.txt +0 -0
  105. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/pm-handoff.txt +0 -0
  106. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/pm-merge.txt +0 -0
  107. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/pm-report.txt +0 -0
  108. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/pm-retry.txt +0 -0
  109. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/read-session-en.txt +0 -0
  110. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/read-session-zh.txt +0 -0
  111. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/system.txt +0 -0
  112. {agent_dump-1.2.6 → agent_dump-1.2.7}/resources/prompts/uri.txt +0 -0
  113. {agent_dump-1.2.6 → agent_dump-1.2.7}/rust-toolchain.toml +0 -0
  114. {agent_dump-1.2.6 → agent_dump-1.2.7}/rustfmt.toml +0 -0
  115. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/cli_args.rs +0 -0
  116. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/events.rs +0 -0
  117. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/handoff.rs +0 -0
  118. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/llm.rs +0 -0
  119. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/log.rs +0 -0
  120. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/model.rs +0 -0
  121. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/progress.rs +0 -0
  122. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/prompts/mod.rs +0 -0
  123. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/sessions.rs +0 -0
  124. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/collect/summary.rs +0 -0
  125. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/command.rs +0 -0
  126. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/date_input.rs +0 -0
  127. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/main.rs +0 -0
  128. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/shortcut.rs +0 -0
  129. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/terminal/mod.rs +0 -0
  130. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/terminal/reader.rs +0 -0
  131. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/terminal/selector.rs +0 -0
  132. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/terminal/tui.rs +0 -0
  133. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/workflows/browse.rs +0 -0
  134. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/workflows/config.rs +0 -0
  135. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/workflows/interactive.rs +0 -0
  136. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/workflows/machine.rs +0 -0
  137. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/workflows/maintenance.rs +0 -0
  138. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/workflows/mod.rs +0 -0
  139. {agent_dump-1.2.6 → agent_dump-1.2.7}/src/workflows/read.rs +0 -0
  140. {agent_dump-1.2.6 → agent_dump-1.2.7}/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.6"
13
+ version = "1.2.7"
14
14
  dependencies = [
15
15
  "agent-dump-core",
16
16
  "caseless",
@@ -926,9 +926,9 @@ checksum = "b6d2cec3eae94f9f509c767b45932f1ada8350c4bdb85af2fcab4a3c14807981"
926
926
 
927
927
  [[package]]
928
928
  name = "libsqlite3-sys"
929
- version = "0.38.2"
929
+ version = "0.39.1"
930
930
  source = "registry+https://github.com/rust-lang/crates.io-index"
931
- checksum = "f1d20bef17f513b9b3004532233187769cd072d790971f4e4da0e346eb6401e8"
931
+ checksum = "14a5f01b87b92705d07b433c06f96cbc764637d81a0bffb5734ce17cf0f9a2b3"
932
932
  dependencies = [
933
933
  "cc",
934
934
  "pkg-config",
@@ -1339,9 +1339,9 @@ dependencies = [
1339
1339
 
1340
1340
  [[package]]
1341
1341
  name = "rusqlite"
1342
- version = "0.40.2"
1342
+ version = "0.41.1"
1343
1343
  source = "registry+https://github.com/rust-lang/crates.io-index"
1344
- checksum = "23f2a97da3e3873c73cb2a2e71b35c40ff95e0b1eefa8d72d8499a6928c3b5b3"
1344
+ checksum = "da9bba6f3506135e120a6586df05be18b48d18896600646a4bec8f993d91a594"
1345
1345
  dependencies = [
1346
1346
  "bitflags 2.13.2",
1347
1347
  "fallible-iterator",
@@ -1374,9 +1374,9 @@ dependencies = [
1374
1374
 
1375
1375
  [[package]]
1376
1376
  name = "rustls"
1377
- version = "0.23.45"
1377
+ version = "0.23.46"
1378
1378
  source = "registry+https://github.com/rust-lang/crates.io-index"
1379
- checksum = "0d41d731c7d2f962d1ccc364cec258de3c0e93b38c2fb3ba97ac74513048d634"
1379
+ checksum = "48e13bd8c0e9365c43cfa5c9e8f9ad49d3c8444926c9aac819e0e4dc503c8fdf"
1380
1380
  dependencies = [
1381
1381
  "log",
1382
1382
  "once_cell",
@@ -1767,9 +1767,9 @@ checksum = "d245f478577f809a851594d02313b640fb437e0bb33866753cff937863096954"
1767
1767
 
1768
1768
  [[package]]
1769
1769
  name = "unicode-normalization"
1770
- version = "0.1.25"
1770
+ version = "0.1.26"
1771
1771
  source = "registry+https://github.com/rust-lang/crates.io-index"
1772
- checksum = "5fd4f6878c9cb28d874b009da9e8d183b5abc80117c40bbd187a1fde336be6e8"
1772
+ checksum = "75cd3fb03d5288b3ba9a1ee103ac7e9cbb59f0b03d64f8ddfcc04dd42758a85d"
1773
1773
  dependencies = [
1774
1774
  "tinyvec",
1775
1775
  ]
@@ -1793,9 +1793,9 @@ dependencies = [
1793
1793
 
1794
1794
  [[package]]
1795
1795
  name = "unicode-width"
1796
- version = "0.2.2"
1796
+ version = "0.2.3"
1797
1797
  source = "registry+https://github.com/rust-lang/crates.io-index"
1798
- checksum = "b4ac048d71ede7ee76d585517add45da530660ef4390e49b098733c6e897f254"
1798
+ checksum = "ca718471876992059f251e33aafc334346ada08042b7661dd1fe313a9bced557"
1799
1799
 
1800
1800
  [[package]]
1801
1801
  name = "untrusted"
@@ -1805,9 +1805,9 @@ checksum = "8ecb6da28b8a351d773b68d5825ac39017e680750f980f3a1a85cd8dd28a47c1"
1805
1805
 
1806
1806
  [[package]]
1807
1807
  name = "ureq"
1808
- version = "3.4.2"
1808
+ version = "3.5.0"
1809
1809
  source = "registry+https://github.com/rust-lang/crates.io-index"
1810
- checksum = "9a7ac20be9b7726e0bbdbf974c059676d9acb1cd414961f570a4e8231cacd7fc"
1810
+ checksum = "cde93ff05758a36a851a398a772b0b79a82fbe3c186a46f2696baaeaf84c966b"
1811
1811
  dependencies = [
1812
1812
  "base64 0.23.1",
1813
1813
  "cookie_store",
@@ -1825,9 +1825,9 @@ dependencies = [
1825
1825
 
1826
1826
  [[package]]
1827
1827
  name = "ureq-proto"
1828
- version = "0.6.4"
1828
+ version = "0.6.5"
1829
1829
  source = "registry+https://github.com/rust-lang/crates.io-index"
1830
- checksum = "f86fd172ccca569e458f61b6bdd6220965a9ef36e672a6852953b51a0e1583be"
1830
+ checksum = "841583fc36089d7d59419568ae157f43a5a03a2e5a81ba87c77d1596ef46e922"
1831
1831
  dependencies = [
1832
1832
  "base64 0.23.1",
1833
1833
  "http",
@@ -1867,9 +1867,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
1867
1867
 
1868
1868
  [[package]]
1869
1869
  name = "uuid"
1870
- version = "1.28.0"
1870
+ version = "1.29.0"
1871
1871
  source = "registry+https://github.com/rust-lang/crates.io-index"
1872
- checksum = "7cc1186384beb7dd8eedea376413fd654937285ea6c9cfbb928dc3043ea4b606"
1872
+ checksum = "4a0e2d11620c50695fe12bbbfde96b3477fe606e7284c22d505c12ce51214514"
1873
1873
  dependencies = [
1874
1874
  "getrandom 0.4.3",
1875
1875
  "js-sys",
@@ -32,7 +32,7 @@ regex = "1"
32
32
  sha2 = "0.11"
33
33
  tempfile = "3"
34
34
  walkdir = "2"
35
- rusqlite = { version = "0.40", default-features = false, features = ["bundled"] }
35
+ rusqlite = { version = "0.41", default-features = false, features = ["bundled"] }
36
36
  num-bigint = "0.5"
37
37
  toml_edit = "0.25"
38
38
  ureq = { version = "3", features = ["json"] }
@@ -47,7 +47,7 @@ nix = { version = "0.31", default-features = false, features = ["fs", "user"] }
47
47
 
48
48
  [package]
49
49
  name = "agent-dump"
50
- version = "1.2.6"
50
+ version = "1.2.7"
51
51
  edition = "2024"
52
52
  rust-version = "1.90"
53
53
  publish = false
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agent-dump
3
- Version: 1.2.6
3
+ Version: 1.2.7
4
4
  Classifier: Environment :: Console
5
5
  Classifier: License :: OSI Approved :: MIT License
6
6
  Classifier: Programming Language :: Rust
@@ -261,16 +261,14 @@ Next steps:
261
261
 
262
262
  ### Exit Codes
263
263
 
264
- Explicit provider scopes (`provider:`, legacy provider prefixes, or `providers=` in query URIs) are applied before discovery. Unselected providers are not scanned. An empty explicit scope result keeps the mode’s no-match behavior, without probing unrelated providers.
265
-
266
264
  | Code | Meaning |
267
265
  |------|---------|
268
266
  | `0` | The command did what was asked — including when the result set is legitimately empty (no sessions in the `--days` window, a keyword or `--search` that matched nothing), and when interactive export partially succeeds. |
269
267
  | `1` | The command could not do what was asked: no provider data exists on this machine, a URI did not resolve to a session, every requested interactive export failed, or an argument combination is invalid. |
270
- | `2` | Argument usage error, raised by `argparse` (unknown flag, invalid `--format` value). |
268
+ | `2` | Argument usage error rejected by the argument parser (unknown flag, invalid `--format` value). |
271
269
 
272
- This makes `agent-dump --list && ...` meaningful: it succeeds when sessions were
273
- listed and fails when there is nothing to list because no provider has data.
270
+ `agent-dump --list && ...` continues after an empty listing and stops only when no
271
+ provider has data on this machine.
274
272
 
275
273
  ## Path Discovery
276
274
 
@@ -327,7 +325,7 @@ MiniMax Code supports listing, query, search, stats, collect, and print / JSON /
327
325
 
328
326
  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).
329
327
 
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).
328
+ 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 excludes 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).
331
329
 
332
330
  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).
333
331
 
@@ -381,9 +379,11 @@ agent-dump --config view
381
379
  agent-dump --config edit
382
380
  ```
383
381
 
384
- `--query` uses the same matching as `--search`: whitespace-separated literal terms must all occur, anywhere in the title or transcript. Structured keys (`provider`, `role`, `path`, `limit`) activate structured parsing; quote values containing spaces. `role` restricts matching to those messages, and `limit` applies to the final global results. `error:timeout` remains a plain term. Lists print all matches; interactive Provider counts reflect the filtered results.
382
+ `--query` uses the same matching as `--search`: whitespace-separated literal terms must all occur, anywhere in the title or transcript. Structured keys (`provider`, `role`, `path`, `limit`) activate structured parsing; quote values containing spaces. `role` restricts matching to those messages, and `limit` applies to the final global results. Without a structured key, `error:timeout` is a plain term; once the query contains one, any other `key:value` token is rejected. Lists print all matches; interactive Provider counts reflect the filtered results.
383
+
384
+ Explicit provider scopes (`provider:`, legacy provider prefixes, or `providers=` in query URIs) are applied before discovery. Unselected providers are not scanned. An empty explicit scope result keeps the mode's no-match behavior, without probing unrelated providers.
385
385
 
386
- Collect uses explicit `--since`/`--until` first, then explicit `--days`, otherwise today. `--save` accepts a directory or a `.md` file, with absolute or relative paths. The [collect section](#collect-configuration-file) describes full input coverage, exclusions, progress, and incomplete reports.
386
+ Collect uses explicit `--since`/`--until` first, then explicit `--days`, otherwise today. `--save` accepts a directory or a `.md` file, with absolute or relative paths. The [collect coverage section](#collect-coverage) describes full input coverage, exclusions, progress, and incomplete reports.
387
387
 
388
388
  ### Summarize with an external agent
389
389
 
@@ -466,7 +466,7 @@ Existing calls still accept `-days`, `-query`, `-format`, `-output`, `-summary`,
466
466
  | `--interactive`, `-i` | Open the session reader to select and export sessions (same as `--browse` in a terminal) | - |
467
467
  | `--days`, `-d` | Query sessions from the last positive N days. Values outside the supported calendar range are rejected. In collect mode, applies when `--since/--until` are omitted. | 7 outside collect; today only in collect |
468
468
  | `--time-field` | Use `created` or `updated` time for the `--days` window in list/search/browse/interactive modes. | `updated` |
469
- | `--query`, `-q` | Query filter. Keyword terms are split on whitespace and matched case-insensitively like `--search`; every term must occur in the session title or logical transcript. Supports a plain keyword or structured terms like `bug provider:codex role:user path:. limit:20`. Structured values containing spaces support shell-style quoting and escaping. `limit` must be a positive signed 64-bit integer. Unknown structured keys are rejected. Cannot be combined with `agents://...` query URIs. | - |
469
+ | `--query`, `-q` | Query filter. Keyword terms are split on whitespace and matched case-insensitively like `--search`; every term must occur in the session title or logical transcript. Supports a plain keyword or structured terms like `bug provider:codex role:user path:. limit:20`. Structured values containing spaces support shell-style quoting and escaping. `limit` must be a positive signed 64-bit integer. Once the query contains a structured key, other `key:value` tokens are rejected. Cannot be combined with `agents://...` query URIs. | - |
470
470
  | `--head` | URI mode only. Print bounded discovery metadata without rereading the transcript; message count is exact when discovery scanned the complete source and explicitly `unknown` otherwise. Does not export files or print body content. Cannot be combined with `--format` or `--summary`. | - |
471
471
  | `--collect` | Collect sessions by date range, optionally constrained by `--query` or an `agents://...` query URI (mutually exclusive). Only visible user/assistant text is summarized; system/developer/tool messages, reasoning, plans, tool calls, and tool results are excluded, and empty projected sessions are ignored. PM mode extracts requests, decisions, and agent-reported outcomes before deterministic session merge and tree reduction. Multi-stage progress is shown on stderr. | - |
472
472
  | `--collect-mode` | collect output mode: `pm` for project-management summaries, `insight` for author insight summaries. | `pm` |
@@ -497,7 +497,7 @@ When URI mode combines `print` with file formats, a print read/render failure is
497
497
 
498
498
  See [CLI migration and the frozen Python release](docs/cli-compatibility.md#source-builds-and-python-api-migration).
499
499
 
500
- ### collect configuration file
500
+ ### Collect coverage
501
501
 
502
502
  Discovery failures are counted separately because the number of missing sessions is unknown. Reads that fail during query filtering also count as session read failures. These gaps are included in saved reports and completion logs; `--emit-prompt` carries them in its task metadata and fails if failures leave no candidates.
503
503
 
@@ -509,6 +509,8 @@ Collect discovers candidate sessions without a creation-time cutoff and processe
509
509
 
510
510
  PM summaries merge sessions only within the same date and known working directory. Sessions without a working directory retain separate attribution.
511
511
 
512
+ ### Configuration file
513
+
512
514
  Default config path:
513
515
 
514
516
  - macOS/Linux: `~/.config/agent-dump/config.toml`
@@ -237,16 +237,14 @@ Next steps:
237
237
 
238
238
  ### Exit Codes
239
239
 
240
- Explicit provider scopes (`provider:`, legacy provider prefixes, or `providers=` in query URIs) are applied before discovery. Unselected providers are not scanned. An empty explicit scope result keeps the mode’s no-match behavior, without probing unrelated providers.
241
-
242
240
  | Code | Meaning |
243
241
  |------|---------|
244
242
  | `0` | The command did what was asked — including when the result set is legitimately empty (no sessions in the `--days` window, a keyword or `--search` that matched nothing), and when interactive export partially succeeds. |
245
243
  | `1` | The command could not do what was asked: no provider data exists on this machine, a URI did not resolve to a session, every requested interactive export failed, or an argument combination is invalid. |
246
- | `2` | Argument usage error, raised by `argparse` (unknown flag, invalid `--format` value). |
244
+ | `2` | Argument usage error rejected by the argument parser (unknown flag, invalid `--format` value). |
247
245
 
248
- This makes `agent-dump --list && ...` meaningful: it succeeds when sessions were
249
- listed and fails when there is nothing to list because no provider has data.
246
+ `agent-dump --list && ...` continues after an empty listing and stops only when no
247
+ provider has data on this machine.
250
248
 
251
249
  ## Path Discovery
252
250
 
@@ -303,7 +301,7 @@ MiniMax Code supports listing, query, search, stats, collect, and print / JSON /
303
301
 
304
302
  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).
305
303
 
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).
304
+ 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 excludes 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).
307
305
 
308
306
  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).
309
307
 
@@ -357,9 +355,11 @@ agent-dump --config view
357
355
  agent-dump --config edit
358
356
  ```
359
357
 
360
- `--query` uses the same matching as `--search`: whitespace-separated literal terms must all occur, anywhere in the title or transcript. Structured keys (`provider`, `role`, `path`, `limit`) activate structured parsing; quote values containing spaces. `role` restricts matching to those messages, and `limit` applies to the final global results. `error:timeout` remains a plain term. Lists print all matches; interactive Provider counts reflect the filtered results.
358
+ `--query` uses the same matching as `--search`: whitespace-separated literal terms must all occur, anywhere in the title or transcript. Structured keys (`provider`, `role`, `path`, `limit`) activate structured parsing; quote values containing spaces. `role` restricts matching to those messages, and `limit` applies to the final global results. Without a structured key, `error:timeout` is a plain term; once the query contains one, any other `key:value` token is rejected. Lists print all matches; interactive Provider counts reflect the filtered results.
359
+
360
+ Explicit provider scopes (`provider:`, legacy provider prefixes, or `providers=` in query URIs) are applied before discovery. Unselected providers are not scanned. An empty explicit scope result keeps the mode's no-match behavior, without probing unrelated providers.
361
361
 
362
- Collect uses explicit `--since`/`--until` first, then explicit `--days`, otherwise today. `--save` accepts a directory or a `.md` file, with absolute or relative paths. The [collect section](#collect-configuration-file) describes full input coverage, exclusions, progress, and incomplete reports.
362
+ Collect uses explicit `--since`/`--until` first, then explicit `--days`, otherwise today. `--save` accepts a directory or a `.md` file, with absolute or relative paths. The [collect coverage section](#collect-coverage) describes full input coverage, exclusions, progress, and incomplete reports.
363
363
 
364
364
  ### Summarize with an external agent
365
365
 
@@ -442,7 +442,7 @@ Existing calls still accept `-days`, `-query`, `-format`, `-output`, `-summary`,
442
442
  | `--interactive`, `-i` | Open the session reader to select and export sessions (same as `--browse` in a terminal) | - |
443
443
  | `--days`, `-d` | Query sessions from the last positive N days. Values outside the supported calendar range are rejected. In collect mode, applies when `--since/--until` are omitted. | 7 outside collect; today only in collect |
444
444
  | `--time-field` | Use `created` or `updated` time for the `--days` window in list/search/browse/interactive modes. | `updated` |
445
- | `--query`, `-q` | Query filter. Keyword terms are split on whitespace and matched case-insensitively like `--search`; every term must occur in the session title or logical transcript. Supports a plain keyword or structured terms like `bug provider:codex role:user path:. limit:20`. Structured values containing spaces support shell-style quoting and escaping. `limit` must be a positive signed 64-bit integer. Unknown structured keys are rejected. Cannot be combined with `agents://...` query URIs. | - |
445
+ | `--query`, `-q` | Query filter. Keyword terms are split on whitespace and matched case-insensitively like `--search`; every term must occur in the session title or logical transcript. Supports a plain keyword or structured terms like `bug provider:codex role:user path:. limit:20`. Structured values containing spaces support shell-style quoting and escaping. `limit` must be a positive signed 64-bit integer. Once the query contains a structured key, other `key:value` tokens are rejected. Cannot be combined with `agents://...` query URIs. | - |
446
446
  | `--head` | URI mode only. Print bounded discovery metadata without rereading the transcript; message count is exact when discovery scanned the complete source and explicitly `unknown` otherwise. Does not export files or print body content. Cannot be combined with `--format` or `--summary`. | - |
447
447
  | `--collect` | Collect sessions by date range, optionally constrained by `--query` or an `agents://...` query URI (mutually exclusive). Only visible user/assistant text is summarized; system/developer/tool messages, reasoning, plans, tool calls, and tool results are excluded, and empty projected sessions are ignored. PM mode extracts requests, decisions, and agent-reported outcomes before deterministic session merge and tree reduction. Multi-stage progress is shown on stderr. | - |
448
448
  | `--collect-mode` | collect output mode: `pm` for project-management summaries, `insight` for author insight summaries. | `pm` |
@@ -473,7 +473,7 @@ When URI mode combines `print` with file formats, a print read/render failure is
473
473
 
474
474
  See [CLI migration and the frozen Python release](docs/cli-compatibility.md#source-builds-and-python-api-migration).
475
475
 
476
- ### collect configuration file
476
+ ### Collect coverage
477
477
 
478
478
  Discovery failures are counted separately because the number of missing sessions is unknown. Reads that fail during query filtering also count as session read failures. These gaps are included in saved reports and completion logs; `--emit-prompt` carries them in its task metadata and fails if failures leave no candidates.
479
479
 
@@ -485,6 +485,8 @@ Collect discovers candidate sessions without a creation-time cutoff and processe
485
485
 
486
486
  PM summaries merge sessions only within the same date and known working directory. Sessions without a working directory retain separate attribution.
487
487
 
488
+ ### Configuration file
489
+
488
490
  Default config path:
489
491
 
490
492
  - macOS/Linux: `~/.config/agent-dump/config.toml`
@@ -117,11 +117,7 @@ pub fn each_row(
117
117
  mut visit: impl FnMut(Value) -> crate::Result<()>,
118
118
  ) -> crate::Result<()> {
119
119
  let mut statement = connection.prepare(sql)?;
120
- let names: Vec<String> = statement
121
- .column_names()
122
- .iter()
123
- .map(|name| (*name).into())
124
- .collect();
120
+ let names: Vec<String> = statement.column_names().map(Into::into).collect();
125
121
  let mut rows = statement.query(parameters)?;
126
122
  while let Some(row) = rows.next()? {
127
123
  let mut record = Map::new();
@@ -2,6 +2,7 @@ use crate::query::Query;
2
2
  use crate::query::scanner::ScannedProvider;
3
3
  use crate::query::text::{Mode, TextQuery};
4
4
  use crate::session::cache::SessionDataCache;
5
+ use crate::session::{Session, SessionData};
5
6
  use std::collections::{HashMap, HashSet};
6
7
  use std::io::Write;
7
8
 
@@ -160,7 +161,7 @@ fn fallback(
160
161
  warnings: &mut impl Write,
161
162
  ) -> crate::Result<Selection> {
162
163
  let mut selection = Selection::default();
163
- let cache = SessionDataCache::default();
164
+ let mut candidates = Vec::new();
164
165
  for (g, group) in groups.iter().enumerate() {
165
166
  for (s, session) in group.sessions.iter().enumerate() {
166
167
  if !query.includes_path(&session.directory) {
@@ -173,23 +174,50 @@ fn fallback(
173
174
  snippet: session.title.clone(),
174
175
  rank: 0.0,
175
176
  });
176
- continue;
177
+ } else {
178
+ candidates.push((g, s));
177
179
  }
178
- let data = match cache.lease(
179
- group.info.name,
180
- group.provider.as_ref(),
181
- session,
182
- zh,
183
- &mut |d| {
184
- writeln!(
185
- warnings,
186
- "{}",
187
- crate::output::diagnostics::record_warning(&d, zh)
188
- )?;
189
- Ok(())
190
- },
191
- ) {
192
- Ok(data) => data,
180
+ }
181
+ }
182
+ let cache = SessionDataCache::default();
183
+ crate::parallel::ordered(
184
+ &candidates,
185
+ |&(g, s)| {
186
+ let group = &groups[g];
187
+ let session = &group.sessions[s];
188
+ let mut diagnostics = Vec::new();
189
+ let result = cache
190
+ .lease(
191
+ group.info.name,
192
+ group.provider.as_ref(),
193
+ session,
194
+ zh,
195
+ &mut |d| {
196
+ diagnostics.push(d);
197
+ Ok(())
198
+ },
199
+ )
200
+ .map(|data| evidence(&data, session, query, text));
201
+ (g, s, result, diagnostics)
202
+ },
203
+ |(g, s, result, diagnostics)| {
204
+ for diagnostic in diagnostics {
205
+ writeln!(
206
+ warnings,
207
+ "{}",
208
+ crate::output::diagnostics::record_warning(&diagnostic, zh)
209
+ )?;
210
+ }
211
+ let group = &groups[g];
212
+ let session = &group.sessions[s];
213
+ match result {
214
+ Ok(Some((snippet, rank))) => selection.matches.push(Match {
215
+ group: g,
216
+ session: s,
217
+ snippet,
218
+ rank,
219
+ }),
220
+ Ok(None) => {}
193
221
  Err(error) => {
194
222
  selection
195
223
  .failures
@@ -212,56 +240,48 @@ fn fallback(
212
240
  ]
213
241
  )
214
242
  )?;
215
- continue;
216
243
  }
217
- };
218
- let evidence = if let Some(roles) = &query.roles {
219
- data.messages
220
- .iter()
221
- .filter(|message| {
222
- roles.contains(&message.role.to_lowercase())
223
- })
224
- .find_map(|message| {
225
- if text.literals.is_empty() {
226
- let content =
227
- crate::query::transcript::message_texts(
228
- message,
229
- )
230
- .join("\n");
231
- let normalized =
232
- crate::query::text::normalize(&content);
233
- let excerpt: String =
234
- normalized.chars().take(96).collect();
235
- let snippet = if normalized.chars().count() > 96 {
236
- format!("{}...", excerpt.trim_end())
237
- } else {
238
- excerpt
239
- };
240
- Some((snippet, 0.0))
241
- } else {
242
- let content =
243
- crate::query::transcript::searchable_message(
244
- message,
245
- );
246
- text.find(&[&content]).map(|e| (e.snippet, 0.0))
247
- }
248
- })
249
- } else {
250
- text.find(&[
251
- &session.title,
252
- &crate::query::transcript::searchable(&data),
253
- ])
254
- .map(|e| (e.snippet, if e.title_matches { 1.0 } else { 0.0 }))
255
- };
256
- if let Some((snippet, rank)) = evidence {
257
- selection.matches.push(Match {
258
- group: g,
259
- session: s,
260
- snippet,
261
- rank,
262
- });
263
244
  }
264
- }
265
- }
245
+ Ok(())
246
+ },
247
+ )?;
266
248
  Ok(selection)
267
249
  }
250
+
251
+ fn evidence(
252
+ data: &SessionData,
253
+ session: &Session,
254
+ query: &Query,
255
+ text: &TextQuery,
256
+ ) -> Option<(String, f64)> {
257
+ if let Some(roles) = &query.roles {
258
+ data.messages
259
+ .iter()
260
+ .filter(|message| roles.contains(&message.role.to_lowercase()))
261
+ .find_map(|message| {
262
+ if text.literals.is_empty() {
263
+ let content =
264
+ crate::query::transcript::message_texts(message)
265
+ .join("\n");
266
+ let normalized = crate::query::text::normalize(&content);
267
+ let excerpt: String = normalized.chars().take(96).collect();
268
+ let snippet = if normalized.chars().count() > 96 {
269
+ format!("{}...", excerpt.trim_end())
270
+ } else {
271
+ excerpt
272
+ };
273
+ Some((snippet, 0.0))
274
+ } else {
275
+ let content =
276
+ crate::query::transcript::searchable_message(message);
277
+ text.find(&[&content]).map(|e| (e.snippet, 0.0))
278
+ }
279
+ })
280
+ } else {
281
+ text.find(&[
282
+ &session.title,
283
+ &crate::query::transcript::searchable(data),
284
+ ])
285
+ .map(|e| (e.snippet, if e.title_matches { 1.0 } else { 0.0 }))
286
+ }
287
+ }
@@ -36,7 +36,7 @@ dev = [
36
36
  "pytest-xdist>=3.6",
37
37
  "ruff>=0.15.2",
38
38
  "tomli>=2.0.0",
39
- "ty==0.0.87",
39
+ "ty==0.0.93",
40
40
  ]
41
41
  packaging = [
42
42
  "maturin==1.15.0",
@@ -1,6 +1,6 @@
1
- collect 与 summary 的固定提示词来自 Python 参考版本 `dca2d97`,以编译期字符串嵌入 Rust。
1
+ collect 与 summary 的固定提示词最初来自 Python 参考版本 `dca2d97`,以编译期字符串嵌入 Rust。
2
2
  `{since}`、`{until}` 只接收已解析的日期,`{label}` 只接收内部归并阶段名。
3
3
  所有来源正文、路径、标题与模型返回均进入有类型、来源和 Unicode 长度的 JSON envelope。
4
- 变更提示词属于可观察行为;本轮迁移保持原文并通过本地 HTTP 请求差分验证。
4
+ 变更提示词属于可观察行为。
5
5
 
6
6
  `read-session-en.txt` 和 `read-session-zh.txt` 是 `--read-prompt` 的读取说明,不调用模型。`__COMMANDS_JSON__` 由当前可执行文件和已校验 URI 构造的参数数组、shell 命令清单替换;不包含会话正文。CLI 契约测试覆盖所有已注册 Provider 的提示词和读取入口。
@@ -3,6 +3,7 @@ pub mod handoff;
3
3
  pub mod llm;
4
4
  pub mod log;
5
5
  pub mod model;
6
+ pub mod pool;
6
7
  pub mod progress;
7
8
  pub mod prompts;
8
9
  pub mod reduction;
@@ -0,0 +1,38 @@
1
+ use std::collections::VecDeque;
2
+ use std::panic::{AssertUnwindSafe, catch_unwind, resume_unwind};
3
+ use std::sync::mpsc;
4
+
5
+ /// Runs queued jobs with at most `limit` in flight. `handle` sees each result
6
+ /// on the calling thread and may add or drop queued jobs; an error stops new
7
+ /// jobs and returns once the running ones finish.
8
+ pub fn run<J: Send, R: Send>(
9
+ limit: usize,
10
+ mut queue: VecDeque<J>,
11
+ work: impl Fn(J) -> R + Sync,
12
+ mut handle: impl FnMut(R, &mut VecDeque<J>) -> crate::Result<()>,
13
+ ) -> crate::Result<()> {
14
+ std::thread::scope(|scope| {
15
+ let (sender, receiver) = mpsc::channel();
16
+ let mut running = 0;
17
+ loop {
18
+ while running < limit.max(1)
19
+ && let Some(job) = queue.pop_front()
20
+ {
21
+ let (sender, work) = (sender.clone(), &work);
22
+ scope.spawn(move || {
23
+ let result = catch_unwind(AssertUnwindSafe(|| work(job)));
24
+ let _ = sender.send(result);
25
+ });
26
+ running += 1;
27
+ }
28
+ if running == 0 {
29
+ return Ok(());
30
+ }
31
+ running -= 1;
32
+ match receiver.recv().expect("the pool keeps a sender") {
33
+ Ok(result) => handle(result, &mut queue)?,
34
+ Err(panic) => resume_unwind(panic),
35
+ }
36
+ }
37
+ })
38
+ }