cc-transcript 14.28.0__tar.gz → 14.28.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.
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/PKG-INFO +1 -1
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/snapshot_schema/request.schema.json +1 -1
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/pyproject.toml +1 -1
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot.rs +173 -45
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/Cargo.lock +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/Cargo.toml +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/LICENSE +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/README.md +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/__init__.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/__init__.pyi +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/_native.pyi +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/activity.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/activity_probe.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/builders.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/codex.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/command.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/context.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/corrections.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/cost.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/decision_store.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/decisions.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/discovery.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/disktruth.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/evidence.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/extract/__init__.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/extract/correct.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/facts.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/filterspec.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/heartbeats.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/ids.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/judge/__init__.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/judge/llm.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/judge/similar.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/judge/verdicts.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/ledger.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/literals.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/__init__.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/candidates.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/confidence.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/engine.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/formats.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/sampling.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/signals.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/sourcekind.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/spec.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/mining/store.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/models.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/nlp.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/notifications.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/parser.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/py.typed +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/query.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/render.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/__init__.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/buckets.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/data/afinn-en-165.tsv +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/data/domain_overrides.tsv +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/data/en-ewt.udpipe +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/engine.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/lexicon.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/scorespec.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/snapshot_schema/config.schema.json +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/snapshot_schema/context.schema.json +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/snapshot_schema/response.schema.json +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/snapshot_schema/tool_registry.schema.json +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/snapshots.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/synthetic.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/tools.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/watch.py +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/Cargo.toml +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/blame.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/corpus.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/corrections.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/digest.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/facts.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/grep.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/list.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/mod.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/scratchpad.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/show.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/slice.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/stats.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/commands/watch.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/lib.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/main.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/output.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/target.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/cli/src/timearg.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/Cargo.toml +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/benches/parse.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/benches/render.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/benches/toolcall.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/activity.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/actor.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/blame.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/buckets.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/codex/discovery.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/codex/lower.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/codex/mod.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/codex/parse.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/codex/probe.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/codex/protocol.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/codex/types.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/command.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/context.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/corrections.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/cost.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/discovery.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/facts.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/feedback.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/filter.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/gateway.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/ids.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/judge.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/lib.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/literals/command.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/literals/corrections.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/literals/feedback.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/literals/mining.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/literals/mod.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/literals/protocol.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/notifications.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/parse.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/protocol.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/pystr.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/query.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/render.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/rng.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/scan.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/scan_grep.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/scan_regressions.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/schema.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot_activity.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot_codec.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot_labels.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot_memory.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot_owned.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot_projection.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot_regressions.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot_text.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/sqlite.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/toolcall.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/types.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/value.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/watch.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/Cargo.toml +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/build.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/data/command_prefix_pins.tsv +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/actor_bridge.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/bin/stub_gen.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/codex.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/command.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/context.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/corrections.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/discovery.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/feedback.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/judge.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/lexicon.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/lib.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/mining.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/nlp.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/python.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/render.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/score.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/snapshot_decode.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/snapshots.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/sqlite.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/toolcall.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/attachment.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/blocks.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/command.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/convert.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/dunder.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/events.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/meta.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/mod.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/print.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/store.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/system.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/toolcall.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/toolresult.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/views/transcript.rs +0 -0
- {cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/py/src/watch.rs +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "cc-transcript"
|
|
3
|
-
version = "14.28.
|
|
3
|
+
version = "14.28.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"
|
|
@@ -3937,6 +3937,13 @@ impl NativeStore {
|
|
|
3937
3937
|
}
|
|
3938
3938
|
}
|
|
3939
3939
|
|
|
3940
|
+
fn graph_exposes_members(graph: &GraphCursor) -> bool {
|
|
3941
|
+
matches!(
|
|
3942
|
+
graph.request["query"]["kind"].as_str(),
|
|
3943
|
+
Some("sidechain_membership" | "direct_sidechains")
|
|
3944
|
+
)
|
|
3945
|
+
}
|
|
3946
|
+
|
|
3940
3947
|
fn graph(
|
|
3941
3948
|
&self,
|
|
3942
3949
|
request: &Value,
|
|
@@ -4181,6 +4188,17 @@ impl NativeStore {
|
|
|
4181
4188
|
description,
|
|
4182
4189
|
transferred: false,
|
|
4183
4190
|
});
|
|
4191
|
+
if !Self::graph_exposes_members(graph) {
|
|
4192
|
+
self.state
|
|
4193
|
+
.lock()
|
|
4194
|
+
.expect("snapshot state")
|
|
4195
|
+
.leases
|
|
4196
|
+
.remove(str_field(
|
|
4197
|
+
&graph.nodes.last().expect("added graph node").description["handle"],
|
|
4198
|
+
"lease_id",
|
|
4199
|
+
)?)
|
|
4200
|
+
.expect("validated internal graph lease");
|
|
4201
|
+
}
|
|
4184
4202
|
if graph.request["query"]["kind"].as_str() != Some("direct_sidechains") {
|
|
4185
4203
|
graph.tasks.push(GraphTask::List {
|
|
4186
4204
|
parent: path,
|
|
@@ -4193,6 +4211,9 @@ impl NativeStore {
|
|
|
4193
4211
|
fn renew_graph_members(&self, graph: &mut GraphCursor) -> Result<(), SnapshotError> {
|
|
4194
4212
|
let mut state = self.state.lock().expect("snapshot state");
|
|
4195
4213
|
self.lease(&state, &graph.root_handle, &graph.context)?;
|
|
4214
|
+
if !Self::graph_exposes_members(graph) {
|
|
4215
|
+
return Ok(());
|
|
4216
|
+
}
|
|
4196
4217
|
for node in graph
|
|
4197
4218
|
.nodes
|
|
4198
4219
|
.iter_mut()
|
|
@@ -4218,6 +4239,60 @@ impl NativeStore {
|
|
|
4218
4239
|
Ok(())
|
|
4219
4240
|
}
|
|
4220
4241
|
|
|
4242
|
+
fn advance_graph_source(
|
|
4243
|
+
&self,
|
|
4244
|
+
graph: &mut GraphCursor,
|
|
4245
|
+
pending: GraphPending,
|
|
4246
|
+
cancel: &Cancellation,
|
|
4247
|
+
usage: &mut [u64; 18],
|
|
4248
|
+
work: &mut usize,
|
|
4249
|
+
work_stop: usize,
|
|
4250
|
+
) -> Result<bool, SnapshotError> {
|
|
4251
|
+
self.authority(
|
|
4252
|
+
&graph.context,
|
|
4253
|
+
Some(&std::fs::canonicalize(&pending.path).map_err(io_error)?),
|
|
4254
|
+
)?;
|
|
4255
|
+
let token = pending.token.clone();
|
|
4256
|
+
graph.pending = Some(pending);
|
|
4257
|
+
loop {
|
|
4258
|
+
if *work >= work_stop {
|
|
4259
|
+
return Ok(false);
|
|
4260
|
+
}
|
|
4261
|
+
*work += 1;
|
|
4262
|
+
let waiter = {
|
|
4263
|
+
let mut state = self.state.lock().expect("snapshot state");
|
|
4264
|
+
let waiter = state.waiters.get_mut(&token).ok_or_else(|| {
|
|
4265
|
+
SnapshotError::new(Status::StaleCursor, "graph source reservation expired")
|
|
4266
|
+
})?;
|
|
4267
|
+
waiter.context = graph.context.clone();
|
|
4268
|
+
waiter.clone()
|
|
4269
|
+
};
|
|
4270
|
+
let before_bytes = usage[1];
|
|
4271
|
+
let before_events = usage[3];
|
|
4272
|
+
let outcome = self.advance(&token, waiter, cancel, usage)?;
|
|
4273
|
+
graph.remaining.max_read_bytes = graph
|
|
4274
|
+
.remaining
|
|
4275
|
+
.max_read_bytes
|
|
4276
|
+
.saturating_sub((usage[1] - before_bytes) as usize);
|
|
4277
|
+
graph.remaining.max_events = graph
|
|
4278
|
+
.remaining
|
|
4279
|
+
.max_events
|
|
4280
|
+
.saturating_sub((usage[3] - before_events) as usize);
|
|
4281
|
+
if outcome.1.is_some() {
|
|
4282
|
+
continue;
|
|
4283
|
+
}
|
|
4284
|
+
let pending = graph.pending.take().expect("completed graph source");
|
|
4285
|
+
self.graph_add_source(
|
|
4286
|
+
graph,
|
|
4287
|
+
pending.path,
|
|
4288
|
+
pending.depth,
|
|
4289
|
+
pending.spawned_by,
|
|
4290
|
+
&outcome.0,
|
|
4291
|
+
)?;
|
|
4292
|
+
return Ok(true);
|
|
4293
|
+
}
|
|
4294
|
+
}
|
|
4295
|
+
|
|
4221
4296
|
fn graph_work(
|
|
4222
4297
|
&self,
|
|
4223
4298
|
graph: &mut GraphCursor,
|
|
@@ -4264,49 +4339,25 @@ impl NativeStore {
|
|
|
4264
4339
|
return Ok(GraphYield::Complete(projection.data));
|
|
4265
4340
|
}
|
|
4266
4341
|
}
|
|
4342
|
+
let work_stop = self.config.event_step.min(self.config.page_items);
|
|
4343
|
+
let mut examined = 0usize;
|
|
4267
4344
|
if let Some(pending) = graph.pending.take() {
|
|
4268
|
-
self.
|
|
4269
|
-
|
|
4270
|
-
|
|
4271
|
-
|
|
4272
|
-
|
|
4273
|
-
|
|
4274
|
-
|
|
4275
|
-
|
|
4276
|
-
|
|
4277
|
-
waiter.context = graph.context.clone();
|
|
4278
|
-
waiter.clone()
|
|
4279
|
-
};
|
|
4280
|
-
let before_bytes = usage[1];
|
|
4281
|
-
let before_events = usage[3];
|
|
4282
|
-
let outcome = self.advance(&pending.token, waiter, cancel, usage)?;
|
|
4283
|
-
graph.remaining.max_read_bytes = graph
|
|
4284
|
-
.remaining
|
|
4285
|
-
.max_read_bytes
|
|
4286
|
-
.saturating_sub((usage[1] - before_bytes) as usize);
|
|
4287
|
-
graph.remaining.max_events = graph
|
|
4288
|
-
.remaining
|
|
4289
|
-
.max_events
|
|
4290
|
-
.saturating_sub((usage[3] - before_events) as usize);
|
|
4291
|
-
if outcome.1.is_some() {
|
|
4292
|
-
graph.pending = Some(pending);
|
|
4293
|
-
} else {
|
|
4294
|
-
self.graph_add_source(
|
|
4295
|
-
graph,
|
|
4296
|
-
pending.path,
|
|
4297
|
-
pending.depth,
|
|
4298
|
-
pending.spawned_by,
|
|
4299
|
-
&outcome.0,
|
|
4300
|
-
)?;
|
|
4345
|
+
if !self.advance_graph_source(
|
|
4346
|
+
graph,
|
|
4347
|
+
pending,
|
|
4348
|
+
cancel,
|
|
4349
|
+
usage,
|
|
4350
|
+
&mut examined,
|
|
4351
|
+
work_stop,
|
|
4352
|
+
)? {
|
|
4353
|
+
return Ok(GraphYield::Pending(Value::new_null()));
|
|
4301
4354
|
}
|
|
4302
|
-
return Ok(GraphYield::Pending(Value::new_null()));
|
|
4303
4355
|
}
|
|
4304
|
-
|
|
4305
|
-
while !graph.prepared && examined < self.config.event_step {
|
|
4356
|
+
while !graph.prepared && examined < work_stop {
|
|
4306
4357
|
cancel.check(graph.remaining.deadline_unix_ms)?;
|
|
4307
4358
|
if let Some(mut listing) = graph.listing.take() {
|
|
4308
4359
|
loop {
|
|
4309
|
-
if examined >=
|
|
4360
|
+
if examined >= work_stop {
|
|
4310
4361
|
graph.listing = Some(listing);
|
|
4311
4362
|
return Ok(GraphYield::Pending(Value::new_null()));
|
|
4312
4363
|
}
|
|
@@ -4409,6 +4460,7 @@ impl NativeStore {
|
|
|
4409
4460
|
depth,
|
|
4410
4461
|
spawned_by,
|
|
4411
4462
|
} => {
|
|
4463
|
+
examined += 1;
|
|
4412
4464
|
let canonical = std::fs::canonicalize(&path).map_err(io_error)?;
|
|
4413
4465
|
self.authority(&graph.context, Some(&canonical))?;
|
|
4414
4466
|
let metadata = std::fs::metadata(&canonical).map_err(io_error)?;
|
|
@@ -4439,16 +4491,24 @@ impl NativeStore {
|
|
|
4439
4491
|
.max_events
|
|
4440
4492
|
.saturating_sub((usage[3] - before_events) as usize);
|
|
4441
4493
|
if let Some(token) = outcome.1 {
|
|
4442
|
-
|
|
4443
|
-
|
|
4444
|
-
|
|
4445
|
-
|
|
4446
|
-
|
|
4447
|
-
|
|
4494
|
+
if !self.advance_graph_source(
|
|
4495
|
+
graph,
|
|
4496
|
+
GraphPending {
|
|
4497
|
+
token,
|
|
4498
|
+
path,
|
|
4499
|
+
depth,
|
|
4500
|
+
spawned_by,
|
|
4501
|
+
},
|
|
4502
|
+
cancel,
|
|
4503
|
+
usage,
|
|
4504
|
+
&mut examined,
|
|
4505
|
+
work_stop,
|
|
4506
|
+
)? {
|
|
4507
|
+
return Ok(GraphYield::Pending(Value::new_null()));
|
|
4508
|
+
}
|
|
4448
4509
|
} else {
|
|
4449
4510
|
self.graph_add_source(graph, path, depth, spawned_by, &outcome.0)?;
|
|
4450
4511
|
}
|
|
4451
|
-
return Ok(GraphYield::Pending(Value::new_null()));
|
|
4452
4512
|
}
|
|
4453
4513
|
}
|
|
4454
4514
|
}
|
|
@@ -4465,8 +4525,12 @@ impl NativeStore {
|
|
|
4465
4525
|
let mut records = Vec::new();
|
|
4466
4526
|
let mut output_bytes = 128usize;
|
|
4467
4527
|
let page_limit = self.config.page_items.min(graph.remaining.max_items);
|
|
4528
|
+
let mut projected = 0usize;
|
|
4468
4529
|
while graph.projection_at < total || graph.pending_record.is_some() {
|
|
4469
4530
|
cancel.check(graph.remaining.deadline_unix_ms)?;
|
|
4531
|
+
if boolean && projected >= self.config.page_items {
|
|
4532
|
+
return Ok(GraphYield::Pending(Value::new_null()));
|
|
4533
|
+
}
|
|
4470
4534
|
if records.len() >= page_limit {
|
|
4471
4535
|
break;
|
|
4472
4536
|
}
|
|
@@ -4480,7 +4544,9 @@ impl NativeStore {
|
|
|
4480
4544
|
};
|
|
4481
4545
|
let index = position + usize::from(membership || boolean);
|
|
4482
4546
|
let node = &graph.nodes[index];
|
|
4483
|
-
|
|
4547
|
+
if membership {
|
|
4548
|
+
self.validate_scope(&node.description["handle"], &graph.context)?;
|
|
4549
|
+
}
|
|
4484
4550
|
self.authority(&graph.context, Some(&node.snapshot.canonical_path))?;
|
|
4485
4551
|
if membership {
|
|
4486
4552
|
if node.snapshot.session_id.len() > 256 {
|
|
@@ -4522,6 +4588,7 @@ impl NativeStore {
|
|
|
4522
4588
|
}
|
|
4523
4589
|
graph.projection_at += 1;
|
|
4524
4590
|
if boolean {
|
|
4591
|
+
projected += 1;
|
|
4525
4592
|
if projection.data["value"].as_bool() == Some(true) {
|
|
4526
4593
|
return Ok(GraphYield::Complete(projection.data));
|
|
4527
4594
|
}
|
|
@@ -6380,6 +6447,67 @@ mod tests {
|
|
|
6380
6447
|
}
|
|
6381
6448
|
}
|
|
6382
6449
|
|
|
6450
|
+
#[test]
|
|
6451
|
+
fn graph_predicate_scans_918_attachments_without_retaining_member_leases() {
|
|
6452
|
+
let source = Source::new(&format!("{}\n", user("root")));
|
|
6453
|
+
let attachments: Vec<_> = (0..918)
|
|
6454
|
+
.map(|index| {
|
|
6455
|
+
let path = source
|
|
6456
|
+
.directory
|
|
6457
|
+
.join(format!("attachment-{index:04}.jsonl"));
|
|
6458
|
+
std::fs::write(&path, format!("{}\n", user(&format!("attachment-{index}"))))
|
|
6459
|
+
.unwrap();
|
|
6460
|
+
path.to_string_lossy().into_owned()
|
|
6461
|
+
})
|
|
6462
|
+
.collect();
|
|
6463
|
+
let store = NativeStore::new(&json!({
|
|
6464
|
+
"max_retained_bytes":128*1024*1024,
|
|
6465
|
+
"reserved_hook_accounted_bytes":4096,
|
|
6466
|
+
"max_leases":256,
|
|
6467
|
+
"reserved_hook_leases":1,
|
|
6468
|
+
"max_events_per_step":256
|
|
6469
|
+
}))
|
|
6470
|
+
.unwrap();
|
|
6471
|
+
let owner = context("a");
|
|
6472
|
+
let root = finish(
|
|
6473
|
+
&store,
|
|
6474
|
+
store.request(&acquire(&source.path), &owner, &Cancellation::default()),
|
|
6475
|
+
&owner,
|
|
6476
|
+
);
|
|
6477
|
+
let mut request = graph_request(
|
|
6478
|
+
&root,
|
|
6479
|
+
json!({"kind":"has_read","pattern":"absent.rs","subagents":true}),
|
|
6480
|
+
attachments,
|
|
6481
|
+
json!([]),
|
|
6482
|
+
);
|
|
6483
|
+
request["limits"].insert("max_sources", json!(1024));
|
|
6484
|
+
request["limits"].insert("max_discovery_entries", json!(1024));
|
|
6485
|
+
request["limits"].insert("max_events", json!(4096));
|
|
6486
|
+
request["limits"].insert("max_read_bytes", json!(8 * 1024 * 1024));
|
|
6487
|
+
request["limits"].insert("max_items", json!(1024));
|
|
6488
|
+
request.insert("deadline_unix_ms", json!(now_ms() + 120_000));
|
|
6489
|
+
let mut reply = store.request(&request, &owner, &Cancellation::default());
|
|
6490
|
+
let mut peak_leases = store.state.lock().unwrap().leases.len();
|
|
6491
|
+
for _ in 0..1200 {
|
|
6492
|
+
if reply["status"].as_str() != Some("incomplete") {
|
|
6493
|
+
break;
|
|
6494
|
+
}
|
|
6495
|
+
let cursor = reply["cursor"]
|
|
6496
|
+
.as_str()
|
|
6497
|
+
.unwrap_or_else(|| panic!("bounded graph continuation: {reply:?}"));
|
|
6498
|
+
reply = store.request(
|
|
6499
|
+
&json!({"schema":SCHEMA,"id":"resume","operation":"resume","cursor":cursor}),
|
|
6500
|
+
&owner,
|
|
6501
|
+
&Cancellation::default(),
|
|
6502
|
+
);
|
|
6503
|
+
peak_leases = peak_leases.max(store.state.lock().unwrap().leases.len());
|
|
6504
|
+
}
|
|
6505
|
+
assert_eq!(reply["status"].as_str(), Some("ok"), "{reply:?}");
|
|
6506
|
+
assert_eq!(reply["data"]["value"].as_bool(), Some(false));
|
|
6507
|
+
assert!(peak_leases <= 2, "peak leases: {peak_leases}");
|
|
6508
|
+
assert_eq!(store.state.lock().unwrap().leases.len(), 1);
|
|
6509
|
+
}
|
|
6510
|
+
|
|
6383
6511
|
#[test]
|
|
6384
6512
|
fn direct_sidechains_skip_unselected_sources_descendants_and_attachments() {
|
|
6385
6513
|
let source = Source::new(&format!("{}\n{}\n", user("before"), user("current")));
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/data/afinn-en-165.tsv
RENAMED
|
File without changes
|
{cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/sentiment/data/domain_overrides.tsv
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/snapshot_schema/config.schema.json
RENAMED
|
File without changes
|
{cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/snapshot_schema/context.schema.json
RENAMED
|
File without changes
|
{cc_transcript-14.28.0 → cc_transcript-14.28.1}/cc_transcript/snapshot_schema/response.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/literals/corrections.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{cc_transcript-14.28.0 → cc_transcript-14.28.1}/rust/crates/core/src/snapshot_regressions.rs
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|