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