cc-transcript 14.1.0__tar.gz → 14.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 (137) hide show
  1. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/PKG-INFO +1 -1
  2. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/pyproject.toml +1 -1
  3. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/command.rs +51 -5
  4. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/command.rs +1 -0
  5. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/Cargo.lock +0 -0
  6. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/Cargo.toml +0 -0
  7. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/LICENSE +0 -0
  8. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/README.md +0 -0
  9. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/__init__.py +0 -0
  10. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/_native.pyi +0 -0
  11. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/activity.py +0 -0
  12. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/activity_probe.py +0 -0
  13. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/builders.py +0 -0
  14. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/command.py +0 -0
  15. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/context.py +0 -0
  16. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/corrections.py +0 -0
  17. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/cost.py +0 -0
  18. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/decisions.py +0 -0
  19. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/discovery.py +0 -0
  20. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/disktruth.py +0 -0
  21. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/evidence.py +0 -0
  22. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/extract/__init__.py +0 -0
  23. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/extract/correct.py +0 -0
  24. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/facts.py +0 -0
  25. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/filterspec.py +0 -0
  26. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/heartbeats.py +0 -0
  27. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/ids.py +0 -0
  28. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/judge/__init__.py +0 -0
  29. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/judge/llm.py +0 -0
  30. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/judge/similar.py +0 -0
  31. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/judge/verdicts.py +0 -0
  32. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/ledger.py +0 -0
  33. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/literals.py +0 -0
  34. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/__init__.py +0 -0
  35. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/candidates.py +0 -0
  36. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/confidence.py +0 -0
  37. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/engine.py +0 -0
  38. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/filterspec.py +0 -0
  39. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/formats.py +0 -0
  40. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/sampling.py +0 -0
  41. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/signals.py +0 -0
  42. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/sourcekind.py +0 -0
  43. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/spec.py +0 -0
  44. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/mining/store.py +0 -0
  45. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/models.py +0 -0
  46. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/nlp.py +0 -0
  47. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/notifications.py +0 -0
  48. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/parser.py +0 -0
  49. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/py.typed +0 -0
  50. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/query.py +0 -0
  51. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/render.py +0 -0
  52. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/sentiment/__init__.py +0 -0
  53. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/sentiment/buckets.py +0 -0
  54. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/sentiment/data/afinn-en-165.tsv +0 -0
  55. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/sentiment/data/domain_overrides.tsv +0 -0
  56. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/sentiment/data/en-ewt.udpipe +0 -0
  57. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/sentiment/engine.py +0 -0
  58. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/sentiment/lexicon.py +0 -0
  59. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/sentiment/scorespec.py +0 -0
  60. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/store.py +0 -0
  61. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/tools.py +0 -0
  62. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/cc_transcript/watch.py +0 -0
  63. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/Cargo.toml +0 -0
  64. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/corrections.rs +0 -0
  65. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/digest.rs +0 -0
  66. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/facts.rs +0 -0
  67. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/grep.rs +0 -0
  68. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/list.rs +0 -0
  69. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/mod.rs +0 -0
  70. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/scratchpad.rs +0 -0
  71. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/show.rs +0 -0
  72. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/slice.rs +0 -0
  73. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/stats.rs +0 -0
  74. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/commands/watch.rs +0 -0
  75. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/lib.rs +0 -0
  76. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/main.rs +0 -0
  77. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/output.rs +0 -0
  78. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/cli/src/target.rs +0 -0
  79. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/Cargo.toml +0 -0
  80. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/benches/parse.rs +0 -0
  81. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/benches/render.rs +0 -0
  82. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/benches/toolcall.rs +0 -0
  83. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/activity.rs +0 -0
  84. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/buckets.rs +0 -0
  85. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/context.rs +0 -0
  86. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/corrections.rs +0 -0
  87. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/cost.rs +0 -0
  88. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/discovery.rs +0 -0
  89. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/facts.rs +0 -0
  90. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/filter.rs +0 -0
  91. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/ids.rs +0 -0
  92. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/lib.rs +0 -0
  93. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/literals/command.rs +0 -0
  94. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/literals/corrections.rs +0 -0
  95. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/literals/mining.rs +0 -0
  96. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/literals/mod.rs +0 -0
  97. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/literals/protocol.rs +0 -0
  98. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/notifications.rs +0 -0
  99. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/parse.rs +0 -0
  100. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/protocol.rs +0 -0
  101. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/pystr.rs +0 -0
  102. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/query.rs +0 -0
  103. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/render.rs +0 -0
  104. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/toolcall.rs +0 -0
  105. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/types.rs +0 -0
  106. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/value.rs +0 -0
  107. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/core/src/watch.rs +0 -0
  108. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/Cargo.toml +0 -0
  109. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/build.rs +0 -0
  110. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/data/command_prefix_pins.tsv +0 -0
  111. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/bin/stub_gen.rs +0 -0
  112. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/command.rs +0 -0
  113. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/context.rs +0 -0
  114. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/corrections.rs +0 -0
  115. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/discovery.rs +0 -0
  116. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/lexicon.rs +0 -0
  117. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/lib.rs +0 -0
  118. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/mining.rs +0 -0
  119. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/nlp.rs +0 -0
  120. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/python.rs +0 -0
  121. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/render.rs +0 -0
  122. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/score.rs +0 -0
  123. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/toolcall.rs +0 -0
  124. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/attachment.rs +0 -0
  125. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/blocks.rs +0 -0
  126. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/convert.rs +0 -0
  127. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/dunder.rs +0 -0
  128. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/events.rs +0 -0
  129. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/meta.rs +0 -0
  130. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/mod.rs +0 -0
  131. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/print.rs +0 -0
  132. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/store.rs +0 -0
  133. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/system.rs +0 -0
  134. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/toolcall.rs +0 -0
  135. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/toolresult.rs +0 -0
  136. {cc_transcript-14.1.0 → cc_transcript-14.1.1}/rust/crates/py/src/views/transcript.rs +0 -0
  137. {cc_transcript-14.1.0 → cc_transcript-14.1.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.1.0
3
+ Version: 14.1.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.1.0"
3
+ version = "14.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"
@@ -46,6 +46,10 @@ pub struct Command {
46
46
  // Parity: command.py Command.span — byte offsets (start, end), None when a redirect absorbs a
47
47
  // trailing word; carries compare=False, repr=False, so it is excluded from PartialEq and Debug.
48
48
  pub span: Option<(usize, usize)>,
49
+ // Native-only provenance for top-level selectors. Substitution commands remain visible in
50
+ // occurrence APIs; this flag is excluded from PartialEq, Debug, and the PyO3 command surface.
51
+ #[doc(hidden)]
52
+ pub substitution: bool,
49
53
  }
50
54
 
51
55
  impl PartialEq for Command {
@@ -145,6 +149,7 @@ impl Command {
145
149
  env: self.env.clone(),
146
150
  redirects: self.redirects.clone(),
147
151
  span: self.span,
152
+ substitution: self.substitution,
148
153
  }
149
154
  }
150
155
 
@@ -211,14 +216,19 @@ impl CommandLine {
211
216
  self.parts.iter().map(|(cmd, _)| cmd).collect()
212
217
  }
213
218
 
214
- // Parity: command.py CommandLine.primary — the final command, or None.
219
+ // Parity: command.py CommandLine.primary — the final top-level command, or None.
215
220
  pub fn primary(&self) -> Option<&Command> {
216
- self.parts.last().map(|(cmd, _)| cmd)
221
+ self.parts
222
+ .iter()
223
+ .rev()
224
+ .find_map(|(cmd, _)| (!cmd.substitution).then_some(cmd))
217
225
  }
218
226
 
219
- // Parity: command.py CommandLine.head — the first command, or None.
227
+ // Parity: command.py CommandLine.head — the first top-level command, or None.
220
228
  pub fn head(&self) -> Option<&Command> {
221
- self.parts.first().map(|(cmd, _)| cmd)
229
+ self.parts
230
+ .iter()
231
+ .find_map(|(cmd, _)| (!cmd.substitution).then_some(cmd))
222
232
  }
223
233
 
224
234
  // Parity: command.py CommandLine.prefixes — each command's prefix, None dropped.
@@ -514,6 +524,7 @@ fn extract_command(node: Node, src: &[u8]) -> Command {
514
524
  env,
515
525
  redirects,
516
526
  span: Some(span),
527
+ substitution: false,
517
528
  }
518
529
  }
519
530
 
@@ -575,7 +586,8 @@ fn walk_redirected(node: Node, src: &[u8]) -> Vec<(Command, Option<String>)> {
575
586
  }
576
587
 
577
588
  // Parity: command.py CommandLine.walk_node — program/list/pipeline split at their ops,
578
- // command extracts, redirected_statement unwraps, everything else recurses in order.
589
+ // command extracts, command substitutions mark their recursive commands, redirected_statement
590
+ // unwraps, and everything else recurses in order.
579
591
  fn walk_node(node: Node, src: &[u8]) -> Vec<(Command, Option<String>)> {
580
592
  match node.kind() {
581
593
  "program" => walk_program(node, src),
@@ -586,6 +598,7 @@ fn walk_node(node: Node, src: &[u8]) -> Vec<(Command, Option<String>)> {
586
598
  parts.extend(substitution_parts(node, src));
587
599
  parts
588
600
  }
601
+ "command_substitution" => walk_substitution(node, src),
589
602
  "redirected_statement" => walk_redirected(node, src),
590
603
  _ => {
591
604
  let mut parts = Vec::new();
@@ -598,6 +611,18 @@ fn walk_node(node: Node, src: &[u8]) -> Vec<(Command, Option<String>)> {
598
611
  }
599
612
  }
600
613
 
614
+ fn walk_substitution(node: Node, src: &[u8]) -> Vec<(Command, Option<String>)> {
615
+ let mut parts = Vec::new();
616
+ let mut cursor = node.walk();
617
+ for child in node.children(&mut cursor) {
618
+ parts.extend(walk_node(child, src));
619
+ }
620
+ for (cmd, _) in &mut parts {
621
+ cmd.substitution = true;
622
+ }
623
+ parts
624
+ }
625
+
601
626
  // Word/argument-position `$(…)`/backtick substitutions under a command node, enumerated as parts
602
627
  // mirroring assignment position: document order (host first), redirect targets excluded.
603
628
  fn substitution_parts(node: Node, src: &[u8]) -> Vec<(Command, Option<String>)> {
@@ -1084,6 +1109,27 @@ mod tests {
1084
1109
  assert_eq!(execs(&CommandLine::parse("echo hi > $(target)")), ["echo"]);
1085
1110
  }
1086
1111
 
1112
+ #[test]
1113
+ fn primary_skips_argument_position_substitution() {
1114
+ let line = CommandLine::parse(r#"gh pr list --json number --search "$(cat q.txt)""#);
1115
+ assert_eq!(execs(&line), ["gh", "cat"]);
1116
+ assert_eq!(line.primary().unwrap().executable, "gh");
1117
+ }
1118
+
1119
+ #[test]
1120
+ fn primary_keeps_word_position_host_command() {
1121
+ let line = CommandLine::parse(r#""$(get-cmd)" --flag"#);
1122
+ assert_eq!(execs(&line), ["\"$(get-cmd)\"", "get-cmd"]);
1123
+ assert_eq!(line.primary().unwrap().executable, "\"$(get-cmd)\"");
1124
+ }
1125
+
1126
+ #[test]
1127
+ fn head_skips_leading_assignment_position_substitution() {
1128
+ let line = CommandLine::parse("x=$(get-cmd); host --flag");
1129
+ assert_eq!(execs(&line), ["get-cmd", "host"]);
1130
+ assert_eq!(line.head().unwrap().executable, "host");
1131
+ }
1132
+
1087
1133
  // Document order: the host command first, then each outermost substitution left to right,
1088
1134
  // recursing so nested substitutions follow their host.
1089
1135
  #[test]
@@ -125,6 +125,7 @@ impl CommandView {
125
125
  .map(|rv| rv.r)
126
126
  .collect(),
127
127
  span,
128
+ substitution: false,
128
129
  },
129
130
  }
130
131
  }
File without changes
File without changes