cc-transcript 14.31.0__tar.gz → 14.31.1__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.31.0 → cc_transcript-14.31.1}/PKG-INFO +1 -1
  2. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/pyproject.toml +1 -1
  3. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot.rs +70 -2
  4. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_labels.rs +23 -1
  5. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_root_warm.rs +59 -3
  6. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/Cargo.lock +0 -0
  7. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/Cargo.toml +0 -0
  8. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/LICENSE +0 -0
  9. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/README.md +0 -0
  10. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/__init__.py +0 -0
  11. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/__init__.pyi +0 -0
  12. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/_native.pyi +0 -0
  13. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/activity.py +0 -0
  14. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/activity_probe.py +0 -0
  15. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/builders.py +0 -0
  16. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/codex.py +0 -0
  17. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/command.py +0 -0
  18. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/context.py +0 -0
  19. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/corrections.py +0 -0
  20. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/cost.py +0 -0
  21. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/decision_store.py +0 -0
  22. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/decisions.py +0 -0
  23. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/discovery.py +0 -0
  24. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/disktruth.py +0 -0
  25. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/evidence.py +0 -0
  26. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/extract/__init__.py +0 -0
  27. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/extract/correct.py +0 -0
  28. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/facts.py +0 -0
  29. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/filterspec.py +0 -0
  30. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/heartbeats.py +0 -0
  31. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/ids.py +0 -0
  32. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/judge/__init__.py +0 -0
  33. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/judge/llm.py +0 -0
  34. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/judge/similar.py +0 -0
  35. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/judge/verdicts.py +0 -0
  36. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/ledger.py +0 -0
  37. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/literals.py +0 -0
  38. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/__init__.py +0 -0
  39. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/candidates.py +0 -0
  40. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/confidence.py +0 -0
  41. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/engine.py +0 -0
  42. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/formats.py +0 -0
  43. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/sampling.py +0 -0
  44. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/signals.py +0 -0
  45. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/sourcekind.py +0 -0
  46. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/spec.py +0 -0
  47. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/mining/store.py +0 -0
  48. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/models.py +0 -0
  49. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/nlp.py +0 -0
  50. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/notifications.py +0 -0
  51. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/parser.py +0 -0
  52. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/py.typed +0 -0
  53. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/query.py +0 -0
  54. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/render.py +0 -0
  55. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/sentiment/__init__.py +0 -0
  56. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/sentiment/buckets.py +0 -0
  57. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/sentiment/data/afinn-en-165.tsv +0 -0
  58. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/sentiment/data/domain_overrides.tsv +0 -0
  59. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/sentiment/data/en-ewt.udpipe +0 -0
  60. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/sentiment/engine.py +0 -0
  61. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/sentiment/lexicon.py +0 -0
  62. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/sentiment/scorespec.py +0 -0
  63. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/snapshot_schema/config.schema.json +0 -0
  64. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/snapshot_schema/context.schema.json +0 -0
  65. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/snapshot_schema/request.schema.json +0 -0
  66. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/snapshot_schema/response.schema.json +0 -0
  67. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/snapshot_schema/tool_registry.schema.json +0 -0
  68. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/snapshots.py +0 -0
  69. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/synthetic.py +0 -0
  70. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/tools.py +0 -0
  71. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/cc_transcript/watch.py +0 -0
  72. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/Cargo.toml +0 -0
  73. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/blame.rs +0 -0
  74. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/corpus.rs +0 -0
  75. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/corrections.rs +0 -0
  76. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/digest.rs +0 -0
  77. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/facts.rs +0 -0
  78. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/grep.rs +0 -0
  79. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/list.rs +0 -0
  80. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/mod.rs +0 -0
  81. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/scratchpad.rs +0 -0
  82. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/show.rs +0 -0
  83. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/slice.rs +0 -0
  84. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/stats.rs +0 -0
  85. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/commands/watch.rs +0 -0
  86. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/lib.rs +0 -0
  87. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/main.rs +0 -0
  88. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/output.rs +0 -0
  89. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/target.rs +0 -0
  90. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/cli/src/timearg.rs +0 -0
  91. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/Cargo.toml +0 -0
  92. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/benches/parse.rs +0 -0
  93. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/benches/render.rs +0 -0
  94. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/benches/toolcall.rs +0 -0
  95. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/activity.rs +0 -0
  96. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/actor.rs +0 -0
  97. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/blame.rs +0 -0
  98. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/buckets.rs +0 -0
  99. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/codex/discovery.rs +0 -0
  100. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/codex/lower.rs +0 -0
  101. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/codex/mod.rs +0 -0
  102. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/codex/parse.rs +0 -0
  103. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/codex/probe.rs +0 -0
  104. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/codex/protocol.rs +0 -0
  105. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/codex/types.rs +0 -0
  106. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/command.rs +0 -0
  107. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/context.rs +0 -0
  108. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/corrections.rs +0 -0
  109. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/cost.rs +0 -0
  110. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/discovery.rs +0 -0
  111. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/facts.rs +0 -0
  112. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/feedback.rs +0 -0
  113. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/filter.rs +0 -0
  114. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/gateway.rs +0 -0
  115. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/ids.rs +0 -0
  116. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/judge.rs +0 -0
  117. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/lib.rs +0 -0
  118. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/literals/command.rs +0 -0
  119. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/literals/corrections.rs +0 -0
  120. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/literals/feedback.rs +0 -0
  121. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/literals/mining.rs +0 -0
  122. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/literals/mod.rs +0 -0
  123. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/literals/protocol.rs +0 -0
  124. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/notifications.rs +0 -0
  125. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/parse.rs +0 -0
  126. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/protocol.rs +0 -0
  127. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/pystr.rs +0 -0
  128. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/query.rs +0 -0
  129. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/render.rs +0 -0
  130. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/rng.rs +0 -0
  131. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/scan.rs +0 -0
  132. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/scan_grep.rs +0 -0
  133. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/scan_regressions.rs +0 -0
  134. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/schema.rs +0 -0
  135. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_activity.rs +0 -0
  136. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_codec.rs +0 -0
  137. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_codex_append.rs +0 -0
  138. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_memory.rs +0 -0
  139. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_owned.rs +0 -0
  140. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_prepared.rs +0 -0
  141. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_prepared_disk.rs +0 -0
  142. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_prepared_service.rs +0 -0
  143. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_projection.rs +0 -0
  144. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_regressions.rs +0 -0
  145. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/snapshot_text.rs +0 -0
  146. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/sqlite.rs +0 -0
  147. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/toolcall.rs +0 -0
  148. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/types.rs +0 -0
  149. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/value.rs +0 -0
  150. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/core/src/watch.rs +0 -0
  151. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/Cargo.toml +0 -0
  152. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/build.rs +0 -0
  153. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/data/command_prefix_pins.tsv +0 -0
  154. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/actor_bridge.rs +0 -0
  155. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/bin/stub_gen.rs +0 -0
  156. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/codex.rs +0 -0
  157. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/command.rs +0 -0
  158. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/context.rs +0 -0
  159. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/corrections.rs +0 -0
  160. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/discovery.rs +0 -0
  161. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/feedback.rs +0 -0
  162. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/judge.rs +0 -0
  163. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/lexicon.rs +0 -0
  164. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/lib.rs +0 -0
  165. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/mining.rs +0 -0
  166. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/nlp.rs +0 -0
  167. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/python.rs +0 -0
  168. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/render.rs +0 -0
  169. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/score.rs +0 -0
  170. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/snapshot_decode.rs +0 -0
  171. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/snapshots.rs +0 -0
  172. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/sqlite.rs +0 -0
  173. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/toolcall.rs +0 -0
  174. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/attachment.rs +0 -0
  175. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/blocks.rs +0 -0
  176. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/command.rs +0 -0
  177. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/convert.rs +0 -0
  178. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/dunder.rs +0 -0
  179. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/events.rs +0 -0
  180. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/meta.rs +0 -0
  181. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/mod.rs +0 -0
  182. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/print.rs +0 -0
  183. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/store.rs +0 -0
  184. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/system.rs +0 -0
  185. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/toolcall.rs +0 -0
  186. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/toolresult.rs +0 -0
  187. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/rust/crates/py/src/views/transcript.rs +0 -0
  188. {cc_transcript-14.31.0 → cc_transcript-14.31.1}/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.31.0
3
+ Version: 14.31.1
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.31.0" # informational — releases stamp the version from the git tag
3
+ version = "14.31.1" # 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"
@@ -423,6 +423,7 @@ struct Waiter {
423
423
  used_source_bytes: usize,
424
424
  used_events: usize,
425
425
  stage: Option<Arc<ClassifierSlot>>,
426
+ windowed: bool,
426
427
  busy: bool,
427
428
  }
428
429
 
@@ -4154,6 +4155,7 @@ impl NativeStore {
4154
4155
  used_source_bytes: 0,
4155
4156
  used_events: 0,
4156
4157
  stage: None,
4158
+ windowed: window.is_some(),
4157
4159
  busy: false,
4158
4160
  };
4159
4161
  state.waiters.insert(cursor.clone(), waiter.clone());
@@ -4409,6 +4411,14 @@ impl NativeStore {
4409
4411
  if let Some(snapshot) = &load.result {
4410
4412
  let snapshot = Arc::clone(snapshot);
4411
4413
  drop(load);
4414
+ if waiter.windowed && snapshot.provider == Provider::Codex {
4415
+ self.state
4416
+ .lock()
4417
+ .expect("snapshot state")
4418
+ .waiters
4419
+ .remove(token);
4420
+ return Err(invalid("tail_bytes requires a Claude source"));
4421
+ }
4412
4422
  let mut state = self.state.lock().expect("snapshot state");
4413
4423
  if !state
4414
4424
  .latest
@@ -5039,7 +5049,7 @@ impl NativeStore {
5039
5049
  depth: 1,
5040
5050
  });
5041
5051
  }
5042
- let identity = root.stamp.identity;
5052
+ let identity = root.stamp.identity.file();
5043
5053
  let graph = GraphCursor {
5044
5054
  claimant: str_field(context, "claimant")?.to_owned(),
5045
5055
  context: context.clone(),
@@ -5199,7 +5209,7 @@ impl NativeStore {
5199
5209
  &graph.context,
5200
5210
  graph.remaining.deadline_unix_ms,
5201
5211
  )?;
5202
- let identity = snapshot.stamp.identity;
5212
+ let identity = snapshot.stamp.identity.file();
5203
5213
  if !graph.seen.insert(identity)
5204
5214
  && graph.request["query"]["kind"].as_str() != Some("direct_sidechains")
5205
5215
  {
@@ -8235,6 +8245,64 @@ mod tests {
8235
8245
  &Cancellation::default(),
8236
8246
  );
8237
8247
  assert_eq!(zero["status"].as_str(), Some("invalid_request"));
8248
+ let size = std::fs::metadata(&codex.path).unwrap().len();
8249
+ for tail_bytes in [size, size - 1, 1024 * 1024] {
8250
+ let covered = finish(
8251
+ &store,
8252
+ store.request(
8253
+ &windowed_acquire(&codex.path, tail_bytes),
8254
+ &owner,
8255
+ &Cancellation::default(),
8256
+ ),
8257
+ &owner,
8258
+ );
8259
+ assert_eq!(
8260
+ covered["reason"].as_str(),
8261
+ Some("tail_bytes requires a Claude source"),
8262
+ "{tail_bytes}: {covered:?}"
8263
+ );
8264
+ }
8265
+ let whole = finish(
8266
+ &store,
8267
+ store.request(&acquire(&codex.path), &owner, &Cancellation::default()),
8268
+ &owner,
8269
+ );
8270
+ assert_eq!(whole["status"].as_str(), Some("ok"), "{whole:?}");
8271
+ let cached = finish(
8272
+ &store,
8273
+ store.request(
8274
+ &windowed_acquire(&codex.path, 1024 * 1024),
8275
+ &owner,
8276
+ &Cancellation::default(),
8277
+ ),
8278
+ &owner,
8279
+ );
8280
+ assert_eq!(cached["status"].as_str(), Some("invalid_request"));
8281
+ assert_eq!(
8282
+ cached["reason"].as_str(),
8283
+ Some("tail_bytes requires a Claude source")
8284
+ );
8285
+ }
8286
+
8287
+ #[test]
8288
+ fn windowed_root_attached_to_itself_is_not_its_own_child() {
8289
+ let source = Source::new(&users(0..200));
8290
+ let store = windowed_store();
8291
+ let owner = context("a");
8292
+ let root = windowed(&store, &source.path, 4096, &owner);
8293
+ let (_, _, first) = expected_window(&source.path, 4096);
8294
+ assert!(first > 0);
8295
+ let records = graph_records(
8296
+ &store,
8297
+ &graph_request(
8298
+ &root,
8299
+ json!({"kind":"sidechain_membership","order":"forward"}),
8300
+ vec![source.path.to_string_lossy().into_owned()],
8301
+ json!([]),
8302
+ ),
8303
+ &owner,
8304
+ );
8305
+ assert!(records.is_empty(), "{records:?}");
8238
8306
  }
8239
8307
 
8240
8308
  #[test]
@@ -470,7 +470,7 @@ impl LabelPreparation {
470
470
  session_id: self.source.session_id.clone(),
471
471
  chunks: self.source.chunks.clone(),
472
472
  activity: Arc::new(self.activity),
473
- window_start: 0,
473
+ window_start: self.source.window_start,
474
474
  committed_bytes: self.source.committed_bytes,
475
475
  provisional_tail: self.source.provisional_tail,
476
476
  fence: self.source.fence.clone(),
@@ -1042,4 +1042,26 @@ mod tests {
1042
1042
  "labels:execution"
1043
1043
  );
1044
1044
  }
1045
+
1046
+ #[test]
1047
+ fn finish_keeps_the_source_window_start() {
1048
+ let mut snapshot = source(vec![user(0, "prompt"), user(1, "later")]);
1049
+ {
1050
+ let windowed = Arc::get_mut(&mut snapshot).unwrap();
1051
+ windowed.window_start = 1000;
1052
+ windowed.stamp.identity.window_base = 1024;
1053
+ }
1054
+ let binding = binding("execution");
1055
+ let cancel = Cancellation::default();
1056
+ let mut stage =
1057
+ LabelPreparation::new(snapshot, binding.clone(), limits(), 8 * PAGE_BYTES, None)
1058
+ .unwrap();
1059
+ stage.next_page("page1".into(), &binding, &cancel).unwrap();
1060
+ assert!(stage
1061
+ .submit("page1", &[true, false], &binding, &cancel)
1062
+ .unwrap());
1063
+ let derived = stage.finish(&binding, &cancel).unwrap().0;
1064
+ assert_eq!(derived.window_start, 1000);
1065
+ assert_eq!(derived.stamp.identity.window_base, 1024);
1066
+ }
1045
1067
  }
@@ -35,13 +35,22 @@ impl NativeStore {
35
35
  .prepared_loads
36
36
  .keys()
37
37
  .filter(|identity| {
38
- identity.file() == current.identity.file() && **identity != current.identity
38
+ current.identity.window_base > 0
39
+ && identity.window_base > 0
40
+ && identity.file() == current.identity.file()
41
+ && **identity != current.identity
39
42
  })
40
43
  .copied()
41
44
  .collect();
42
45
  for identity in superseded {
43
46
  state.prepared_loads.remove(&identity);
44
- state.loads.remove(&identity);
47
+ if state
48
+ .loads
49
+ .get(&identity)
50
+ .is_some_and(|slot| Arc::strong_count(slot) == 1)
51
+ {
52
+ state.loads.remove(&identity);
53
+ }
45
54
  }
46
55
  if let Some((slot, touched)) = state.prepared_loads.get_mut(&current.identity) {
47
56
  if Self::matches_prefix(current, slot.stamp)
@@ -65,7 +74,15 @@ impl NativeStore {
65
74
  };
66
75
  let stamp = pinned.as_ref().map_or(current, |slot| slot.stamp);
67
76
  let outcome = if let Some(slot) = pinned {
68
- self.resume_warm_root(slot, classifier, context, bounds, cancel, usage)
77
+ self.resume_warm_root(
78
+ slot,
79
+ classifier,
80
+ context,
81
+ bounds,
82
+ tail_bytes(request)?.is_some(),
83
+ cancel,
84
+ usage,
85
+ )
69
86
  } else {
70
87
  self.acquire(request, context, cancel, usage)
71
88
  };
@@ -152,6 +169,7 @@ impl NativeStore {
152
169
  classifier: &Value,
153
170
  context: &Value,
154
171
  bounds: WorkLimits,
172
+ windowed: bool,
155
173
  cancel: &Cancellation,
156
174
  usage: &mut [u64; 18],
157
175
  ) -> Result<(Value, Option<String>, Option<String>), SnapshotError> {
@@ -173,6 +191,7 @@ impl NativeStore {
173
191
  used_source_bytes: 0,
174
192
  used_events: 0,
175
193
  stage: None,
194
+ windowed,
176
195
  busy: false,
177
196
  };
178
197
  {
@@ -364,6 +383,43 @@ mod root_warm_tests {
364
383
  std::fs::remove_dir_all(directory).unwrap();
365
384
  }
366
385
 
386
+ #[test]
387
+ fn whole_file_and_window_warms_keep_their_own_pins() {
388
+ let (directory, path) = source(4 * 1024 * 1024);
389
+ let store = NativeStore::new(&json!({"max_read_bytes_per_step":256*1024,"max_retained_bytes":128*1024*1024,"reserved_hook_accounted_bytes":4096,"max_leases":16,"reserved_hook_leases":1})).unwrap();
390
+ let context = context("alternating-views");
391
+ let whole = warm_request(&path, 256 * 1024);
392
+ let mut window = whole.clone();
393
+ window.insert("tail_bytes", json!(1024 * 1024));
394
+ let step = |request: &Value| {
395
+ let reply = store.request(request, &context, &Cancellation::default());
396
+ assert_eq!(reply["status"].as_str(), Some("ok"), "{reply:?}");
397
+ assert_eq!(reply["data"]["complete"].as_bool(), Some(false), "{reply:?}");
398
+ reply["data"]["source_offset"].as_u64().unwrap()
399
+ };
400
+ step(&whole);
401
+ let whole_offset = step(&whole);
402
+ assert!(whole_offset > 0);
403
+ step(&window);
404
+ let window_offset = step(&window);
405
+ assert!(window_offset > whole_offset);
406
+ assert_eq!(store.state.lock().unwrap().prepared_loads.len(), 2);
407
+ let advances = |request: &Value, from: u64| {
408
+ for _ in 0..4 {
409
+ let offset = step(request);
410
+ assert!(offset >= from, "{offset} < {from}");
411
+ if offset > from {
412
+ return;
413
+ }
414
+ }
415
+ panic!("view did not advance past {from}");
416
+ };
417
+ advances(&whole, whole_offset);
418
+ advances(&window, window_offset);
419
+ assert_eq!(store.state.lock().unwrap().prepared_loads.len(), 2);
420
+ std::fs::remove_dir_all(directory).unwrap();
421
+ }
422
+
367
423
  #[test]
368
424
  fn a_productive_deadline_keeps_the_partial_root() {
369
425
  let (directory, path) = source(1024 * 1024);
File without changes