cc-transcript 14.28.3__tar.gz → 14.28.4__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 (188) hide show
  1. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/PKG-INFO +1 -1
  2. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/pyproject.toml +1 -1
  3. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/target.rs +39 -14
  4. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/scan.rs +39 -1
  5. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/scan_regressions.rs +36 -0
  6. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/Cargo.lock +0 -0
  7. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/Cargo.toml +0 -0
  8. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/LICENSE +0 -0
  9. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/README.md +0 -0
  10. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/__init__.py +0 -0
  11. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/__init__.pyi +0 -0
  12. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/_native.pyi +0 -0
  13. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/activity.py +0 -0
  14. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/activity_probe.py +0 -0
  15. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/builders.py +0 -0
  16. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/codex.py +0 -0
  17. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/command.py +0 -0
  18. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/context.py +0 -0
  19. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/corrections.py +0 -0
  20. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/cost.py +0 -0
  21. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/decision_store.py +0 -0
  22. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/decisions.py +0 -0
  23. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/discovery.py +0 -0
  24. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/disktruth.py +0 -0
  25. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/evidence.py +0 -0
  26. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/extract/__init__.py +0 -0
  27. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/extract/correct.py +0 -0
  28. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/facts.py +0 -0
  29. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/filterspec.py +0 -0
  30. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/heartbeats.py +0 -0
  31. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/ids.py +0 -0
  32. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/judge/__init__.py +0 -0
  33. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/judge/llm.py +0 -0
  34. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/judge/similar.py +0 -0
  35. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/judge/verdicts.py +0 -0
  36. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/ledger.py +0 -0
  37. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/literals.py +0 -0
  38. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/__init__.py +0 -0
  39. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/candidates.py +0 -0
  40. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/confidence.py +0 -0
  41. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/engine.py +0 -0
  42. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/formats.py +0 -0
  43. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/sampling.py +0 -0
  44. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/signals.py +0 -0
  45. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/sourcekind.py +0 -0
  46. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/spec.py +0 -0
  47. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/mining/store.py +0 -0
  48. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/models.py +0 -0
  49. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/nlp.py +0 -0
  50. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/notifications.py +0 -0
  51. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/parser.py +0 -0
  52. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/py.typed +0 -0
  53. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/query.py +0 -0
  54. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/render.py +0 -0
  55. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/sentiment/__init__.py +0 -0
  56. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/sentiment/buckets.py +0 -0
  57. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/sentiment/data/afinn-en-165.tsv +0 -0
  58. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/sentiment/data/domain_overrides.tsv +0 -0
  59. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/sentiment/data/en-ewt.udpipe +0 -0
  60. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/sentiment/engine.py +0 -0
  61. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/sentiment/lexicon.py +0 -0
  62. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/sentiment/scorespec.py +0 -0
  63. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/snapshot_schema/config.schema.json +0 -0
  64. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/snapshot_schema/context.schema.json +0 -0
  65. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/snapshot_schema/request.schema.json +0 -0
  66. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/snapshot_schema/response.schema.json +0 -0
  67. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/snapshot_schema/tool_registry.schema.json +0 -0
  68. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/snapshots.py +0 -0
  69. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/synthetic.py +0 -0
  70. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/tools.py +0 -0
  71. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/cc_transcript/watch.py +0 -0
  72. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/Cargo.toml +0 -0
  73. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/blame.rs +0 -0
  74. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/corpus.rs +0 -0
  75. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/corrections.rs +0 -0
  76. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/digest.rs +0 -0
  77. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/facts.rs +0 -0
  78. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/grep.rs +0 -0
  79. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/list.rs +0 -0
  80. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/mod.rs +0 -0
  81. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/scratchpad.rs +0 -0
  82. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/show.rs +0 -0
  83. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/slice.rs +0 -0
  84. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/stats.rs +0 -0
  85. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/commands/watch.rs +0 -0
  86. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/lib.rs +0 -0
  87. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/main.rs +0 -0
  88. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/output.rs +0 -0
  89. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/cli/src/timearg.rs +0 -0
  90. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/Cargo.toml +0 -0
  91. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/benches/parse.rs +0 -0
  92. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/benches/render.rs +0 -0
  93. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/benches/toolcall.rs +0 -0
  94. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/activity.rs +0 -0
  95. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/actor.rs +0 -0
  96. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/blame.rs +0 -0
  97. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/buckets.rs +0 -0
  98. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/codex/discovery.rs +0 -0
  99. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/codex/lower.rs +0 -0
  100. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/codex/mod.rs +0 -0
  101. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/codex/parse.rs +0 -0
  102. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/codex/probe.rs +0 -0
  103. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/codex/protocol.rs +0 -0
  104. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/codex/types.rs +0 -0
  105. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/command.rs +0 -0
  106. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/context.rs +0 -0
  107. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/corrections.rs +0 -0
  108. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/cost.rs +0 -0
  109. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/discovery.rs +0 -0
  110. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/facts.rs +0 -0
  111. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/feedback.rs +0 -0
  112. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/filter.rs +0 -0
  113. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/gateway.rs +0 -0
  114. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/ids.rs +0 -0
  115. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/judge.rs +0 -0
  116. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/lib.rs +0 -0
  117. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/literals/command.rs +0 -0
  118. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/literals/corrections.rs +0 -0
  119. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/literals/feedback.rs +0 -0
  120. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/literals/mining.rs +0 -0
  121. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/literals/mod.rs +0 -0
  122. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/literals/protocol.rs +0 -0
  123. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/notifications.rs +0 -0
  124. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/parse.rs +0 -0
  125. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/protocol.rs +0 -0
  126. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/pystr.rs +0 -0
  127. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/query.rs +0 -0
  128. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/render.rs +0 -0
  129. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/rng.rs +0 -0
  130. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/scan_grep.rs +0 -0
  131. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/schema.rs +0 -0
  132. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot.rs +0 -0
  133. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_activity.rs +0 -0
  134. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_codec.rs +0 -0
  135. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_codex_append.rs +0 -0
  136. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_labels.rs +0 -0
  137. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_memory.rs +0 -0
  138. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_owned.rs +0 -0
  139. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_prepared.rs +0 -0
  140. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_prepared_disk.rs +0 -0
  141. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_prepared_service.rs +0 -0
  142. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_projection.rs +0 -0
  143. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_regressions.rs +0 -0
  144. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_root_warm.rs +0 -0
  145. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/snapshot_text.rs +0 -0
  146. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/sqlite.rs +0 -0
  147. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/toolcall.rs +0 -0
  148. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/types.rs +0 -0
  149. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/value.rs +0 -0
  150. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/core/src/watch.rs +0 -0
  151. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/Cargo.toml +0 -0
  152. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/build.rs +0 -0
  153. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/data/command_prefix_pins.tsv +0 -0
  154. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/actor_bridge.rs +0 -0
  155. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/bin/stub_gen.rs +0 -0
  156. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/codex.rs +0 -0
  157. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/command.rs +0 -0
  158. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/context.rs +0 -0
  159. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/corrections.rs +0 -0
  160. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/discovery.rs +0 -0
  161. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/feedback.rs +0 -0
  162. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/judge.rs +0 -0
  163. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/lexicon.rs +0 -0
  164. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/lib.rs +0 -0
  165. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/mining.rs +0 -0
  166. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/nlp.rs +0 -0
  167. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/python.rs +0 -0
  168. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/render.rs +0 -0
  169. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/score.rs +0 -0
  170. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/snapshot_decode.rs +0 -0
  171. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/snapshots.rs +0 -0
  172. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/sqlite.rs +0 -0
  173. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/toolcall.rs +0 -0
  174. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/attachment.rs +0 -0
  175. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/blocks.rs +0 -0
  176. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/command.rs +0 -0
  177. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/convert.rs +0 -0
  178. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/dunder.rs +0 -0
  179. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/events.rs +0 -0
  180. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/meta.rs +0 -0
  181. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/mod.rs +0 -0
  182. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/print.rs +0 -0
  183. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/store.rs +0 -0
  184. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/system.rs +0 -0
  185. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/toolcall.rs +0 -0
  186. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/toolresult.rs +0 -0
  187. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/views/transcript.rs +0 -0
  188. {cc_transcript-14.28.3 → cc_transcript-14.28.4}/rust/crates/py/src/watch.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cc-transcript
3
- Version: 14.28.3
3
+ Version: 14.28.4
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cc-transcript"
3
- version = "14.28.3" # informational — releases stamp the version from the git tag
3
+ version = "14.28.4" # informational — releases stamp the version from the git tag
4
4
  description = "Grep every Claude Code session you've ever run."
5
5
  readme = "README.md"
6
6
  license = "PolyForm-Noncommercial-1.0.0"
@@ -1,6 +1,7 @@
1
1
  //! Target discovery and parsing shared by every transcript command (cli.py's
2
2
  //! discover / resolve_targets / parse_transcripts / scope_note plumbing).
3
3
 
4
+ use std::fs;
4
5
  use std::path::{Path, PathBuf};
5
6
 
6
7
  use cc_transcript_core::discovery::{find_in, mtime_secs};
@@ -26,23 +27,26 @@ pub struct Targets {
26
27
  pub total: usize,
27
28
  }
28
29
 
29
- fn project_matches(path: &Path, root: &Path, project: Option<&str>) -> bool {
30
- let Some(project) = project else { return true };
31
- let Ok(rel) = path.strip_prefix(root) else {
32
- return false;
33
- };
34
- let parts: Vec<_> = rel.components().collect();
35
- parts[..parts.len().saturating_sub(1)]
36
- .iter()
37
- .any(|part| part.as_os_str().to_string_lossy().contains(project))
38
- }
39
-
40
30
  /// Newest-first discovery under `root` (cli.py discover): find_in order, project
41
31
  /// filtered, stable-sorted by mtime descending.
42
32
  pub fn discover(root: &Path, project: Option<&str>, contains: Option<&str>) -> Vec<(PathBuf, f64)> {
43
- let mut found: Vec<(PathBuf, f64)> = find_in(root, contains, None, None)
44
- .into_iter()
45
- .filter(|(path, _)| project_matches(path, root, project))
33
+ let roots = if let Some(project) = project {
34
+ fs::read_dir(root)
35
+ .map(|entries| {
36
+ entries
37
+ .flatten()
38
+ .filter(|entry| entry.file_type().is_ok_and(|kind| kind.is_dir()))
39
+ .filter(|entry| entry.file_name().to_string_lossy().contains(project))
40
+ .map(|entry| entry.path())
41
+ .collect()
42
+ })
43
+ .unwrap_or_default()
44
+ } else {
45
+ vec![root.to_path_buf()]
46
+ };
47
+ let mut found: Vec<(PathBuf, f64)> = roots
48
+ .iter()
49
+ .flat_map(|root| find_in(root, contains, None, None))
46
50
  .collect();
47
51
  found.sort_by(|a, b| b.1.partial_cmp(&a.1).expect("mtimes are finite"));
48
52
  found
@@ -237,3 +241,24 @@ pub fn py_path(arg: &str) -> PathBuf {
237
241
  };
238
242
  PathBuf::from(text)
239
243
  }
244
+
245
+ #[cfg(test)]
246
+ mod tests {
247
+ use super::discover;
248
+
249
+ #[test]
250
+ fn project_discovery_only_walks_matching_roots() {
251
+ let root = tempfile::tempdir().unwrap();
252
+ let wanted = root.path().join("wanted-project");
253
+ let other = root.path().join("other-project");
254
+ std::fs::create_dir(&wanted).unwrap();
255
+ std::fs::create_dir(&other).unwrap();
256
+ std::fs::write(wanted.join("match.jsonl"), "{}").unwrap();
257
+ std::fs::write(other.join("match.jsonl"), "{}").unwrap();
258
+
259
+ let found = discover(root.path(), Some("wanted"), None);
260
+
261
+ assert_eq!(found.len(), 1);
262
+ assert_eq!(found[0].0, wanted.join("match.jsonl"));
263
+ }
264
+ }
@@ -292,8 +292,46 @@ impl<'a> ScanSession<'a> {
292
292
  }
293
293
  let canonical_root =
294
294
  std::fs::canonicalize(&plan.root).map_err(|error| incomplete(error.to_string()))?;
295
+ let roots = if let Some(project) = &plan.project {
296
+ let mut roots = Vec::new();
297
+ for entry in
298
+ std::fs::read_dir(&plan.root).map_err(|error| incomplete(error.to_string()))?
299
+ {
300
+ self.budget.checkpoint(&self.cancel)?;
301
+ self.budget.progress.discovery_entries += 1;
302
+ if self.budget.progress.discovery_entries > self.budget.limits.max_discovery_entries
303
+ {
304
+ return Err(incomplete("project discovery budget exhausted"));
305
+ }
306
+ let entry = entry.map_err(|error| incomplete(error.to_string()))?;
307
+ if entry
308
+ .file_type()
309
+ .map_err(|error| incomplete(error.to_string()))?
310
+ .is_dir()
311
+ && entry.file_name().to_string_lossy().contains(project)
312
+ {
313
+ roots.push(entry.path());
314
+ }
315
+ }
316
+ roots
317
+ } else {
318
+ vec![plan.root.clone()]
319
+ };
320
+ if roots.is_empty() {
321
+ return Ok((Vec::new(), 0));
322
+ }
295
323
  let mut request = self.bounded_request("discover");
296
- request.insert("roots", json!([plan.root.to_string_lossy().as_ref()]));
324
+ request.insert(
325
+ "roots",
326
+ json!(roots
327
+ .iter()
328
+ .map(|root| root.to_string_lossy().into_owned())
329
+ .collect::<Vec<_>>()),
330
+ );
331
+ request["limits"].insert(
332
+ "max_items",
333
+ json!(self.budget.remaining().max_discovery_entries),
334
+ );
297
335
  request.insert("preserve_aliases", json!(true));
298
336
  request.insert("follow_directory_symlinks", json!(false));
299
337
  let mut paths = Vec::new();
@@ -85,6 +85,42 @@ fn exhausted_discovery_does_not_read_a_body() {
85
85
  assert_eq!(result.progress.source_opens, 0);
86
86
  }
87
87
 
88
+ #[test]
89
+ fn project_filter_skips_other_directories_before_the_scan() {
90
+ let fixture = Fixture::new();
91
+ let wanted = fixture.0.join("wanted-project");
92
+ let other = fixture.0.join("other-project");
93
+ std::fs::create_dir(&wanted).unwrap();
94
+ std::fs::create_dir(&other).unwrap();
95
+ let event = "{\"type\":\"user\",\"uuid\":\"a\",\"sessionId\":\"s\",\"timestamp\":\"2026-01-01T00:00:00Z\",\"message\":{\"role\":\"user\",\"content\":\"match\"}}\n";
96
+ for name in ["first.jsonl", "second.jsonl"] {
97
+ std::fs::write(wanted.join(name), event).unwrap();
98
+ }
99
+ for index in 0..10 {
100
+ std::fs::write(other.join(format!("{index}.jsonl")), event).unwrap();
101
+ }
102
+ let mut bound = limits();
103
+ bound.max_items = 1;
104
+ bound.max_discovery_entries = 6;
105
+ let store = NativeStore::new(&json!({})).unwrap();
106
+ let mut scan = ScanSession::new(&store, bound, Cancellation::default());
107
+ let plan = ScanPlan {
108
+ project: Some("wanted".to_owned()),
109
+ ..fixture.plan(vec![])
110
+ };
111
+ let mut visited = Vec::new();
112
+ let result = scan.run(&plan, |path, _, _, _| {
113
+ visited.push(path.file_name().unwrap().to_string_lossy().into_owned());
114
+ Ok(ScanControl::Continue)
115
+ });
116
+ assert!(result.complete, "{:?}", result.reason);
117
+ assert_eq!(result.selected_sources, 2);
118
+ assert_eq!(result.available_sources, 2);
119
+ assert!(result.progress.discovery_entries <= 6);
120
+ visited.sort();
121
+ assert_eq!(visited, ["first.jsonl", "second.jsonl"]);
122
+ }
123
+
88
124
  #[test]
89
125
  fn explicit_paths_keep_their_order() {
90
126
  let fixture = Fixture::new();
File without changes