cc-transcript 14.33.0__tar.gz → 14.33.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.33.0 → cc_transcript-14.33.1}/PKG-INFO +1 -1
  2. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/pyproject.toml +1 -1
  3. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot.rs +58 -3
  4. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/toolcall.rs +39 -19
  5. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/Cargo.lock +0 -0
  6. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/Cargo.toml +0 -0
  7. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/LICENSE +0 -0
  8. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/README.md +0 -0
  9. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/__init__.py +0 -0
  10. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/__init__.pyi +0 -0
  11. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/_native.pyi +0 -0
  12. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/activity.py +0 -0
  13. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/activity_probe.py +0 -0
  14. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/builders.py +0 -0
  15. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/codex.py +0 -0
  16. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/command.py +0 -0
  17. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/context.py +0 -0
  18. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/corrections.py +0 -0
  19. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/cost.py +0 -0
  20. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/decision_store.py +0 -0
  21. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/decisions.py +0 -0
  22. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/discovery.py +0 -0
  23. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/disktruth.py +0 -0
  24. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/evidence.py +0 -0
  25. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/extract/__init__.py +0 -0
  26. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/extract/correct.py +0 -0
  27. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/facts.py +0 -0
  28. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/filterspec.py +0 -0
  29. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/heartbeats.py +0 -0
  30. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/ids.py +0 -0
  31. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/judge/__init__.py +0 -0
  32. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/judge/llm.py +0 -0
  33. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/judge/similar.py +0 -0
  34. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/judge/verdicts.py +0 -0
  35. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/ledger.py +0 -0
  36. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/literals.py +0 -0
  37. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/__init__.py +0 -0
  38. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/candidates.py +0 -0
  39. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/confidence.py +0 -0
  40. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/engine.py +0 -0
  41. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/formats.py +0 -0
  42. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/sampling.py +0 -0
  43. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/signals.py +0 -0
  44. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/sourcekind.py +0 -0
  45. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/spec.py +0 -0
  46. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/mining/store.py +0 -0
  47. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/models.py +0 -0
  48. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/nlp.py +0 -0
  49. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/notifications.py +0 -0
  50. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/parser.py +0 -0
  51. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/py.typed +0 -0
  52. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/query.py +0 -0
  53. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/render.py +0 -0
  54. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/sentiment/__init__.py +0 -0
  55. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/sentiment/buckets.py +0 -0
  56. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/sentiment/data/afinn-en-165.tsv +0 -0
  57. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/sentiment/data/domain_overrides.tsv +0 -0
  58. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/sentiment/data/en-ewt.udpipe +0 -0
  59. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/sentiment/engine.py +0 -0
  60. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/sentiment/lexicon.py +0 -0
  61. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/sentiment/scorespec.py +0 -0
  62. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/snapshot_schema/config.schema.json +0 -0
  63. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/snapshot_schema/context.schema.json +0 -0
  64. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/snapshot_schema/request.schema.json +0 -0
  65. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/snapshot_schema/response.schema.json +0 -0
  66. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/snapshot_schema/tool_registry.schema.json +0 -0
  67. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/snapshots.py +0 -0
  68. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/synthetic.py +0 -0
  69. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/tools.py +0 -0
  70. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/cc_transcript/watch.py +0 -0
  71. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/Cargo.toml +0 -0
  72. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/blame.rs +0 -0
  73. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/corpus.rs +0 -0
  74. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/corrections.rs +0 -0
  75. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/digest.rs +0 -0
  76. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/facts.rs +0 -0
  77. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/grep.rs +0 -0
  78. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/list.rs +0 -0
  79. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/mod.rs +0 -0
  80. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/scratchpad.rs +0 -0
  81. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/show.rs +0 -0
  82. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/slice.rs +0 -0
  83. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/stats.rs +0 -0
  84. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/commands/watch.rs +0 -0
  85. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/lib.rs +0 -0
  86. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/main.rs +0 -0
  87. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/output.rs +0 -0
  88. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/target.rs +0 -0
  89. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/cli/src/timearg.rs +0 -0
  90. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/Cargo.toml +0 -0
  91. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/benches/parse.rs +0 -0
  92. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/benches/render.rs +0 -0
  93. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/benches/toolcall.rs +0 -0
  94. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/activity.rs +0 -0
  95. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/actor.rs +0 -0
  96. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/blame.rs +0 -0
  97. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/buckets.rs +0 -0
  98. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/codex/discovery.rs +0 -0
  99. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/codex/lower.rs +0 -0
  100. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/codex/mod.rs +0 -0
  101. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/codex/parse.rs +0 -0
  102. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/codex/probe.rs +0 -0
  103. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/codex/protocol.rs +0 -0
  104. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/codex/types.rs +0 -0
  105. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/command.rs +0 -0
  106. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/context.rs +0 -0
  107. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/corrections.rs +0 -0
  108. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/cost.rs +0 -0
  109. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/discovery.rs +0 -0
  110. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/facts.rs +0 -0
  111. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/feedback.rs +0 -0
  112. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/filter.rs +0 -0
  113. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/gateway.rs +0 -0
  114. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/ids.rs +0 -0
  115. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/judge.rs +0 -0
  116. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/lib.rs +0 -0
  117. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/literals/command.rs +0 -0
  118. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/literals/corrections.rs +0 -0
  119. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/literals/feedback.rs +0 -0
  120. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/literals/mining.rs +0 -0
  121. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/literals/mod.rs +0 -0
  122. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/literals/protocol.rs +0 -0
  123. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/notifications.rs +0 -0
  124. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/parse.rs +0 -0
  125. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/protocol.rs +0 -0
  126. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/pystr.rs +0 -0
  127. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/query.rs +0 -0
  128. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/render.rs +0 -0
  129. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/rng.rs +0 -0
  130. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/scan.rs +0 -0
  131. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/scan_grep.rs +0 -0
  132. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/scan_regressions.rs +0 -0
  133. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/schema.rs +0 -0
  134. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_activity.rs +0 -0
  135. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_codec.rs +0 -0
  136. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_codex_append.rs +0 -0
  137. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_labels.rs +0 -0
  138. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_memory.rs +0 -0
  139. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_owned.rs +0 -0
  140. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_prepared.rs +0 -0
  141. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_prepared_disk.rs +0 -0
  142. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_prepared_service.rs +0 -0
  143. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_projection.rs +0 -0
  144. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_regressions.rs +0 -0
  145. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_root_warm.rs +0 -0
  146. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/snapshot_text.rs +0 -0
  147. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/sqlite.rs +0 -0
  148. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/types.rs +0 -0
  149. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/value.rs +0 -0
  150. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/core/src/watch.rs +0 -0
  151. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/Cargo.toml +0 -0
  152. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/build.rs +0 -0
  153. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/data/command_prefix_pins.tsv +0 -0
  154. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/actor_bridge.rs +0 -0
  155. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/bin/stub_gen.rs +0 -0
  156. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/codex.rs +0 -0
  157. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/command.rs +0 -0
  158. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/context.rs +0 -0
  159. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/corrections.rs +0 -0
  160. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/discovery.rs +0 -0
  161. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/feedback.rs +0 -0
  162. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/judge.rs +0 -0
  163. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/lexicon.rs +0 -0
  164. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/lib.rs +0 -0
  165. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/mining.rs +0 -0
  166. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/nlp.rs +0 -0
  167. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/python.rs +0 -0
  168. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/render.rs +0 -0
  169. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/score.rs +0 -0
  170. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/snapshot_decode.rs +0 -0
  171. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/snapshots.rs +0 -0
  172. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/sqlite.rs +0 -0
  173. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/toolcall.rs +0 -0
  174. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/attachment.rs +0 -0
  175. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/blocks.rs +0 -0
  176. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/command.rs +0 -0
  177. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/convert.rs +0 -0
  178. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/dunder.rs +0 -0
  179. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/events.rs +0 -0
  180. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/meta.rs +0 -0
  181. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/mod.rs +0 -0
  182. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/print.rs +0 -0
  183. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/store.rs +0 -0
  184. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/system.rs +0 -0
  185. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/toolcall.rs +0 -0
  186. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/toolresult.rs +0 -0
  187. {cc_transcript-14.33.0 → cc_transcript-14.33.1}/rust/crates/py/src/views/transcript.rs +0 -0
  188. {cc_transcript-14.33.0 → cc_transcript-14.33.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.33.0
3
+ Version: 14.33.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.33.0" # informational — releases stamp the version from the git tag
3
+ version = "14.33.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"
@@ -1325,14 +1325,24 @@ impl NativeStore {
1325
1325
  context: &Value,
1326
1326
  ) -> Result<String, SnapshotError> {
1327
1327
  self.authority(context, None)?;
1328
+ let definitions =
1329
+ crate::toolcall::ToolRegistrySnapshot::specs_from_json(specs).map_err(invalid)?;
1330
+ let fingerprint = crate::toolcall::ToolRegistrySnapshot::fingerprint_of(&definitions);
1331
+ if self
1332
+ .state
1333
+ .lock()
1334
+ .expect("snapshot state")
1335
+ .registries
1336
+ .contains_key(&fingerprint)
1337
+ {
1338
+ return Ok(fingerprint);
1339
+ }
1328
1340
  let charge = crate::snapshot_memory::value_charge(specs);
1329
1341
  let reserve = (charge.owned_capacity_bytes + charge.opaque_dom_accounted_bytes)
1330
1342
  .saturating_mul(4)
1331
1343
  .saturating_add(64 * 1024);
1332
1344
  let mut reservation = self.reserve_projection(context, reserve)?;
1333
- let registry =
1334
- crate::toolcall::ToolRegistrySnapshot::from_specs_json(specs).map_err(invalid)?;
1335
- let fingerprint = registry.fingerprint().to_owned();
1345
+ let registry = crate::toolcall::ToolRegistrySnapshot::from_specs(definitions);
1336
1346
  let allocations = registry.accounted_allocations();
1337
1347
  let bytes = allocations.iter().map(|(_, bytes)| *bytes).sum::<usize>()
1338
1348
  + allocations.capacity() * size_of::<(usize, usize)>()
@@ -11384,4 +11394,49 @@ mod tests {
11384
11394
  ));
11385
11395
  assert_eq!(state.transient_bytes, 0);
11386
11396
  }
11397
+
11398
+ #[test]
11399
+ fn reregistering_an_interned_registry_reserves_nothing() {
11400
+ let store = NativeStore::new(
11401
+ &json!({"max_retained_bytes":8*1024*1024,"reserved_hook_accounted_bytes":8*1024*1024}),
11402
+ )
11403
+ .unwrap();
11404
+ let hook = context("owner");
11405
+ let mut review = hook.clone();
11406
+ review.insert("admission", json!("review"));
11407
+ let other_uid = json!({"claimant":"owner","admission":"hook","authority":{"kind":"user","effective_uid":"0"},"registry_generation":hook["registry_generation"]});
11408
+ let specs = json!([{"name":"fetch","behaves_like":"Read","span_edit":null}]);
11409
+ let reordered = json!([{"span_edit":null,"behaves_like":"Read","name":"fetch"}]);
11410
+ let fingerprint = store.register_tool_registry(&specs, &hook).unwrap();
11411
+ let registered = store.state.lock().unwrap().registries.len();
11412
+ let first = Arc::clone(&store.state.lock().unwrap().registries[&fingerprint].snapshot);
11413
+ assert_eq!(
11414
+ store.register_tool_registry(&reordered, &review).unwrap(),
11415
+ fingerprint
11416
+ );
11417
+ assert_eq!(
11418
+ store
11419
+ .register_tool_registry(&specs, &other_uid)
11420
+ .unwrap_err()
11421
+ .status,
11422
+ Status::PermissionDenied
11423
+ );
11424
+ assert_eq!(
11425
+ store
11426
+ .register_tool_registry(
11427
+ &json!([{"name":"","behaves_like":"Read","span_edit":null}]),
11428
+ &hook
11429
+ )
11430
+ .unwrap_err()
11431
+ .status,
11432
+ Status::InvalidRequest
11433
+ );
11434
+ let state = store.state.lock().unwrap();
11435
+ assert_eq!(state.registries.len(), registered);
11436
+ assert!(Arc::ptr_eq(
11437
+ &first,
11438
+ &state.registries[&fingerprint].snapshot
11439
+ ));
11440
+ assert_eq!(state.transient_bytes, 0);
11441
+ }
11387
11442
  }
@@ -127,15 +127,21 @@ pub struct ToolRegistrySnapshot {
127
127
 
128
128
  impl ToolRegistrySnapshot {
129
129
  pub fn from_specs(specs: HashMap<String, McpToolSpec>) -> Arc<Self> {
130
- let value = sonic_rs::to_value(&specs).expect("tool registry serialization");
130
+ let fingerprint = Self::fingerprint_of(&specs);
131
+ Arc::new(Self { specs, fingerprint })
132
+ }
133
+
134
+ pub fn fingerprint_of(specs: &HashMap<String, McpToolSpec>) -> String {
135
+ let value = sonic_rs::to_value(specs).expect("tool registry serialization");
131
136
  let canonical = crate::ids::canonical_json(&value).expect("tool registry canonicalization");
132
- Arc::new(Self {
133
- specs,
134
- fingerprint: format!("{:x}", Sha256::digest(canonical.as_bytes())),
135
- })
137
+ format!("{:x}", Sha256::digest(canonical.as_bytes()))
136
138
  }
137
139
 
138
140
  pub fn from_specs_json(value: &Value) -> Result<Arc<Self>, String> {
141
+ Ok(Self::from_specs(Self::specs_from_json(value)?))
142
+ }
143
+
144
+ pub fn specs_from_json(value: &Value) -> Result<HashMap<String, McpToolSpec>, String> {
139
145
  let definitions = value
140
146
  .as_array()
141
147
  .ok_or_else(|| "tool registry definitions must be a list".to_string())?;
@@ -163,20 +169,18 @@ impl ToolRegistrySnapshot {
163
169
  }
164
170
  let definitions: Vec<ToolRegistryDefinition> =
165
171
  sonic_rs::from_value(value).map_err(|error| error.to_string())?;
166
- Ok(Self::from_specs(
167
- definitions
168
- .into_iter()
169
- .map(|definition| {
170
- (
171
- definition.name,
172
- McpToolSpec {
173
- behaves_like: definition.behaves_like,
174
- span_edit: definition.span_edit,
175
- },
176
- )
177
- })
178
- .collect(),
179
- ))
172
+ Ok(definitions
173
+ .into_iter()
174
+ .map(|definition| {
175
+ (
176
+ definition.name,
177
+ McpToolSpec {
178
+ behaves_like: definition.behaves_like,
179
+ span_edit: definition.span_edit,
180
+ },
181
+ )
182
+ })
183
+ .collect())
180
184
  }
181
185
 
182
186
  pub fn capture_scoped() -> Option<Arc<Self>> {
@@ -2396,6 +2400,22 @@ mod tests {
2396
2400
  assert_eq!(first.fingerprint(), reordered.fingerprint());
2397
2401
  assert_ne!(first.fingerprint(), changed.fingerprint());
2398
2402
  assert_eq!(first.fingerprint().len(), 64);
2403
+ for (raw, constructed) in [
2404
+ (
2405
+ r#"[{"name":"reader","behaves_like":"Read","span_edit":null},{"name":"writer","behaves_like":"Edit","span_edit":{"path":"file","content":"body","delete":null}}]"#,
2406
+ &first,
2407
+ ),
2408
+ (
2409
+ r#"[{"name":"reader","behaves_like":"Read","span_edit":null},{"name":"writer","behaves_like":"Edit","span_edit":{"path":"file","content":"changed","delete":null}}]"#,
2410
+ &changed,
2411
+ ),
2412
+ ] {
2413
+ let specs = ToolRegistrySnapshot::specs_from_json(&obj(raw)).unwrap();
2414
+ assert_eq!(
2415
+ ToolRegistrySnapshot::fingerprint_of(&specs),
2416
+ constructed.fingerprint()
2417
+ );
2418
+ }
2399
2419
  assert_eq!(
2400
2420
  ToolRegistrySnapshot::from_specs_json(&obj("[]"))
2401
2421
  .unwrap()
File without changes