cc-transcript 14.40.0__tar.gz → 14.41.0__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 (198) hide show
  1. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/PKG-INFO +1 -1
  2. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/snapshot_schema/request.schema.json +115 -8
  3. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/snapshot_schema/response.schema.json +45 -0
  4. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/pyproject.toml +1 -1
  5. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/command.rs +163 -3
  6. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot.rs +14 -0
  7. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_prepared_service.rs +229 -5
  8. cc_transcript-14.41.0/rust/crates/core/src/snapshot_regressions.rs +1324 -0
  9. cc_transcript-14.40.0/rust/crates/core/src/snapshot_regressions.rs +0 -505
  10. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/Cargo.lock +0 -0
  11. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/Cargo.toml +0 -0
  12. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/LICENSE +0 -0
  13. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/README.md +0 -0
  14. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/__init__.py +0 -0
  15. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/__init__.pyi +0 -0
  16. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/_native.pyi +0 -0
  17. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/activity.py +0 -0
  18. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/activity_probe.py +0 -0
  19. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/builders.py +0 -0
  20. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/codex.py +0 -0
  21. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/command.py +0 -0
  22. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/context.py +0 -0
  23. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/corrections.py +0 -0
  24. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/cost.py +0 -0
  25. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/decision_store.py +0 -0
  26. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/decisions.py +0 -0
  27. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/discovery.py +0 -0
  28. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/disktruth.py +0 -0
  29. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/evidence.py +0 -0
  30. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/extract/__init__.py +0 -0
  31. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/extract/correct.py +0 -0
  32. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/facts.py +0 -0
  33. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/filterspec.py +0 -0
  34. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/heartbeats.py +0 -0
  35. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/ids.py +0 -0
  36. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/judge/__init__.py +0 -0
  37. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/judge/llm.py +0 -0
  38. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/judge/similar.py +0 -0
  39. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/judge/verdicts.py +0 -0
  40. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/ledger.py +0 -0
  41. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/literals.py +0 -0
  42. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/__init__.py +0 -0
  43. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/candidates.py +0 -0
  44. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/confidence.py +0 -0
  45. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/engine.py +0 -0
  46. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/formats.py +0 -0
  47. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/sampling.py +0 -0
  48. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/signals.py +0 -0
  49. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/sourcekind.py +0 -0
  50. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/spec.py +0 -0
  51. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/mining/store.py +0 -0
  52. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/models.py +0 -0
  53. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/nlp.py +0 -0
  54. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/notifications.py +0 -0
  55. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/parser.py +0 -0
  56. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/py.typed +0 -0
  57. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/query.py +0 -0
  58. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/render.py +0 -0
  59. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/sentiment/__init__.py +0 -0
  60. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/sentiment/buckets.py +0 -0
  61. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/sentiment/data/afinn-en-165.tsv +0 -0
  62. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/sentiment/data/domain_overrides.tsv +0 -0
  63. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/sentiment/data/en-ewt.udpipe +0 -0
  64. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/sentiment/engine.py +0 -0
  65. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/sentiment/lexicon.py +0 -0
  66. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/sentiment/scorespec.py +0 -0
  67. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/snapshot_schema/config.schema.json +0 -0
  68. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/snapshot_schema/context.schema.json +0 -0
  69. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/snapshot_schema/tool_registry.schema.json +0 -0
  70. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/snapshots.py +0 -0
  71. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/synthetic.py +0 -0
  72. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/tools.py +0 -0
  73. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/cc_transcript/watch.py +0 -0
  74. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/Cargo.toml +0 -0
  75. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/blame.rs +0 -0
  76. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/corpus.rs +0 -0
  77. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/corrections.rs +0 -0
  78. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/digest.rs +0 -0
  79. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/facts.rs +0 -0
  80. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/grep.rs +0 -0
  81. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/list.rs +0 -0
  82. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/mod.rs +0 -0
  83. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/scratchpad.rs +0 -0
  84. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/show.rs +0 -0
  85. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/slice.rs +0 -0
  86. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/stats.rs +0 -0
  87. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/commands/watch.rs +0 -0
  88. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/lib.rs +0 -0
  89. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/output.rs +0 -0
  90. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/target.rs +0 -0
  91. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/cli/src/timearg.rs +0 -0
  92. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/Cargo.toml +0 -0
  93. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/benches/parse.rs +0 -0
  94. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/benches/render.rs +0 -0
  95. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/benches/toolcall.rs +0 -0
  96. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/activity.rs +0 -0
  97. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/actor.rs +0 -0
  98. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/blame.rs +0 -0
  99. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/buckets.rs +0 -0
  100. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/codex/discovery.rs +0 -0
  101. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/codex/lower.rs +0 -0
  102. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/codex/mod.rs +0 -0
  103. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/codex/parse.rs +0 -0
  104. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/codex/probe.rs +0 -0
  105. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/codex/protocol.rs +0 -0
  106. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/codex/types.rs +0 -0
  107. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/context.rs +0 -0
  108. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/corrections.rs +0 -0
  109. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/cost.rs +0 -0
  110. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/discovery.rs +0 -0
  111. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/facts.rs +0 -0
  112. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/feedback.rs +0 -0
  113. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/filter.rs +0 -0
  114. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/gateway.rs +0 -0
  115. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/ids.rs +0 -0
  116. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/judge.rs +0 -0
  117. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/lib.rs +0 -0
  118. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/literals/command.rs +0 -0
  119. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/literals/corrections.rs +0 -0
  120. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/literals/feedback.rs +0 -0
  121. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/literals/mining.rs +0 -0
  122. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/literals/mod.rs +0 -0
  123. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/literals/protocol.rs +0 -0
  124. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/notifications.rs +0 -0
  125. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/parse.rs +0 -0
  126. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/protocol.rs +0 -0
  127. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/pystr.rs +0 -0
  128. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/query.rs +0 -0
  129. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/render.rs +0 -0
  130. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/rng.rs +0 -0
  131. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/scan.rs +0 -0
  132. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/scan_checkpoint.rs +0 -0
  133. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/scan_grep.rs +0 -0
  134. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/scan_grep_stream.rs +0 -0
  135. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/scan_grep_stream_tests.rs +0 -0
  136. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/scan_index.rs +0 -0
  137. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/scan_projection.rs +0 -0
  138. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/scan_regressions.rs +0 -0
  139. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/scan_stream.rs +0 -0
  140. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/schema.rs +0 -0
  141. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_activity.rs +0 -0
  142. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_codec.rs +0 -0
  143. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_codex_append.rs +0 -0
  144. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_labels.rs +0 -0
  145. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_ledger.rs +0 -0
  146. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_ledger_tests.rs +0 -0
  147. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_memory.rs +0 -0
  148. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_owned.rs +0 -0
  149. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_prepared.rs +0 -0
  150. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_prepared_disk.rs +0 -0
  151. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_projection.rs +0 -0
  152. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_root_warm.rs +0 -0
  153. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/snapshot_text.rs +0 -0
  154. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/sqlite.rs +0 -0
  155. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/toolcall.rs +0 -0
  156. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/types.rs +0 -0
  157. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/value.rs +0 -0
  158. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/src/watch.rs +0 -0
  159. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/tests/sonic_arena_model.rs +0 -0
  160. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/core/tests/std_allocation_model.rs +0 -0
  161. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/Cargo.toml +0 -0
  162. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/build.rs +0 -0
  163. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/data/command_prefix_pins.tsv +0 -0
  164. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/actor_bridge.rs +0 -0
  165. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/bin/stub_gen.rs +0 -0
  166. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/codex.rs +0 -0
  167. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/command.rs +0 -0
  168. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/context.rs +0 -0
  169. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/corrections.rs +0 -0
  170. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/discovery.rs +0 -0
  171. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/feedback.rs +0 -0
  172. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/judge.rs +0 -0
  173. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/lexicon.rs +0 -0
  174. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/lib.rs +0 -0
  175. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/mining.rs +0 -0
  176. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/nlp.rs +0 -0
  177. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/python.rs +0 -0
  178. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/render.rs +0 -0
  179. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/score.rs +0 -0
  180. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/snapshot_decode.rs +0 -0
  181. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/snapshots.rs +0 -0
  182. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/sqlite.rs +0 -0
  183. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/toolcall.rs +0 -0
  184. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/attachment.rs +0 -0
  185. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/blocks.rs +0 -0
  186. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/command.rs +0 -0
  187. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/convert.rs +0 -0
  188. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/dunder.rs +0 -0
  189. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/events.rs +0 -0
  190. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/meta.rs +0 -0
  191. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/mod.rs +0 -0
  192. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/print.rs +0 -0
  193. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/store.rs +0 -0
  194. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/system.rs +0 -0
  195. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/toolcall.rs +0 -0
  196. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/toolresult.rs +0 -0
  197. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/rust/crates/py/src/views/transcript.rs +0 -0
  198. {cc_transcript-14.40.0 → cc_transcript-14.41.0}/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.40.0
3
+ Version: 14.41.0
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -1143,6 +1143,40 @@
1143
1143
  "title": "PreparedErrorPredicate",
1144
1144
  "type": "object"
1145
1145
  },
1146
+ "PreparedGlobPredicate": {
1147
+ "additionalProperties": false,
1148
+ "properties": {
1149
+ "kind": {
1150
+ "enum": [
1151
+ "has_edit_to",
1152
+ "has_read_glob"
1153
+ ],
1154
+ "title": "Kind",
1155
+ "type": "string"
1156
+ },
1157
+ "subagents": {
1158
+ "const": true,
1159
+ "title": "Subagents",
1160
+ "type": "boolean"
1161
+ },
1162
+ "values": {
1163
+ "items": {
1164
+ "maxLength": 1048576,
1165
+ "type": "string"
1166
+ },
1167
+ "maxItems": 256,
1168
+ "title": "Values",
1169
+ "type": "array"
1170
+ }
1171
+ },
1172
+ "required": [
1173
+ "kind",
1174
+ "values",
1175
+ "subagents"
1176
+ ],
1177
+ "title": "PreparedGlobPredicate",
1178
+ "type": "object"
1179
+ },
1146
1180
  "PreparedInputs": {
1147
1181
  "additionalProperties": false,
1148
1182
  "properties": {
@@ -1170,10 +1204,8 @@
1170
1204
  "kind": {
1171
1205
  "enum": [
1172
1206
  "has_command",
1173
- "has_edit_to",
1174
1207
  "has_skill",
1175
- "has_skill_suffix",
1176
- "has_read_glob"
1208
+ "has_skill_suffix"
1177
1209
  ],
1178
1210
  "title": "Kind",
1179
1211
  "type": "string"
@@ -1239,14 +1271,40 @@
1239
1271
  "title": "PreparedOverridePredicate",
1240
1272
  "type": "object"
1241
1273
  },
1274
+ "PreparedRegexPredicate": {
1275
+ "additionalProperties": false,
1276
+ "properties": {
1277
+ "kind": {
1278
+ "const": "has_command_regex",
1279
+ "title": "Kind",
1280
+ "type": "string"
1281
+ },
1282
+ "pattern": {
1283
+ "maxLength": 1048576,
1284
+ "title": "Pattern",
1285
+ "type": "string"
1286
+ },
1287
+ "subagents": {
1288
+ "const": true,
1289
+ "title": "Subagents",
1290
+ "type": "boolean"
1291
+ }
1292
+ },
1293
+ "required": [
1294
+ "kind",
1295
+ "pattern",
1296
+ "subagents"
1297
+ ],
1298
+ "title": "PreparedRegexPredicate",
1299
+ "type": "object"
1300
+ },
1242
1301
  "PreparedToolPredicate": {
1243
1302
  "additionalProperties": false,
1244
1303
  "properties": {
1245
1304
  "kind": {
1246
1305
  "enum": [
1247
1306
  "has_tool",
1248
- "has_read",
1249
- "has_command_regex"
1307
+ "has_read"
1250
1308
  ],
1251
1309
  "title": "Kind",
1252
1310
  "type": "string"
@@ -1404,6 +1462,49 @@
1404
1462
  "limits": {
1405
1463
  "$ref": "#/$defs/Limits"
1406
1464
  },
1465
+ "observers": {
1466
+ "anyOf": [
1467
+ {
1468
+ "items": {
1469
+ "discriminator": {
1470
+ "mapping": {
1471
+ "has_command": "#/$defs/PreparedListPredicate",
1472
+ "has_edit": "#/$defs/PreparedErrorPredicate",
1473
+ "has_error": "#/$defs/PreparedErrorPredicate",
1474
+ "has_override": "#/$defs/PreparedOverridePredicate",
1475
+ "has_read": "#/$defs/PreparedToolPredicate",
1476
+ "has_skill": "#/$defs/PreparedListPredicate",
1477
+ "has_skill_suffix": "#/$defs/PreparedListPredicate",
1478
+ "has_tool": "#/$defs/PreparedToolPredicate"
1479
+ },
1480
+ "propertyName": "kind"
1481
+ },
1482
+ "oneOf": [
1483
+ {
1484
+ "$ref": "#/$defs/PreparedToolPredicate"
1485
+ },
1486
+ {
1487
+ "$ref": "#/$defs/PreparedListPredicate"
1488
+ },
1489
+ {
1490
+ "$ref": "#/$defs/PreparedOverridePredicate"
1491
+ },
1492
+ {
1493
+ "$ref": "#/$defs/PreparedErrorPredicate"
1494
+ }
1495
+ ]
1496
+ },
1497
+ "maxItems": 32,
1498
+ "minItems": 1,
1499
+ "type": "array"
1500
+ },
1501
+ {
1502
+ "type": "null"
1503
+ }
1504
+ ],
1505
+ "default": null,
1506
+ "title": "Observers"
1507
+ },
1407
1508
  "operation": {
1408
1509
  "const": "query_graph",
1409
1510
  "title": "Operation",
@@ -1414,13 +1515,13 @@
1414
1515
  "mapping": {
1415
1516
  "deep_predicate_inputs": "#/$defs/PreparedInputs",
1416
1517
  "has_command": "#/$defs/PreparedListPredicate",
1417
- "has_command_regex": "#/$defs/PreparedToolPredicate",
1518
+ "has_command_regex": "#/$defs/PreparedRegexPredicate",
1418
1519
  "has_edit": "#/$defs/PreparedErrorPredicate",
1419
- "has_edit_to": "#/$defs/PreparedListPredicate",
1520
+ "has_edit_to": "#/$defs/PreparedGlobPredicate",
1420
1521
  "has_error": "#/$defs/PreparedErrorPredicate",
1421
1522
  "has_override": "#/$defs/PreparedOverridePredicate",
1422
1523
  "has_read": "#/$defs/PreparedToolPredicate",
1423
- "has_read_glob": "#/$defs/PreparedListPredicate",
1524
+ "has_read_glob": "#/$defs/PreparedGlobPredicate",
1424
1525
  "has_skill": "#/$defs/PreparedListPredicate",
1425
1526
  "has_skill_suffix": "#/$defs/PreparedListPredicate",
1426
1527
  "has_tool": "#/$defs/PreparedToolPredicate"
@@ -1434,9 +1535,15 @@
1434
1535
  {
1435
1536
  "$ref": "#/$defs/PreparedToolPredicate"
1436
1537
  },
1538
+ {
1539
+ "$ref": "#/$defs/PreparedRegexPredicate"
1540
+ },
1437
1541
  {
1438
1542
  "$ref": "#/$defs/PreparedListPredicate"
1439
1543
  },
1544
+ {
1545
+ "$ref": "#/$defs/PreparedGlobPredicate"
1546
+ },
1440
1547
  {
1441
1548
  "$ref": "#/$defs/PreparedOverridePredicate"
1442
1549
  },
@@ -89,6 +89,7 @@
89
89
  "hydrated": "#/$defs/Hydrated",
90
90
  "loading": "#/$defs/Loading",
91
91
  "located": "#/$defs/Located",
92
+ "observed_scalar": "#/$defs/ObservedScalarResult",
92
93
  "prepared_graph": "#/$defs/PreparedGraphResult",
93
94
  "records": "#/$defs/RecordsResult",
94
95
  "released": "#/$defs/Released",
@@ -143,6 +144,9 @@
143
144
  {
144
145
  "$ref": "#/$defs/ScalarResult"
145
146
  },
147
+ {
148
+ "$ref": "#/$defs/ObservedScalarResult"
149
+ },
146
150
  {
147
151
  "$ref": "#/$defs/StringsResult"
148
152
  },
@@ -732,6 +736,7 @@
732
736
  "hydrated": "#/$defs/Hydrated",
733
737
  "loading": "#/$defs/Loading",
734
738
  "located": "#/$defs/Located",
739
+ "observed_scalar": "#/$defs/ObservedScalarResult",
735
740
  "prepared_graph": "#/$defs/PreparedGraphResult",
736
741
  "records": "#/$defs/RecordsResult",
737
742
  "released": "#/$defs/Released",
@@ -786,6 +791,9 @@
786
791
  {
787
792
  "$ref": "#/$defs/ScalarResult"
788
793
  },
794
+ {
795
+ "$ref": "#/$defs/ObservedScalarResult"
796
+ },
789
797
  {
790
798
  "$ref": "#/$defs/StringsResult"
791
799
  },
@@ -945,6 +953,43 @@
945
953
  "title": "Location",
946
954
  "type": "object"
947
955
  },
956
+ "ObservedScalarResult": {
957
+ "additionalProperties": false,
958
+ "properties": {
959
+ "kind": {
960
+ "const": "observed_scalar",
961
+ "title": "Kind",
962
+ "type": "string"
963
+ },
964
+ "observers": {
965
+ "items": {
966
+ "anyOf": [
967
+ {
968
+ "type": "boolean"
969
+ },
970
+ {
971
+ "type": "null"
972
+ }
973
+ ]
974
+ },
975
+ "maxItems": 32,
976
+ "minItems": 1,
977
+ "title": "Observers",
978
+ "type": "array"
979
+ },
980
+ "value": {
981
+ "title": "Value",
982
+ "type": "boolean"
983
+ }
984
+ },
985
+ "required": [
986
+ "kind",
987
+ "value",
988
+ "observers"
989
+ ],
990
+ "title": "ObservedScalarResult",
991
+ "type": "object"
992
+ },
948
993
  "PreparedGraphResult": {
949
994
  "additionalProperties": false,
950
995
  "properties": {
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cc-transcript"
3
- version = "14.40.0" # informational — releases stamp the version from the git tag
3
+ version = "14.41.0" # 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"
@@ -124,6 +124,8 @@ pub struct Command {
124
124
  // A stage of a `|`/`|&` pipeline: its stdout is consumed by the pipe. Set at parse time.
125
125
  #[doc(hidden)]
126
126
  pub pipe_stage: bool,
127
+ #[doc(hidden)]
128
+ pub inherits_heredoc: bool,
127
129
  }
128
130
 
129
131
  impl PartialEq for Command {
@@ -219,7 +221,7 @@ impl Command {
219
221
  // Parity: command.py Command.unwrapped — returns self when nothing is stripped.
220
222
  pub fn unwrapped(&self) -> Command {
221
223
  let argv = self.argv();
222
- let stripped = strip_wrappers(&argv, &self.words);
224
+ let stripped = self.stripped(&argv);
223
225
  if stripped.len() == argv.len() {
224
226
  return self.clone();
225
227
  }
@@ -239,12 +241,49 @@ impl Command {
239
241
  host_delta: self.host_delta,
240
242
  contexts: self.contexts.clone(),
241
243
  pipe_stage: self.pipe_stage,
244
+ inherits_heredoc: self.inherits_heredoc,
245
+ }
246
+ }
247
+
248
+ // zsh runs `-v` as a program once an option it does not know follows it, and a wrapper, a path, a
249
+ // quote, an escape or an expansion can each make a shell run something else. Only the bare
250
+ // spelling is provably the builtin's lookup, so the source text itself has to read as one.
251
+ fn command_lookup(&self, argv: &[&str]) -> bool {
252
+ let tokens: Vec<&str> = self
253
+ .raw
254
+ .split([' ', '\t'])
255
+ .filter(|token| !token.is_empty())
256
+ .collect();
257
+ let silencers = tokens
258
+ .iter()
259
+ .rev()
260
+ .take_while(|token| LOOKUP_SILENCERS.contains(token))
261
+ .count();
262
+ let flags = argv
263
+ .iter()
264
+ .skip(1)
265
+ .take_while(|arg| lookup_flag(arg))
266
+ .count();
267
+ argv.first() == Some(&"command")
268
+ && tokens[..tokens.len() - silencers] == *argv
269
+ && argv[1..=flags].iter().any(|flag| flag.contains(['v', 'V']))
270
+ && argv[1 + flags..].iter().all(|name| program_name(name))
271
+ && self.redirects.iter().all(silencer)
272
+ && !self.inherits_heredoc
273
+ }
274
+
275
+ fn stripped<'a>(&self, argv: &[&'a str]) -> Vec<&'a str> {
276
+ if self.command_lookup(argv) {
277
+ argv.to_vec()
278
+ } else {
279
+ strip_wrappers(argv, &self.words)
242
280
  }
243
281
  }
244
282
 
245
283
  // Parity: command.py Command.prefix — over the unwrapped argv; empty pick falls back to the tool.
246
284
  pub fn prefix(&self) -> Option<String> {
247
- let argv = strip_wrappers(&self.argv(), &self.words);
285
+ let argv = self.argv();
286
+ let argv = self.stripped(&argv);
248
287
  match argv.first() {
249
288
  None | Some(&"") => None,
250
289
  Some(&exe) if MULTI_LEVEL_TOOLS.contains(&exe) => Some(
@@ -263,7 +302,8 @@ impl Command {
263
302
  if argv.is_empty() {
264
303
  return false;
265
304
  }
266
- let unwrapped = strip_wrappers(&self.argv(), &self.words);
305
+ let own = self.argv();
306
+ let unwrapped = self.stripped(&own);
267
307
  unwrapped.len() >= argv.len() && unwrapped[..argv.len()] == *argv
268
308
  }
269
309
 
@@ -974,6 +1014,9 @@ fn with_redirects(
974
1014
  if redirects.is_empty() {
975
1015
  return parts;
976
1016
  }
1017
+ let heredoc = redirects
1018
+ .iter()
1019
+ .any(|redirect| matches!(redirect.kind, NodeKind::HereDoc { .. }));
977
1020
  let redirects = build_redirects(redirects, src);
978
1021
  if parts.is_empty() {
979
1022
  return vec![(
@@ -988,6 +1031,7 @@ fn with_redirects(
988
1031
  }
989
1032
  for (cmd, _) in &mut parts {
990
1033
  cmd.redirects.extend(redirects.iter().cloned());
1034
+ cmd.inherits_heredoc |= heredoc;
991
1035
  }
992
1036
  parts
993
1037
  }
@@ -1395,6 +1439,34 @@ fn wrapper_skip(wrapper: &str, tokens: &[&str]) -> usize {
1395
1439
  i.min(tokens.len())
1396
1440
  }
1397
1441
 
1442
+ const LOOKUP_SILENCERS: &[&str] = &[
1443
+ ">/dev/null",
1444
+ "1>/dev/null",
1445
+ "2>/dev/null",
1446
+ "&>/dev/null",
1447
+ "2>&1",
1448
+ ">&2",
1449
+ "1>&2",
1450
+ ];
1451
+
1452
+ fn lookup_flag(arg: &str) -> bool {
1453
+ arg.strip_prefix('-')
1454
+ .is_some_and(|flags| !flags.is_empty() && flags.bytes().all(|b| b"pvV".contains(&b)))
1455
+ }
1456
+
1457
+ fn silencer(redirect: &Redirect) -> bool {
1458
+ let fd = redirect.fd.map(|fd| fd.to_string()).unwrap_or_default();
1459
+ LOOKUP_SILENCERS.contains(&format!("{fd}{}{}", redirect.op, redirect.target).as_str())
1460
+ }
1461
+
1462
+ fn program_name(arg: &str) -> bool {
1463
+ !arg.is_empty()
1464
+ && !arg.starts_with('-')
1465
+ && arg
1466
+ .bytes()
1467
+ .all(|b| b.is_ascii_alphanumeric() || b"_.+/-".contains(&b))
1468
+ }
1469
+
1398
1470
  // Drop each leading wrapper plus its skippable args. The head matches on the dequoted word value
1399
1471
  // (`"sudo"` → `sudo`), basenamed (`/usr/bin/sudo` → `sudo`); argv and words slice in lockstep.
1400
1472
  fn strip_wrappers<'a>(argv: &[&'a str], words: &[Word]) -> Vec<&'a str> {
@@ -1646,6 +1718,94 @@ mod tests {
1646
1718
  }
1647
1719
  }
1648
1720
 
1721
+ #[test]
1722
+ fn bare_command_lookup_wraps_nothing() {
1723
+ for raw in [
1724
+ "command -v orca ccx cc-notes",
1725
+ "command -V rm",
1726
+ "command -pv rm",
1727
+ "command -p -v rm",
1728
+ "command -v sudo rm",
1729
+ "command -v /usr/bin/g++ python3.13",
1730
+ "command -v",
1731
+ "command -v rm >/dev/null 2>&1",
1732
+ "command -v rm &>/dev/null",
1733
+ "command -v rm 2>/dev/null",
1734
+ "command\t-v rm >&2",
1735
+ ] {
1736
+ let line = CommandLine::parse(raw);
1737
+ let cmd = line.primary().unwrap();
1738
+ assert_eq!(cmd.unwrapped(), *cmd, "unwrapping {raw}");
1739
+ assert_eq!(cmd.prefix().as_deref(), Some("command"), "prefix of {raw}");
1740
+ assert!(!cmd.runs(&["rm"]), "{raw} runs nothing");
1741
+ }
1742
+ for raw in [
1743
+ "if ! command -v rm >/dev/null 2>&1; then echo y; fi",
1744
+ "x=$(command -v rm 2>/dev/null)",
1745
+ "(command -v rm) >/dev/null 2>&1",
1746
+ ] {
1747
+ let line = CommandLine::parse(raw);
1748
+ let lookups: Vec<String> = line
1749
+ .parts
1750
+ .iter()
1751
+ .map(|(cmd, _)| cmd.unwrapped().executable)
1752
+ .filter(|executable| executable != "echo")
1753
+ .collect();
1754
+ assert_eq!(lookups, ["command"], "unwrapping {raw}");
1755
+ }
1756
+ }
1757
+
1758
+ #[test]
1759
+ fn command_the_shell_may_not_read_as_a_lookup_still_wraps() {
1760
+ for raw in [
1761
+ "command rm /x",
1762
+ "command -p rm /x",
1763
+ "command -- rm /x",
1764
+ "command -v -- rm /x",
1765
+ "command -v -i rm /x",
1766
+ "command -i -v rm /x",
1767
+ "command -v - rm /x",
1768
+ "command -v >/dev/null -i rm /x",
1769
+ "command -$f rm /x",
1770
+ "command -${v} rm /x",
1771
+ "command \"-v\" rm /x",
1772
+ "command -v $X rm /x",
1773
+ "command -v \"$X\" rm /x",
1774
+ "command -v * rm /x",
1775
+ "command -v ~ rm /x",
1776
+ "command -v \"\"~ rm /x",
1777
+ "command -v =rm /x rm",
1778
+ "command $(printf env) -v rm /x",
1779
+ "command -v $(printf -- -i) rm /x",
1780
+ "command `printf env` -v rm /x",
1781
+ "command -v rm ignored<(rm /x)",
1782
+ "command >\"/dev/null$(rm /x)\" -v rm",
1783
+ "command -v rm > /dev/null",
1784
+ "command -v rm >/tmp/out",
1785
+ "command -v rm <<EOF\n$(rm /x)\nEOF",
1786
+ "(command -v rm) >\"$(printf /dev/null)\"",
1787
+ "(command -v rm) <<EOF\n$(printf x)\nEOF",
1788
+ "{ command -v rm; } <<EOF\n$(printf x)\nEOF",
1789
+ "if command -v rm; then :; fi <<EOF\n$(printf x)\nEOF",
1790
+ "(command -v rm) <<<x",
1791
+ "{ command -v rm; } >/tmp/out",
1792
+ "command\\\nx -v rm /x",
1793
+ "\\command -v rm /x",
1794
+ "A=1 command -v rm /x",
1795
+ "./command -v rm /x",
1796
+ "/usr/bin/command -v rm /x",
1797
+ "command command -v rm /x",
1798
+ "sudo command -v rm /x",
1799
+ "/usr/bin/env command -v rm /x",
1800
+ "env -u command -v rm /x",
1801
+ ] {
1802
+ let line = CommandLine::parse(raw);
1803
+ let cmd = line.head().unwrap().unwrapped();
1804
+ assert_ne!(cmd.executable, "command", "unwrapping {raw}");
1805
+ assert!(cmd.argv().contains(&"rm"), "unwrapping {raw}");
1806
+ }
1807
+ }
1808
+
1649
1809
  #[test]
1650
1810
  fn operand_skip_only_consumes_a_digit_led_duration() {
1651
1811
  // A non-digit token in the duration slot is the command, not the duration — never hidden.
@@ -1018,6 +1018,7 @@ struct PreparedQueryCursor {
1018
1018
  query: Value,
1019
1019
  pending: Option<PendingPreparedSource>,
1020
1020
  input_records: Option<VecDeque<String>>,
1021
+ observers: Observers,
1021
1022
  next: usize,
1022
1023
  page_output_bytes: usize,
1023
1024
  remaining: WorkLimits,
@@ -1684,6 +1685,7 @@ impl Charge<String> for PreparedQueryCursor {
1684
1685
  records.capacity() * size_of::<String>()
1685
1686
  + records.iter().map(String::capacity).sum::<usize>()
1686
1687
  })
1688
+ + self.observers.charge()
1687
1689
  }
1688
1690
  }
1689
1691
 
@@ -5062,6 +5064,13 @@ impl NativeStore {
5062
5064
  query,
5063
5065
  pending,
5064
5066
  input_records,
5067
+ observers:
5068
+ Observers {
5069
+ declared: _,
5070
+ allowance: _,
5071
+ witnessed: _,
5072
+ pending: observing,
5073
+ },
5065
5074
  next: _,
5066
5075
  page_output_bytes: _,
5067
5076
  remaining: _,
@@ -5084,6 +5093,11 @@ impl NativeStore {
5084
5093
  records.capacity() * size_of::<String>()
5085
5094
  + records.iter().map(String::capacity).sum::<usize>()
5086
5095
  })
5096
+ + observing.capacity() * size_of::<(usize, Value)>()
5097
+ + observing
5098
+ .iter()
5099
+ .map(|(_, query)| value_bytes(query))
5100
+ .sum::<usize>()
5087
5101
  }
5088
5102
 
5089
5103
  #[cfg(test)]