cc-transcript 14.36.0__tar.gz → 14.37.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 (198) hide show
  1. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/PKG-INFO +2 -2
  2. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/extract/correct.py +61 -16
  3. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/pyproject.toml +2 -2
  4. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/Cargo.toml +0 -4
  5. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/lib.rs +22 -19
  6. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/python.rs +5 -1
  7. cc_transcript-14.36.0/rust/crates/cli/src/main.rs +0 -4
  8. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/Cargo.lock +0 -0
  9. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/Cargo.toml +0 -0
  10. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/LICENSE +0 -0
  11. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/README.md +0 -0
  12. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/__init__.py +0 -0
  13. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/__init__.pyi +0 -0
  14. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/_native.pyi +0 -0
  15. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/activity.py +0 -0
  16. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/activity_probe.py +0 -0
  17. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/builders.py +0 -0
  18. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/codex.py +0 -0
  19. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/command.py +0 -0
  20. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/context.py +0 -0
  21. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/corrections.py +0 -0
  22. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/cost.py +0 -0
  23. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/decision_store.py +0 -0
  24. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/decisions.py +0 -0
  25. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/discovery.py +0 -0
  26. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/disktruth.py +0 -0
  27. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/evidence.py +0 -0
  28. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/extract/__init__.py +0 -0
  29. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/facts.py +0 -0
  30. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/filterspec.py +0 -0
  31. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/heartbeats.py +0 -0
  32. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/ids.py +0 -0
  33. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/judge/__init__.py +0 -0
  34. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/judge/llm.py +0 -0
  35. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/judge/similar.py +0 -0
  36. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/judge/verdicts.py +0 -0
  37. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/ledger.py +0 -0
  38. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/literals.py +0 -0
  39. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/__init__.py +0 -0
  40. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/candidates.py +0 -0
  41. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/confidence.py +0 -0
  42. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/engine.py +0 -0
  43. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/formats.py +0 -0
  44. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/sampling.py +0 -0
  45. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/signals.py +0 -0
  46. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/sourcekind.py +0 -0
  47. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/spec.py +0 -0
  48. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/mining/store.py +0 -0
  49. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/models.py +0 -0
  50. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/nlp.py +0 -0
  51. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/notifications.py +0 -0
  52. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/parser.py +0 -0
  53. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/py.typed +0 -0
  54. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/query.py +0 -0
  55. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/render.py +0 -0
  56. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/sentiment/__init__.py +0 -0
  57. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/sentiment/buckets.py +0 -0
  58. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/sentiment/data/afinn-en-165.tsv +0 -0
  59. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/sentiment/data/domain_overrides.tsv +0 -0
  60. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/sentiment/data/en-ewt.udpipe +0 -0
  61. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/sentiment/engine.py +0 -0
  62. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/sentiment/lexicon.py +0 -0
  63. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/sentiment/scorespec.py +0 -0
  64. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/snapshot_schema/config.schema.json +0 -0
  65. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/snapshot_schema/context.schema.json +0 -0
  66. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/snapshot_schema/request.schema.json +0 -0
  67. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/snapshot_schema/response.schema.json +0 -0
  68. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/snapshot_schema/tool_registry.schema.json +0 -0
  69. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/snapshots.py +0 -0
  70. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/synthetic.py +0 -0
  71. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/tools.py +0 -0
  72. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/cc_transcript/watch.py +0 -0
  73. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/blame.rs +0 -0
  74. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/corpus.rs +0 -0
  75. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/corrections.rs +0 -0
  76. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/digest.rs +0 -0
  77. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/facts.rs +0 -0
  78. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/grep.rs +0 -0
  79. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/list.rs +0 -0
  80. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/mod.rs +0 -0
  81. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/scratchpad.rs +0 -0
  82. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/show.rs +0 -0
  83. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/slice.rs +0 -0
  84. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/stats.rs +0 -0
  85. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/commands/watch.rs +0 -0
  86. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/output.rs +0 -0
  87. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/target.rs +0 -0
  88. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/cli/src/timearg.rs +0 -0
  89. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/Cargo.toml +0 -0
  90. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/benches/parse.rs +0 -0
  91. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/benches/render.rs +0 -0
  92. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/benches/toolcall.rs +0 -0
  93. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/activity.rs +0 -0
  94. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/actor.rs +0 -0
  95. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/blame.rs +0 -0
  96. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/buckets.rs +0 -0
  97. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/codex/discovery.rs +0 -0
  98. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/codex/lower.rs +0 -0
  99. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/codex/mod.rs +0 -0
  100. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/codex/parse.rs +0 -0
  101. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/codex/probe.rs +0 -0
  102. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/codex/protocol.rs +0 -0
  103. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/codex/types.rs +0 -0
  104. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/command.rs +0 -0
  105. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/context.rs +0 -0
  106. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/corrections.rs +0 -0
  107. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/cost.rs +0 -0
  108. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/discovery.rs +0 -0
  109. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/facts.rs +0 -0
  110. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/feedback.rs +0 -0
  111. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/filter.rs +0 -0
  112. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/gateway.rs +0 -0
  113. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/ids.rs +0 -0
  114. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/judge.rs +0 -0
  115. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/lib.rs +0 -0
  116. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/literals/command.rs +0 -0
  117. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/literals/corrections.rs +0 -0
  118. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/literals/feedback.rs +0 -0
  119. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/literals/mining.rs +0 -0
  120. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/literals/mod.rs +0 -0
  121. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/literals/protocol.rs +0 -0
  122. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/notifications.rs +0 -0
  123. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/parse.rs +0 -0
  124. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/protocol.rs +0 -0
  125. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/pystr.rs +0 -0
  126. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/query.rs +0 -0
  127. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/render.rs +0 -0
  128. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/rng.rs +0 -0
  129. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/scan.rs +0 -0
  130. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/scan_checkpoint.rs +0 -0
  131. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/scan_grep.rs +0 -0
  132. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/scan_grep_stream.rs +0 -0
  133. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/scan_grep_stream_tests.rs +0 -0
  134. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/scan_index.rs +0 -0
  135. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/scan_projection.rs +0 -0
  136. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/scan_regressions.rs +0 -0
  137. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/scan_stream.rs +0 -0
  138. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/schema.rs +0 -0
  139. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot.rs +0 -0
  140. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_activity.rs +0 -0
  141. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_codec.rs +0 -0
  142. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_codex_append.rs +0 -0
  143. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_labels.rs +0 -0
  144. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_ledger.rs +0 -0
  145. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_ledger_tests.rs +0 -0
  146. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_memory.rs +0 -0
  147. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_owned.rs +0 -0
  148. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_prepared.rs +0 -0
  149. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_prepared_disk.rs +0 -0
  150. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_prepared_service.rs +0 -0
  151. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_projection.rs +0 -0
  152. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_regressions.rs +0 -0
  153. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_root_warm.rs +0 -0
  154. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/snapshot_text.rs +0 -0
  155. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/sqlite.rs +0 -0
  156. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/toolcall.rs +0 -0
  157. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/types.rs +0 -0
  158. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/value.rs +0 -0
  159. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/src/watch.rs +0 -0
  160. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/tests/sonic_arena_model.rs +0 -0
  161. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/core/tests/std_allocation_model.rs +0 -0
  162. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/Cargo.toml +0 -0
  163. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/build.rs +0 -0
  164. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/data/command_prefix_pins.tsv +0 -0
  165. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/actor_bridge.rs +0 -0
  166. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/bin/stub_gen.rs +0 -0
  167. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/codex.rs +0 -0
  168. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/command.rs +0 -0
  169. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/context.rs +0 -0
  170. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/corrections.rs +0 -0
  171. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/discovery.rs +0 -0
  172. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/feedback.rs +0 -0
  173. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/judge.rs +0 -0
  174. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/lexicon.rs +0 -0
  175. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/lib.rs +0 -0
  176. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/mining.rs +0 -0
  177. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/nlp.rs +0 -0
  178. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/render.rs +0 -0
  179. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/score.rs +0 -0
  180. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/snapshot_decode.rs +0 -0
  181. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/snapshots.rs +0 -0
  182. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/sqlite.rs +0 -0
  183. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/toolcall.rs +0 -0
  184. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/attachment.rs +0 -0
  185. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/blocks.rs +0 -0
  186. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/command.rs +0 -0
  187. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/convert.rs +0 -0
  188. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/dunder.rs +0 -0
  189. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/events.rs +0 -0
  190. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/meta.rs +0 -0
  191. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/mod.rs +0 -0
  192. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/print.rs +0 -0
  193. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/store.rs +0 -0
  194. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/system.rs +0 -0
  195. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/toolcall.rs +0 -0
  196. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/toolresult.rs +0 -0
  197. {cc_transcript-14.36.0 → cc_transcript-14.37.1}/rust/crates/py/src/views/transcript.rs +0 -0
  198. {cc_transcript-14.36.0 → cc_transcript-14.37.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.36.0
3
+ Version: 14.37.1
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -18,7 +18,7 @@ Requires-Dist: ruff>=0.8 ; extra == 'dev'
18
18
  Requires-Dist: sqlite-vec>=0.1.9 ; extra == 'judge'
19
19
  Requires-Dist: model2vec>=0.8.2 ; extra == 'judge'
20
20
  Requires-Dist: numpy>=1.26 ; extra == 'judge'
21
- Requires-Dist: spawnllm>=0.5.4,<0.6 ; extra == 'llm'
21
+ Requires-Dist: spawnllm>=0.17.1,<0.18 ; extra == 'llm'
22
22
  Provides-Extra: dev
23
23
  Provides-Extra: judge
24
24
  Provides-Extra: llm
@@ -3,11 +3,12 @@
3
3
  :func:`extract_correction` harvests the candidate incorrect edits around a
4
4
  feedback anchor (deterministically, via :mod:`cc_transcript.evidence`), then picks
5
5
  the single edit the feedback faults and appends that one row to the shared
6
- ledger. The pick is an LLM call by default — lifted from cc-steer's enrich
7
- prompt — and degrades to the best-overlap candidate when no LLM backend is ready
8
- (:func:`usable_backend` returns None). The pick keys to the candidate's index, so
9
- the row carries the real cross-language ``incorrect_digest`` from the harvested
10
- tool call, never reconstructed content.
6
+ ledger. The pick is a Jev label decision by default; when Jev errors or refuses
7
+ it falls back to an LLM call — lifted from cc-steer's enrich prompt — and to the
8
+ best-overlap candidate when no LLM backend is ready either (:func:`usable_backend`
9
+ returns None). The pick keys to the candidate's index, so the row carries the
10
+ real cross-language ``incorrect_digest`` from the harvested tool call, never
11
+ reconstructed content.
11
12
 
12
13
  Behind the ``[llm]`` extra: this module imports pydantic at definition time and
13
14
  ``spawnllm`` lazily, so only LLM-capable consumers import it. A hook that merely
@@ -29,7 +30,7 @@ if TYPE_CHECKING:
29
30
  from collections.abc import Sequence
30
31
  from pathlib import Path
31
32
 
32
- from spawnllm import LlmBackend, TModel
33
+ from spawnllm import Label, LlmBackend, TModel
33
34
 
34
35
  from cc_transcript.activity import SessionActivity
35
36
  from cc_transcript.corrections import Correction, CorrectionLog
@@ -38,6 +39,13 @@ if TYPE_CHECKING:
38
39
  from cc_transcript.tools import Hunk
39
40
 
40
41
  HUNK_BUDGET = Budget(tool_chars=600)
42
+ NO_CANDIDATE = "none"
43
+
44
+ PICK_QUESTION = """\
45
+ Which single candidate edit does the developer FEEDBACK fault? The candidates are edits an AI coding \
46
+ assistant made shortly before the feedback, newest first, each with the correction that later overwrote \
47
+ it when one was found; the correction ranked most likely by content overlap is tagged [likely fix]. \
48
+ Answer none when the feedback faults the approach, a command, or work outside these edits."""
41
49
 
42
50
  PICK_PROMPT = """\
43
51
  You are grounding one piece of developer FEEDBACK on an AI coding assistant's work
@@ -107,17 +115,37 @@ def candidate_block(index: int, pair: CandidatePair, *, anchor_turn: int, likely
107
115
  )
108
116
 
109
117
 
110
- def build_pick_prompt(feedback: str, pairs: Sequence[CandidatePair], *, anchor_turn: int) -> str:
118
+ def candidate_blocks(pairs: Sequence[CandidatePair], *, anchor_turn: int) -> str:
111
119
  likely = likely_fix(pairs)
112
- return PICK_PROMPT.format(
113
- candidates="\n\n".join(
114
- candidate_block(index, pair, anchor_turn=anchor_turn, likely=pair is likely)
115
- for index, pair in enumerate(pairs, 1)
116
- ),
117
- feedback=feedback,
120
+ return "\n\n".join(
121
+ candidate_block(index, pair, anchor_turn=anchor_turn, likely=pair is likely)
122
+ for index, pair in enumerate(pairs, 1)
123
+ )
124
+
125
+
126
+ def build_pick_prompt(feedback: str, pairs: Sequence[CandidatePair], *, anchor_turn: int) -> str:
127
+ return PICK_PROMPT.format(candidates=candidate_blocks(pairs, anchor_turn=anchor_turn), feedback=feedback)
128
+
129
+
130
+ def pick_label(pairs: Sequence[CandidatePair]) -> Label:
131
+ from spawnllm import Label
132
+
133
+ return Label(
134
+ PICK_QUESTION,
135
+ {
136
+ NO_CANDIDATE: "The feedback is not about any of these edits",
137
+ **{
138
+ str(index): f"candidate {index}: {pair.incorrect.file_path} ({pair.incorrect.tool})"
139
+ for index, pair in enumerate(pairs, 1)
140
+ },
141
+ },
118
142
  )
119
143
 
120
144
 
145
+ def pair_for(choice: str, pairs: Sequence[CandidatePair]) -> CandidatePair | None:
146
+ return None if choice == NO_CANDIDATE else pairs[int(choice) - 1]
147
+
148
+
121
149
  def usable_backend() -> LlmBackend | None:
122
150
  """The first ready spawnllm backend for the ``review`` specialty, or None when none is ready.
123
151
 
@@ -132,11 +160,27 @@ def usable_backend() -> LlmBackend | None:
132
160
  return None
133
161
 
134
162
 
163
+ async def jev_choice(pairs: Sequence[CandidatePair], *, feedback: str, anchor_turn: int) -> str | None:
164
+ from spawnllm import DecideError, DecideKeyMissing, LabelAnswer, decide
165
+
166
+ try:
167
+ decision = await decide(
168
+ {"candidate_edits": candidate_blocks(pairs, anchor_turn=anchor_turn), "feedback": feedback},
169
+ {"pick": pick_label(pairs)},
170
+ )
171
+ except (DecideError, DecideKeyMissing, TimeoutError):
172
+ return None
173
+ answer = decision.answers["pick"]
174
+ return answer.choice if isinstance(answer, LabelAnswer) else None
175
+
176
+
135
177
  async def choose_pair(
136
178
  pairs: Sequence[CandidatePair], *, feedback: str, anchor_turn: int, tier: TModel, backend: LlmBackend | None
137
179
  ) -> CandidatePair | None:
138
180
  from spawnllm import extract
139
181
 
182
+ if (choice := await jev_choice(pairs, feedback=feedback, anchor_turn=anchor_turn)) is not None:
183
+ return pair_for(choice, pairs)
140
184
  if backend is None:
141
185
  return max(pairs, key=lambda pair: pair.overlap)
142
186
  pick = await extract(
@@ -158,9 +202,10 @@ async def extract_correction(
158
202
  ) -> Correction | None:
159
203
  """Harvests around ``anchor`` and appends the one correction ``feedback`` faults.
160
204
 
161
- The faulted candidate is the LLM's pick when ``backend`` is given, else the
162
- best-overlap candidate. Idempotent per anchor: a no-op when this anchor
163
- already has a row, so re-runs and overlapping producers never duplicate.
205
+ The faulted candidate is Jev's pick; when Jev errors or refuses, it is the
206
+ LLM's pick when ``backend`` is given, else the best-overlap candidate.
207
+ Idempotent per anchor: a no-op when this anchor already has a row, so
208
+ re-runs and overlapping producers never duplicate.
164
209
  Returns the appended correction, or None when nothing is harvested or picked.
165
210
  """
166
211
  if await log.for_anchor(anchor.session_id, anchor.event_uuid):
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cc-transcript"
3
- version = "14.36.0" # informational — releases stamp the version from the git tag
3
+ version = "14.37.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"
@@ -41,7 +41,7 @@ dev = [
41
41
  "ty>=0.0.44",
42
42
  "ruff>=0.8",
43
43
  ]
44
- llm = ["spawnllm>=0.5.4,<0.6"]
44
+ llm = ["spawnllm>=0.17.1,<0.18"]
45
45
  judge = [
46
46
  "sqlite-vec>=0.1.9",
47
47
  "model2vec>=0.8.2",
@@ -4,10 +4,6 @@ version = "0.9.0"
4
4
  edition = "2021"
5
5
  publish = false
6
6
 
7
- [[bin]]
8
- name = "cc-transcript"
9
- path = "src/main.rs"
10
-
11
7
  [dependencies]
12
8
  cc-transcript-core = { path = "../core", features = ["command", "sqlite"] }
13
9
  clap = { version = "4.5", features = ["derive", "env", "string"] }
@@ -1,11 +1,12 @@
1
- //! The cc-transcript CLI: the clap twin of the retired click tree (cli.py), sharing one
2
- //! command surface between the `[[bin]]` and the `_native.cli_main` pyfunction.
1
+ //! The cc-transcript CLI: the clap twin of the retired click tree (cli.py), run by the
2
+ //! `_native.cli_main` pyfunction.
3
3
 
4
4
  use std::path::PathBuf;
5
5
  use std::sync::atomic::{AtomicBool, Ordering};
6
+ use std::sync::OnceLock;
6
7
 
7
8
  use clap::error::ErrorKind as ClapErrorKind;
8
- use clap::{Args, Parser, Subcommand};
9
+ use clap::{Args, CommandFactory, FromArgMatches, Parser, Subcommand};
9
10
 
10
11
  pub mod commands;
11
12
  pub mod output;
@@ -18,6 +19,15 @@ use output::CliExit;
18
19
  /// (cli.py watch_ catches KeyboardInterrupt); outside watch it means exit 130.
19
20
  pub static WATCH_ACTIVE: AtomicBool = AtomicBool::new(false);
20
21
  pub static WATCH_INTERRUPTED: AtomicBool = AtomicBool::new(false);
22
+
23
+ static VERSION: OnceLock<String> = OnceLock::new();
24
+
25
+ fn pkg_version() -> &'static str {
26
+ VERSION
27
+ .get()
28
+ .expect("run records the version before dispatch")
29
+ }
30
+
21
31
  pub(crate) static SCAN_CANCELLATION: std::sync::Mutex<
22
32
  Option<cc_transcript_core::snapshot::Cancellation>,
23
33
  > = std::sync::Mutex::new(None);
@@ -40,16 +50,6 @@ pub fn install_sigint_handler() {
40
50
  });
41
51
  }
42
52
 
43
- fn pkg_version() -> String {
44
- let pyproject = include_str!("../../../../pyproject.toml");
45
- pyproject
46
- .lines()
47
- .find_map(|line| line.strip_prefix("version = \""))
48
- .and_then(|rest| rest.strip_suffix('"'))
49
- .unwrap_or(env!("CARGO_PKG_VERSION"))
50
- .to_string()
51
- }
52
-
53
53
  const KIND_CHOICES: [&str; 6] = ["user", "assistant", "system", "mode", "other", "attachment"];
54
54
  const WHERE_CHOICES: [&str; 3] = ["text", "thinking", "tools"];
55
55
  const LIST_PROVIDER_CHOICES: [&str; 3] = ["claude", "codex", "all"];
@@ -78,7 +78,6 @@ const CORPUS_INCOMPATIBLE: [&str; 15] = [
78
78
  #[derive(Parser)]
79
79
  #[command(
80
80
  name = "cc-transcript",
81
- version = pkg_version(),
82
81
  about = "Investigate Claude Code transcripts: list, show, grep, and stats.",
83
82
  disable_help_subcommand = true
84
83
  )]
@@ -498,10 +497,14 @@ pub enum CorrectionsCmd {
498
497
  Sql { statement: String },
499
498
  }
500
499
 
501
- /// Full-argv entry shared by the `[[bin]]` and `_native.cli_main`: parses, dispatches,
502
- /// and returns the exit code verbatim.
503
- pub fn run(argv: Vec<String>) -> i32 {
504
- let cli = match Cli::try_parse_from(&argv) {
500
+ /// Full-argv entry for `_native.cli_main`: parses, dispatches, and returns the exit
501
+ /// code verbatim. `version` is what `--version` prints.
502
+ pub fn run(argv: Vec<String>, version: String) -> i32 {
503
+ let parsed = Cli::command()
504
+ .version(VERSION.get_or_init(|| version).as_str())
505
+ .try_get_matches_from(&argv)
506
+ .and_then(|matches| Cli::from_arg_matches(&matches));
507
+ let cli = match parsed {
505
508
  Ok(cli) => cli,
506
509
  Err(err) => {
507
510
  let code = match err.kind() {
@@ -514,7 +517,7 @@ pub fn run(argv: Vec<String>) -> i32 {
514
517
  };
515
518
  let Some(cmd) = cli.cmd else {
516
519
  // click: a bare group invocation prints help to stderr and exits 2.
517
- let mut help = <Cli as clap::CommandFactory>::command();
520
+ let mut help = Cli::command();
518
521
  eprint!("{}", help.render_long_help());
519
522
  return 2;
520
523
  };
@@ -1031,8 +1031,12 @@ fn tool_facts<'py>(
1031
1031
  #[pyfunction]
1032
1032
  fn cli_main(py: Python<'_>) -> PyResult<i32> {
1033
1033
  let argv: Vec<String> = py.import("sys")?.getattr("argv")?.extract()?;
1034
+ let version: String = py
1035
+ .import("importlib.metadata")?
1036
+ .call_method1("version", ("cc-transcript",))?
1037
+ .extract()?;
1034
1038
  cc_transcript_cli::install_sigint_handler();
1035
- Ok(py.detach(|| cc_transcript_cli::run(argv)))
1039
+ Ok(py.detach(|| cc_transcript_cli::run(argv, version)))
1036
1040
  }
1037
1041
 
1038
1042
  #[pyo3_stub_gen::derive::gen_stub_pyfunction]
@@ -1,4 +0,0 @@
1
- fn main() {
2
- cc_transcript_cli::install_sigint_handler();
3
- std::process::exit(cc_transcript_cli::run(std::env::args().collect()));
4
- }
File without changes