cc-transcript 12.1.0__tar.gz → 12.1.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 (84) hide show
  1. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/PKG-INFO +1 -1
  2. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/facts.py +1 -0
  3. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/judge/similar.py +3 -1
  4. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/__init__.py +2 -1
  5. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/store.py +4 -2
  6. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/tools.py +2 -2
  7. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/pyproject.toml +1 -1
  8. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/Cargo.lock +0 -0
  9. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/Cargo.toml +0 -0
  10. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/LICENSE +0 -0
  11. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/README.md +0 -0
  12. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/__init__.py +0 -0
  13. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/__main__.py +0 -0
  14. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/_parser_rs.pyi +0 -0
  15. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/activity.py +0 -0
  16. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/activity_probe.py +0 -0
  17. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/backend.py +0 -0
  18. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/builders.py +0 -0
  19. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/cli.py +0 -0
  20. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/command.py +0 -0
  21. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/context.py +0 -0
  22. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/corrections.py +0 -0
  23. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/corrections_cli.py +0 -0
  24. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/cost.py +0 -0
  25. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/decisions.py +0 -0
  26. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/discovery.py +0 -0
  27. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/disktruth.py +0 -0
  28. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/evidence.py +0 -0
  29. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/extract/__init__.py +0 -0
  30. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/extract/correct.py +0 -0
  31. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/filterspec.py +0 -0
  32. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/ids.py +0 -0
  33. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/judge/__init__.py +0 -0
  34. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/judge/llm.py +0 -0
  35. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/judge/verdicts.py +0 -0
  36. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/ledger.py +0 -0
  37. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/candidates.py +0 -0
  38. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/confidence.py +0 -0
  39. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/engine.py +0 -0
  40. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/filterspec.py +0 -0
  41. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/formats.py +0 -0
  42. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/sampling.py +0 -0
  43. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/signals.py +0 -0
  44. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/sourcekind.py +0 -0
  45. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/mining/spec.py +0 -0
  46. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/models.py +0 -0
  47. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/notifications.py +0 -0
  48. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/parser.py +0 -0
  49. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/py.typed +0 -0
  50. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/query.py +0 -0
  51. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/render.py +0 -0
  52. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/rust.py +0 -0
  53. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/sentiment/__init__.py +0 -0
  54. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/sentiment/buckets.py +0 -0
  55. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/sentiment/data/afinn-en-165.tsv +0 -0
  56. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/sentiment/data/domain_overrides.tsv +0 -0
  57. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/sentiment/engine.py +0 -0
  58. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/sentiment/lexicon.py +0 -0
  59. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/sentiment/scorespec.py +0 -0
  60. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/store.py +0 -0
  61. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/cc_transcript/watch.py +0 -0
  62. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/Cargo.toml +0 -0
  63. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/build.rs +0 -0
  64. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/data/command_prefix_pins.tsv +0 -0
  65. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/rustfmt.toml +0 -0
  66. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/activity.rs +0 -0
  67. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/command.rs +0 -0
  68. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/event.rs +0 -0
  69. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/filter.rs +0 -0
  70. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/generated/command.rs +0 -0
  71. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/generated/mining.rs +0 -0
  72. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/generated/mod.rs +0 -0
  73. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/generated/protocol.rs +0 -0
  74. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/generated/unicode.rs +0 -0
  75. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/lexicon.rs +0 -0
  76. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/lib.rs +0 -0
  77. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/mining.rs +0 -0
  78. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/model.rs +0 -0
  79. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/parse.rs +0 -0
  80. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/protocol.rs +0 -0
  81. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/python.rs +0 -0
  82. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/score.rs +0 -0
  83. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/types.rs +0 -0
  84. {cc_transcript-12.1.0 → cc_transcript-12.1.1}/rust/src/value.rs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: cc-transcript
3
- Version: 12.1.0
3
+ Version: 12.1.1
4
4
  Classifier: Development Status :: 3 - Alpha
5
5
  Classifier: Environment :: Console
6
6
  Classifier: Intended Audience :: Developers
@@ -95,6 +95,7 @@ def fact_of(use: ToolUse, session_id: SessionId, path: Path, prefixes: tuple[str
95
95
  call = use.call
96
96
  server, tool, access = mcp_split(call.name)
97
97
  denied, user_said = denial_fields(use.result)
98
+ assert use.ref.tool_use_id is not None, "ToolUse refs always carry the tool-use id"
98
99
  return ToolFact(
99
100
  ts=use.ts,
100
101
  session_id=session_id,
@@ -188,7 +188,9 @@ async def embed_evidence(store: FileStateStore, *, dedup_key: DedupKey, canonica
188
188
  await prepare_connection(store)
189
189
  async with store.lock:
190
190
  cursor = await store.conn.execute("SELECT text FROM feedback_events WHERE dedup_key = ?", (dedup_key,))
191
- text = (await cursor.fetchone())["text"]
191
+ row = await cursor.fetchone()
192
+ assert row is not None, "verdict dedup keys always resolve to a stored feedback event"
193
+ text = row["text"]
192
194
  embedder = await anyio.to_thread.run_sync(default_embedder)
193
195
  vector = await anyio.to_thread.run_sync(embedder, f"{text}\n{summary}")
194
196
  return Evidence(serialize_vector(vector), text, canonical_key)
@@ -11,7 +11,8 @@ disqualification rules, their review formats), capture each candidate's durable
11
11
  :class:`~cc_transcript.context.ContextWindow` via
12
12
  :func:`~cc_transcript.context.capture_window`, and persist them through
13
13
  :class:`FeedbackStore`. LLM verdict passes over the stored corpus live in
14
- :mod:`cc_transcript.judge`.
14
+ :mod:`cc_transcript.judge`; deterministic "did not steer here" negatives come
15
+ from :func:`sample_windows`.
15
16
 
16
17
  The :class:`MiningSpec` is the mining analogue of :class:`~cc_transcript.FilterSpec`
17
18
  and :class:`~cc_transcript.sentiment.ScoreSpec`: a frozen-dataclass tree with a JSON
@@ -150,9 +150,11 @@ class FeedbackStore:
150
150
  by_source_cur = await conn.execute(
151
151
  "SELECT source_kind, COUNT(*) AS n FROM feedback_events GROUP BY source_kind ORDER BY source_kind"
152
152
  )
153
+ total_row, files_row = await total_cur.fetchone(), await files_cur.fetchone()
154
+ assert total_row is not None and files_row is not None, "COUNT(*) always returns one row"
153
155
  return Stats(
154
- total=(await total_cur.fetchone())["n"],
155
- files=(await files_cur.fetchone())["n"],
156
+ total=total_row["n"],
157
+ files=files_row["n"],
156
158
  by_source={row["source_kind"]: row["n"] async for row in by_source_cur},
157
159
  )
158
160
 
@@ -90,7 +90,7 @@ class EditSpan:
90
90
  def from_raw(cls, span: object) -> Self:
91
91
  match span:
92
92
  case {"old_string": str() as old, "new_string": str() as new}:
93
- return cls(old, new, span.get("replace_all", False))
93
+ return cls(old, new, bool(span.get("replace_all", False)))
94
94
  case _:
95
95
  raise TypeError(f"edit span missing or malformed: {span!r}")
96
96
 
@@ -408,7 +408,7 @@ ToolCall = (
408
408
  | OtherCall
409
409
  )
410
410
 
411
- TOOL_TYPES: dict[str, type[ToolCallBase]] = {
411
+ TOOL_TYPES: dict[str, type[ToolCall]] = {
412
412
  "Bash": BashCall,
413
413
  "Edit": EditCall,
414
414
  "MultiEdit": MultiEditCall,
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "cc-transcript"
3
- version = "12.1.0"
3
+ version = "12.1.1"
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"
File without changes
File without changes