zeta2 cli: Export retrieval stats data frame (#40145)
Retrieval stats will now use polars to build a big data frame for references with the cartesian product of LSP declarations and retrieved declaration candidates (with all their score components) and rebuilds the stats summary on top of it. This data frame is written to a `.parquet` file, which we can load into advanced analytics tools (such as Metabase), so we can explore our scoring distributions and find ways to improve retrieval, and then train the decision tree. Release Notes: - N/A
This commit is contained in:
Generated
+1042
-27
File diff suppressed because it is too large
Load Diff
@@ -14,6 +14,7 @@ path = "src/main.rs"
|
||||
|
||||
[dependencies]
|
||||
anyhow.workspace = true
|
||||
chrono.workspace = true
|
||||
clap.workspace = true
|
||||
client.workspace = true
|
||||
cloud_llm_client.workspace= true
|
||||
@@ -35,6 +36,7 @@ log.workspace = true
|
||||
node_runtime.workspace = true
|
||||
ordered-float.workspace = true
|
||||
paths.workspace = true
|
||||
polars = { version = "0.51", features = ["lazy", "dtype-struct", "parquet"] }
|
||||
project.workspace = true
|
||||
prompt_store.workspace = true
|
||||
release_channel.workspace = true
|
||||
@@ -44,6 +46,7 @@ serde_json.workspace = true
|
||||
settings.workspace = true
|
||||
shellexpand.workspace = true
|
||||
smol.workspace = true
|
||||
soa-rs = "0.8.1"
|
||||
terminal_view.workspace = true
|
||||
util.workspace = true
|
||||
watch.workspace = true
|
||||
|
||||
@@ -13,8 +13,10 @@ use gpui::{AppContext, AsyncApp};
|
||||
use language::OffsetRangeExt;
|
||||
use language::{BufferSnapshot, Point};
|
||||
use ordered_float::OrderedFloat;
|
||||
use polars::prelude::*;
|
||||
use project::{Project, ProjectEntryId, ProjectPath, Worktree};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use std::fs;
|
||||
use std::{
|
||||
cmp::Reverse,
|
||||
collections::{HashMap, HashSet},
|
||||
@@ -163,16 +165,23 @@ pub async fn retrieval_stats(
|
||||
}
|
||||
let files_hash = hasher.finish();
|
||||
let file_snapshots = Arc::new(file_snapshots);
|
||||
let target_cli_dir = Path::new(env!("CARGO_MANIFEST_DIR")).join("../../target/zeta_cli");
|
||||
fs::create_dir_all(&target_cli_dir).unwrap();
|
||||
let target_cli_dir = target_cli_dir.canonicalize().unwrap();
|
||||
|
||||
let lsp_definitions_path = std::env::current_dir()?.join(format!(
|
||||
"target/zeta2-lsp-definitions-{:x}.jsonl",
|
||||
let lsp_cache_dir = target_cli_dir.join("cache");
|
||||
fs::create_dir_all(&lsp_cache_dir).unwrap();
|
||||
|
||||
let lsp_definitions_path = lsp_cache_dir.join(format!(
|
||||
"{}-{:x}.jsonl",
|
||||
worktree_path.file_stem().unwrap_or_default().display(),
|
||||
files_hash
|
||||
));
|
||||
|
||||
let mut lsp_definitions = HashMap::default();
|
||||
let mut lsp_files = 0;
|
||||
|
||||
if std::fs::exists(&lsp_definitions_path)? {
|
||||
if fs::exists(&lsp_definitions_path)? {
|
||||
log::info!(
|
||||
"Using cached LSP definitions from {}",
|
||||
lsp_definitions_path.display()
|
||||
@@ -246,8 +255,7 @@ pub async fn retrieval_stats(
|
||||
let files_len = files.len().min(file_limit.unwrap_or(usize::MAX));
|
||||
let done_count = Arc::new(AtomicUsize::new(0));
|
||||
|
||||
let (output_tx, mut output_rx) = mpsc::unbounded::<RetrievalStatsResult>();
|
||||
let mut output = std::fs::File::create("target/zeta-retrieval-stats.txt")?;
|
||||
let (output_tx, output_rx) = mpsc::unbounded::<ReferenceRetrievalResult>();
|
||||
|
||||
let tasks = files
|
||||
.into_iter()
|
||||
@@ -271,8 +279,6 @@ pub async fn retrieval_stats(
|
||||
&snapshot,
|
||||
);
|
||||
|
||||
println!("references: {}", references.len(),);
|
||||
|
||||
let imports = if options.context.use_imports {
|
||||
Imports::gather(&snapshot, Some(&project_file.parent_abs_path))
|
||||
} else {
|
||||
@@ -309,65 +315,13 @@ pub async fn retrieval_stats(
|
||||
)
|
||||
.await?;
|
||||
|
||||
// TODO: LSP returns things like locals, this filters out some of those, but potentially
|
||||
// hides some retrieval issues.
|
||||
if retrieve_result.definitions.is_empty() {
|
||||
continue;
|
||||
}
|
||||
|
||||
let mut best_match = None;
|
||||
let mut has_external_definition = false;
|
||||
let mut in_excerpt = false;
|
||||
for (index, retrieved_definition) in
|
||||
retrieve_result.definitions.iter().enumerate()
|
||||
{
|
||||
for lsp_definition in &lsp_definitions {
|
||||
let SourceRange {
|
||||
path,
|
||||
point_range,
|
||||
offset_range,
|
||||
} = lsp_definition;
|
||||
let lsp_point_range =
|
||||
SerializablePoint::into_language_point_range(point_range.clone());
|
||||
has_external_definition = has_external_definition
|
||||
|| path.is_absolute()
|
||||
|| path
|
||||
.components()
|
||||
.any(|component| component.as_os_str() == "node_modules");
|
||||
let is_match = path.as_path()
|
||||
== retrieved_definition.path.as_std_path()
|
||||
&& retrieved_definition
|
||||
.range
|
||||
.contains_inclusive(&lsp_point_range);
|
||||
if is_match {
|
||||
if best_match.is_none() {
|
||||
best_match = Some(index);
|
||||
}
|
||||
}
|
||||
in_excerpt = in_excerpt
|
||||
|| retrieve_result.excerpt_range.as_ref().is_some_and(
|
||||
|excerpt_range| excerpt_range.contains_inclusive(&offset_range),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
let outcome = if let Some(best_match) = best_match {
|
||||
RetrievalOutcome::Match { best_match }
|
||||
} else if has_external_definition {
|
||||
RetrievalOutcome::NoMatchDueToExternalLspDefinitions
|
||||
} else if in_excerpt {
|
||||
RetrievalOutcome::ProbablyLocal
|
||||
} else {
|
||||
RetrievalOutcome::NoMatch
|
||||
};
|
||||
|
||||
let result = RetrievalStatsResult {
|
||||
outcome,
|
||||
path: path.clone(),
|
||||
let result = ReferenceRetrievalResult {
|
||||
cursor_path: path.clone(),
|
||||
identifier: reference.identifier,
|
||||
point: query_point,
|
||||
cursor_point: query_point,
|
||||
lsp_definitions,
|
||||
retrieved_definitions: retrieve_result.definitions,
|
||||
excerpt_range: retrieve_result.excerpt_range,
|
||||
};
|
||||
|
||||
output_tx.unbounded_send(result).ok();
|
||||
@@ -386,139 +340,610 @@ pub async fn retrieval_stats(
|
||||
|
||||
drop(output_tx);
|
||||
|
||||
let results_task = cx.background_spawn(async move {
|
||||
let mut results = Vec::new();
|
||||
while let Some(result) = output_rx.next().await {
|
||||
output
|
||||
.write_all(format!("{:#?}\n", result).as_bytes())
|
||||
.log_err();
|
||||
results.push(result)
|
||||
}
|
||||
results
|
||||
});
|
||||
let df_task = cx.background_spawn(build_dataframe(output_rx));
|
||||
|
||||
futures::future::try_join_all(tasks).await?;
|
||||
println!("Tasks completed");
|
||||
let results = results_task.await;
|
||||
println!("Results received");
|
||||
let mut df = df_task.await?;
|
||||
|
||||
let mut references_count = 0;
|
||||
let run_id = format!(
|
||||
"{}-{}",
|
||||
worktree_path.file_stem().unwrap_or_default().display(),
|
||||
chrono::Local::now().format("%Y%m%d_%H%M%S")
|
||||
);
|
||||
let run_dir = target_cli_dir.join(run_id);
|
||||
fs::create_dir(&run_dir).unwrap();
|
||||
|
||||
let mut included_count = 0;
|
||||
let mut both_absent_count = 0;
|
||||
let parquet_path = run_dir.join("stats.parquet");
|
||||
let mut parquet_file = fs::File::create(&parquet_path)?;
|
||||
|
||||
let mut retrieved_count = 0;
|
||||
let mut top_match_count = 0;
|
||||
let mut non_top_match_count = 0;
|
||||
let mut ranking_involved_top_match_count = 0;
|
||||
ParquetWriter::new(&mut parquet_file)
|
||||
.finish(&mut df)
|
||||
.unwrap();
|
||||
|
||||
let mut no_match_count = 0;
|
||||
let mut no_match_none_retrieved = 0;
|
||||
let mut no_match_wrong_retrieval = 0;
|
||||
let stats = SummaryStats::from_dataframe(df)?;
|
||||
|
||||
let mut expected_no_match_count = 0;
|
||||
let mut in_excerpt_count = 0;
|
||||
let mut external_definition_count = 0;
|
||||
let stats_path = run_dir.join("stats.txt");
|
||||
fs::write(&stats_path, format!("{}", stats))?;
|
||||
|
||||
for result in results {
|
||||
references_count += 1;
|
||||
match &result.outcome {
|
||||
RetrievalOutcome::Match { best_match } => {
|
||||
included_count += 1;
|
||||
retrieved_count += 1;
|
||||
let multiple = result.retrieved_definitions.len() > 1;
|
||||
if *best_match == 0 {
|
||||
top_match_count += 1;
|
||||
if multiple {
|
||||
ranking_involved_top_match_count += 1;
|
||||
}
|
||||
} else {
|
||||
non_top_match_count += 1;
|
||||
}
|
||||
println!("{}", stats);
|
||||
println!("\nWrote:");
|
||||
println!("- {}", relativize_path(&parquet_path).display());
|
||||
println!("- {}", relativize_path(&stats_path).display());
|
||||
println!("- {}", relativize_path(&lsp_definitions_path).display());
|
||||
|
||||
Ok("".to_string())
|
||||
}
|
||||
|
||||
async fn build_dataframe(
|
||||
mut output_rx: mpsc::UnboundedReceiver<ReferenceRetrievalResult>,
|
||||
) -> Result<DataFrame> {
|
||||
use soa_rs::{Soa, Soars};
|
||||
|
||||
#[derive(Default, Soars)]
|
||||
struct Row {
|
||||
ref_id: u32,
|
||||
cursor_path: String,
|
||||
cursor_row: u32,
|
||||
cursor_column: u32,
|
||||
cursor_identifier: String,
|
||||
gold_in_excerpt: bool,
|
||||
gold_path: String,
|
||||
gold_row: u32,
|
||||
gold_column: u32,
|
||||
gold_is_external: bool,
|
||||
candidate_count: u32,
|
||||
candidate_path: Option<String>,
|
||||
candidate_row: Option<u32>,
|
||||
candidate_column: Option<u32>,
|
||||
candidate_is_gold: Option<bool>,
|
||||
candidate_rank: Option<u32>,
|
||||
candidate_is_same_file: Option<bool>,
|
||||
candidate_is_referenced_nearby: Option<bool>,
|
||||
candidate_is_referenced_in_breadcrumb: Option<bool>,
|
||||
candidate_reference_count: Option<u32>,
|
||||
candidate_same_file_declaration_count: Option<u32>,
|
||||
candidate_declaration_count: Option<u32>,
|
||||
candidate_reference_line_distance: Option<u32>,
|
||||
candidate_declaration_line_distance: Option<u32>,
|
||||
candidate_excerpt_vs_item_jaccard: Option<f32>,
|
||||
candidate_excerpt_vs_signature_jaccard: Option<f32>,
|
||||
candidate_adjacent_vs_item_jaccard: Option<f32>,
|
||||
candidate_adjacent_vs_signature_jaccard: Option<f32>,
|
||||
candidate_excerpt_vs_item_weighted_overlap: Option<f32>,
|
||||
candidate_excerpt_vs_signature_weighted_overlap: Option<f32>,
|
||||
candidate_adjacent_vs_item_weighted_overlap: Option<f32>,
|
||||
candidate_adjacent_vs_signature_weighted_overlap: Option<f32>,
|
||||
candidate_path_import_match_count: Option<u32>,
|
||||
candidate_wildcard_path_import_match_count: Option<u32>,
|
||||
candidate_import_similarity: Option<f32>,
|
||||
candidate_max_import_similarity: Option<f32>,
|
||||
candidate_normalized_import_similarity: Option<f32>,
|
||||
candidate_wildcard_import_similarity: Option<f32>,
|
||||
candidate_normalized_wildcard_import_similarity: Option<f32>,
|
||||
candidate_included_by_others: Option<u32>,
|
||||
candidate_includes_others: Option<u32>,
|
||||
}
|
||||
let mut rows = Soa::<Row>::new();
|
||||
let mut next_ref_id = 0;
|
||||
|
||||
while let Some(result) = output_rx.next().await {
|
||||
let mut gold_is_external = false;
|
||||
let mut gold_in_excerpt = false;
|
||||
let cursor_path = result.cursor_path.as_unix_str();
|
||||
let cursor_row = result.cursor_point.row + 1;
|
||||
let cursor_column = result.cursor_point.column + 1;
|
||||
let cursor_identifier = result.identifier.name.to_string();
|
||||
let ref_id = next_ref_id;
|
||||
next_ref_id += 1;
|
||||
|
||||
for lsp_definition in result.lsp_definitions {
|
||||
let SourceRange {
|
||||
path: gold_path,
|
||||
point_range: gold_point_range,
|
||||
offset_range: gold_offset_range,
|
||||
} = lsp_definition;
|
||||
let lsp_point_range =
|
||||
SerializablePoint::into_language_point_range(gold_point_range.clone());
|
||||
|
||||
gold_is_external = gold_is_external
|
||||
|| gold_path.is_absolute()
|
||||
|| gold_path
|
||||
.components()
|
||||
.any(|component| component.as_os_str() == "node_modules");
|
||||
|
||||
gold_in_excerpt = gold_in_excerpt
|
||||
|| result.excerpt_range.as_ref().is_some_and(|excerpt_range| {
|
||||
excerpt_range.contains_inclusive(&gold_offset_range)
|
||||
});
|
||||
|
||||
let gold_row = gold_point_range.start.row;
|
||||
let gold_column = gold_point_range.start.column;
|
||||
let candidate_count = result.retrieved_definitions.len() as u32;
|
||||
|
||||
for (candidate_rank, retrieved_definition) in
|
||||
result.retrieved_definitions.iter().enumerate()
|
||||
{
|
||||
let candidate_is_gold = gold_path.as_path()
|
||||
== retrieved_definition.path.as_std_path()
|
||||
&& retrieved_definition
|
||||
.range
|
||||
.contains_inclusive(&lsp_point_range);
|
||||
|
||||
let candidate_row = retrieved_definition.range.start.row + 1;
|
||||
let candidate_column = retrieved_definition.range.start.column + 1;
|
||||
|
||||
let DeclarationScoreComponents {
|
||||
is_same_file,
|
||||
is_referenced_nearby,
|
||||
is_referenced_in_breadcrumb,
|
||||
reference_count,
|
||||
same_file_declaration_count,
|
||||
declaration_count,
|
||||
reference_line_distance,
|
||||
declaration_line_distance,
|
||||
excerpt_vs_item_jaccard,
|
||||
excerpt_vs_signature_jaccard,
|
||||
adjacent_vs_item_jaccard,
|
||||
adjacent_vs_signature_jaccard,
|
||||
excerpt_vs_item_weighted_overlap,
|
||||
excerpt_vs_signature_weighted_overlap,
|
||||
adjacent_vs_item_weighted_overlap,
|
||||
adjacent_vs_signature_weighted_overlap,
|
||||
path_import_match_count,
|
||||
wildcard_path_import_match_count,
|
||||
import_similarity,
|
||||
max_import_similarity,
|
||||
normalized_import_similarity,
|
||||
wildcard_import_similarity,
|
||||
normalized_wildcard_import_similarity,
|
||||
included_by_others,
|
||||
includes_others,
|
||||
} = retrieved_definition.components;
|
||||
|
||||
rows.push(Row {
|
||||
ref_id,
|
||||
cursor_path: cursor_path.to_string(),
|
||||
cursor_row,
|
||||
cursor_column,
|
||||
cursor_identifier: cursor_identifier.clone(),
|
||||
gold_in_excerpt,
|
||||
gold_path: gold_path.to_string_lossy().to_string(),
|
||||
gold_row,
|
||||
gold_column,
|
||||
gold_is_external,
|
||||
candidate_count,
|
||||
candidate_path: Some(retrieved_definition.path.as_unix_str().to_string()),
|
||||
candidate_row: Some(candidate_row),
|
||||
candidate_column: Some(candidate_column),
|
||||
candidate_is_gold: Some(candidate_is_gold),
|
||||
candidate_rank: Some(candidate_rank as u32),
|
||||
candidate_is_same_file: Some(is_same_file),
|
||||
candidate_is_referenced_nearby: Some(is_referenced_nearby),
|
||||
candidate_is_referenced_in_breadcrumb: Some(is_referenced_in_breadcrumb),
|
||||
candidate_reference_count: Some(reference_count as u32),
|
||||
candidate_same_file_declaration_count: Some(same_file_declaration_count as u32),
|
||||
candidate_declaration_count: Some(declaration_count as u32),
|
||||
candidate_reference_line_distance: Some(reference_line_distance),
|
||||
candidate_declaration_line_distance: Some(declaration_line_distance),
|
||||
candidate_excerpt_vs_item_jaccard: Some(excerpt_vs_item_jaccard),
|
||||
candidate_excerpt_vs_signature_jaccard: Some(excerpt_vs_signature_jaccard),
|
||||
candidate_adjacent_vs_item_jaccard: Some(adjacent_vs_item_jaccard),
|
||||
candidate_adjacent_vs_signature_jaccard: Some(adjacent_vs_signature_jaccard),
|
||||
candidate_excerpt_vs_item_weighted_overlap: Some(
|
||||
excerpt_vs_item_weighted_overlap,
|
||||
),
|
||||
candidate_excerpt_vs_signature_weighted_overlap: Some(
|
||||
excerpt_vs_signature_weighted_overlap,
|
||||
),
|
||||
candidate_adjacent_vs_item_weighted_overlap: Some(
|
||||
adjacent_vs_item_weighted_overlap,
|
||||
),
|
||||
candidate_adjacent_vs_signature_weighted_overlap: Some(
|
||||
adjacent_vs_signature_weighted_overlap,
|
||||
),
|
||||
candidate_path_import_match_count: Some(path_import_match_count as u32),
|
||||
candidate_wildcard_path_import_match_count: Some(
|
||||
wildcard_path_import_match_count as u32,
|
||||
),
|
||||
candidate_import_similarity: Some(import_similarity),
|
||||
candidate_max_import_similarity: Some(max_import_similarity),
|
||||
candidate_normalized_import_similarity: Some(normalized_import_similarity),
|
||||
candidate_wildcard_import_similarity: Some(wildcard_import_similarity),
|
||||
candidate_normalized_wildcard_import_similarity: Some(
|
||||
normalized_wildcard_import_similarity,
|
||||
),
|
||||
candidate_included_by_others: Some(included_by_others as u32),
|
||||
candidate_includes_others: Some(includes_others as u32),
|
||||
});
|
||||
}
|
||||
RetrievalOutcome::NoMatch => {
|
||||
if result.lsp_definitions.is_empty() {
|
||||
included_count += 1;
|
||||
both_absent_count += 1;
|
||||
} else {
|
||||
no_match_count += 1;
|
||||
if result.retrieved_definitions.is_empty() {
|
||||
no_match_none_retrieved += 1;
|
||||
} else {
|
||||
no_match_wrong_retrieval += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
RetrievalOutcome::NoMatchDueToExternalLspDefinitions => {
|
||||
expected_no_match_count += 1;
|
||||
external_definition_count += 1;
|
||||
}
|
||||
RetrievalOutcome::ProbablyLocal => {
|
||||
included_count += 1;
|
||||
in_excerpt_count += 1;
|
||||
|
||||
if result.retrieved_definitions.is_empty() {
|
||||
rows.push(Row {
|
||||
ref_id,
|
||||
cursor_path: cursor_path.to_string(),
|
||||
cursor_row,
|
||||
cursor_column,
|
||||
cursor_identifier: cursor_identifier.clone(),
|
||||
gold_in_excerpt,
|
||||
gold_path: gold_path.to_string_lossy().to_string(),
|
||||
gold_row,
|
||||
gold_column,
|
||||
gold_is_external,
|
||||
candidate_count,
|
||||
..Default::default()
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
let slices = rows.slices();
|
||||
|
||||
fn count_and_percentage(part: usize, total: usize) -> String {
|
||||
format!("{} ({:.2}%)", part, (part as f64 / total as f64) * 100.0)
|
||||
let RowSlices {
|
||||
ref_id,
|
||||
cursor_path,
|
||||
cursor_row,
|
||||
cursor_column,
|
||||
cursor_identifier,
|
||||
gold_in_excerpt,
|
||||
gold_path,
|
||||
gold_row,
|
||||
gold_column,
|
||||
gold_is_external,
|
||||
candidate_path,
|
||||
candidate_row,
|
||||
candidate_column,
|
||||
candidate_is_gold,
|
||||
candidate_rank,
|
||||
candidate_count,
|
||||
candidate_is_same_file,
|
||||
candidate_is_referenced_nearby,
|
||||
candidate_is_referenced_in_breadcrumb,
|
||||
candidate_reference_count,
|
||||
candidate_same_file_declaration_count,
|
||||
candidate_declaration_count,
|
||||
candidate_reference_line_distance,
|
||||
candidate_declaration_line_distance,
|
||||
candidate_excerpt_vs_item_jaccard,
|
||||
candidate_excerpt_vs_signature_jaccard,
|
||||
candidate_adjacent_vs_item_jaccard,
|
||||
candidate_adjacent_vs_signature_jaccard,
|
||||
candidate_excerpt_vs_item_weighted_overlap,
|
||||
candidate_excerpt_vs_signature_weighted_overlap,
|
||||
candidate_adjacent_vs_item_weighted_overlap,
|
||||
candidate_adjacent_vs_signature_weighted_overlap,
|
||||
candidate_path_import_match_count,
|
||||
candidate_wildcard_path_import_match_count,
|
||||
candidate_import_similarity,
|
||||
candidate_max_import_similarity,
|
||||
candidate_normalized_import_similarity,
|
||||
candidate_wildcard_import_similarity,
|
||||
candidate_normalized_wildcard_import_similarity,
|
||||
candidate_included_by_others,
|
||||
candidate_includes_others,
|
||||
} = slices;
|
||||
|
||||
let df = DataFrame::new(vec![
|
||||
Series::new(PlSmallStr::from_str("ref_id"), ref_id).into(),
|
||||
Series::new(PlSmallStr::from_str("cursor_path"), cursor_path).into(),
|
||||
Series::new(PlSmallStr::from_str("cursor_row"), cursor_row).into(),
|
||||
Series::new(PlSmallStr::from_str("cursor_column"), cursor_column).into(),
|
||||
Series::new(PlSmallStr::from_str("cursor_identifier"), cursor_identifier).into(),
|
||||
Series::new(PlSmallStr::from_str("gold_in_excerpt"), gold_in_excerpt).into(),
|
||||
Series::new(PlSmallStr::from_str("gold_path"), gold_path).into(),
|
||||
Series::new(PlSmallStr::from_str("gold_row"), gold_row).into(),
|
||||
Series::new(PlSmallStr::from_str("gold_column"), gold_column).into(),
|
||||
Series::new(PlSmallStr::from_str("gold_is_external"), gold_is_external).into(),
|
||||
Series::new(PlSmallStr::from_str("candidate_count"), candidate_count).into(),
|
||||
Series::new(PlSmallStr::from_str("candidate_path"), candidate_path).into(),
|
||||
Series::new(PlSmallStr::from_str("candidate_row"), candidate_row).into(),
|
||||
Series::new(PlSmallStr::from_str("candidate_column"), candidate_column).into(),
|
||||
Series::new(PlSmallStr::from_str("candidate_is_gold"), candidate_is_gold).into(),
|
||||
Series::new(PlSmallStr::from_str("candidate_rank"), candidate_rank).into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_is_same_file"),
|
||||
candidate_is_same_file,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_is_referenced_nearby"),
|
||||
candidate_is_referenced_nearby,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_is_referenced_in_breadcrumb"),
|
||||
candidate_is_referenced_in_breadcrumb,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_reference_count"),
|
||||
candidate_reference_count,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_same_file_declaration_count"),
|
||||
candidate_same_file_declaration_count,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_declaration_count"),
|
||||
candidate_declaration_count,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_reference_line_distance"),
|
||||
candidate_reference_line_distance,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_declaration_line_distance"),
|
||||
candidate_declaration_line_distance,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_excerpt_vs_item_jaccard"),
|
||||
candidate_excerpt_vs_item_jaccard,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_excerpt_vs_signature_jaccard"),
|
||||
candidate_excerpt_vs_signature_jaccard,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_adjacent_vs_item_jaccard"),
|
||||
candidate_adjacent_vs_item_jaccard,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_adjacent_vs_signature_jaccard"),
|
||||
candidate_adjacent_vs_signature_jaccard,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_excerpt_vs_item_weighted_overlap"),
|
||||
candidate_excerpt_vs_item_weighted_overlap,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_excerpt_vs_signature_weighted_overlap"),
|
||||
candidate_excerpt_vs_signature_weighted_overlap,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_adjacent_vs_item_weighted_overlap"),
|
||||
candidate_adjacent_vs_item_weighted_overlap,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_adjacent_vs_signature_weighted_overlap"),
|
||||
candidate_adjacent_vs_signature_weighted_overlap,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_path_import_match_count"),
|
||||
candidate_path_import_match_count,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_wildcard_path_import_match_count"),
|
||||
candidate_wildcard_path_import_match_count,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_import_similarity"),
|
||||
candidate_import_similarity,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_max_import_similarity"),
|
||||
candidate_max_import_similarity,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_normalized_import_similarity"),
|
||||
candidate_normalized_import_similarity,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_wildcard_import_similarity"),
|
||||
candidate_wildcard_import_similarity,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_normalized_wildcard_import_similarity"),
|
||||
candidate_normalized_wildcard_import_similarity,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_included_by_others"),
|
||||
candidate_included_by_others,
|
||||
)
|
||||
.into(),
|
||||
Series::new(
|
||||
PlSmallStr::from_str("candidate_includes_others"),
|
||||
candidate_includes_others,
|
||||
)
|
||||
.into(),
|
||||
])?;
|
||||
|
||||
Ok(df)
|
||||
}
|
||||
|
||||
fn relativize_path(path: &Path) -> &Path {
|
||||
path.strip_prefix(std::env::current_dir().unwrap())
|
||||
.unwrap_or(path)
|
||||
}
|
||||
|
||||
struct SummaryStats {
|
||||
references_count: u32,
|
||||
retrieved_count: u32,
|
||||
top_match_count: u32,
|
||||
non_top_match_count: u32,
|
||||
ranking_involved_top_match_count: u32,
|
||||
missing_none_retrieved: u32,
|
||||
missing_wrong_retrieval: u32,
|
||||
missing_external: u32,
|
||||
in_excerpt_count: u32,
|
||||
}
|
||||
|
||||
impl SummaryStats {
|
||||
fn from_dataframe(df: DataFrame) -> Result<Self> {
|
||||
// TODO: use lazy more
|
||||
let unique_refs =
|
||||
df.unique::<(), ()>(Some(&["ref_id".into()]), UniqueKeepStrategy::Any, None)?;
|
||||
let references_count = unique_refs.height() as u32;
|
||||
|
||||
let gold_mask = df.column("candidate_is_gold")?.bool()?;
|
||||
let gold_df = df.filter(&gold_mask)?;
|
||||
let retrieved_count = gold_df.height() as u32;
|
||||
|
||||
let top_match_mask = gold_df.column("candidate_rank")?.u32()?.equal(0);
|
||||
let top_match_df = gold_df.filter(&top_match_mask)?;
|
||||
let top_match_count = top_match_df.height() as u32;
|
||||
|
||||
let ranking_involved_top_match_count = top_match_df
|
||||
.column("candidate_count")?
|
||||
.u32()?
|
||||
.gt(1)
|
||||
.sum()
|
||||
.unwrap_or_default();
|
||||
|
||||
let non_top_match_count = (!top_match_mask).sum().unwrap_or(0);
|
||||
|
||||
let not_retrieved_df = df
|
||||
.lazy()
|
||||
.group_by(&[col("ref_id"), col("candidate_count")])
|
||||
.agg(&[
|
||||
col("candidate_is_gold")
|
||||
.fill_null(false)
|
||||
.sum()
|
||||
.alias("gold_count"),
|
||||
col("gold_in_excerpt").sum().alias("gold_in_excerpt_count"),
|
||||
col("gold_is_external")
|
||||
.sum()
|
||||
.alias("gold_is_external_count"),
|
||||
])
|
||||
.filter(col("gold_count").eq(lit(0)))
|
||||
.collect()?;
|
||||
|
||||
let in_excerpt_mask = not_retrieved_df
|
||||
.column("gold_in_excerpt_count")?
|
||||
.u32()?
|
||||
.gt(0);
|
||||
let in_excerpt_count = in_excerpt_mask.sum().unwrap_or(0);
|
||||
|
||||
let missing_df = not_retrieved_df.filter(&!in_excerpt_mask)?;
|
||||
|
||||
let missing_none_retrieved_mask = missing_df.column("candidate_count")?.u32()?.equal(0);
|
||||
let missing_none_retrieved = missing_none_retrieved_mask.sum().unwrap_or(0);
|
||||
let external_mask = missing_df.column("gold_is_external_count")?.u32()?.gt(0);
|
||||
let missing_external = (missing_none_retrieved_mask & external_mask)
|
||||
.sum()
|
||||
.unwrap_or(0);
|
||||
|
||||
let missing_wrong_retrieval = missing_df
|
||||
.column("candidate_count")?
|
||||
.u32()?
|
||||
.gt(0)
|
||||
.sum()
|
||||
.unwrap_or(0);
|
||||
|
||||
Ok(SummaryStats {
|
||||
references_count,
|
||||
retrieved_count,
|
||||
top_match_count,
|
||||
non_top_match_count,
|
||||
ranking_involved_top_match_count,
|
||||
missing_none_retrieved,
|
||||
missing_wrong_retrieval,
|
||||
missing_external,
|
||||
in_excerpt_count,
|
||||
})
|
||||
}
|
||||
|
||||
println!("");
|
||||
println!("╮ references: {}", references_count);
|
||||
println!(
|
||||
"├─╮ included: {}",
|
||||
count_and_percentage(included_count, references_count),
|
||||
);
|
||||
println!(
|
||||
"│ ├─╮ retrieved: {}",
|
||||
count_and_percentage(retrieved_count, references_count)
|
||||
);
|
||||
println!(
|
||||
"│ │ ├─╮ top match : {}",
|
||||
count_and_percentage(top_match_count, retrieved_count)
|
||||
);
|
||||
println!(
|
||||
"│ │ │ ╰─╴ involving ranking: {}",
|
||||
count_and_percentage(ranking_involved_top_match_count, top_match_count)
|
||||
);
|
||||
println!(
|
||||
"│ │ ╰─╴ non-top match: {}",
|
||||
count_and_percentage(non_top_match_count, retrieved_count)
|
||||
);
|
||||
println!(
|
||||
"│ ├─╴ both absent: {}",
|
||||
count_and_percentage(both_absent_count, included_count)
|
||||
);
|
||||
println!(
|
||||
"│ ╰─╴ in excerpt: {}",
|
||||
count_and_percentage(in_excerpt_count, included_count)
|
||||
);
|
||||
println!(
|
||||
"├─╮ no match: {}",
|
||||
count_and_percentage(no_match_count, references_count)
|
||||
);
|
||||
println!(
|
||||
"│ ├─╴ none retrieved: {}",
|
||||
count_and_percentage(no_match_none_retrieved, no_match_count)
|
||||
);
|
||||
println!(
|
||||
"│ ╰─╴ wrong retrieval: {}",
|
||||
count_and_percentage(no_match_wrong_retrieval, no_match_count)
|
||||
);
|
||||
println!(
|
||||
"╰─╮ expected no match: {}",
|
||||
count_and_percentage(expected_no_match_count, references_count)
|
||||
);
|
||||
println!(
|
||||
" ╰─╴ external definition: {}",
|
||||
count_and_percentage(external_definition_count, expected_no_match_count)
|
||||
);
|
||||
fn count_and_percentage(part: u32, total: u32) -> String {
|
||||
format!("{} ({:.2}%)", part, (part as f64 / total as f64) * 100.0)
|
||||
}
|
||||
}
|
||||
|
||||
println!("");
|
||||
println!("LSP definition cache at {}", lsp_definitions_path.display());
|
||||
impl std::fmt::Display for SummaryStats {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
let included = self.in_excerpt_count + self.retrieved_count;
|
||||
let missing = self.references_count - included;
|
||||
writeln!(f)?;
|
||||
writeln!(f, "╮ references: {}", self.references_count)?;
|
||||
writeln!(
|
||||
f,
|
||||
"├─╮ included: {}",
|
||||
Self::count_and_percentage(included, self.references_count),
|
||||
)?;
|
||||
writeln!(
|
||||
f,
|
||||
"│ ├─╮ retrieved: {}",
|
||||
Self::count_and_percentage(self.retrieved_count, self.references_count)
|
||||
)?;
|
||||
writeln!(
|
||||
f,
|
||||
"│ │ ├─╮ top match : {}",
|
||||
Self::count_and_percentage(self.top_match_count, self.retrieved_count)
|
||||
)?;
|
||||
writeln!(
|
||||
f,
|
||||
"│ │ │ ╰─╴ involving ranking: {}",
|
||||
Self::count_and_percentage(self.ranking_involved_top_match_count, self.top_match_count)
|
||||
)?;
|
||||
writeln!(
|
||||
f,
|
||||
"│ │ ╰─╴ non-top match: {}",
|
||||
Self::count_and_percentage(self.non_top_match_count, self.retrieved_count)
|
||||
)?;
|
||||
writeln!(
|
||||
f,
|
||||
"│ ╰─╴ in excerpt: {}",
|
||||
Self::count_and_percentage(self.in_excerpt_count, included)
|
||||
)?;
|
||||
writeln!(
|
||||
f,
|
||||
"╰─╮ missing: {}",
|
||||
Self::count_and_percentage(missing, self.references_count)
|
||||
)?;
|
||||
writeln!(
|
||||
f,
|
||||
" ├─╮ none retrieved: {}",
|
||||
Self::count_and_percentage(self.missing_none_retrieved, missing)
|
||||
)?;
|
||||
writeln!(
|
||||
f,
|
||||
" │ ╰─╴ external (expected): {}",
|
||||
Self::count_and_percentage(self.missing_external, missing)
|
||||
)?;
|
||||
writeln!(
|
||||
f,
|
||||
" ╰─╴ wrong retrieval: {}",
|
||||
Self::count_and_percentage(self.missing_wrong_retrieval, missing)
|
||||
)?;
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
Ok("".to_string())
|
||||
#[derive(Debug)]
|
||||
struct ReferenceRetrievalResult {
|
||||
cursor_path: Arc<RelPath>,
|
||||
cursor_point: Point,
|
||||
identifier: Identifier,
|
||||
excerpt_range: Option<Range<usize>>,
|
||||
lsp_definitions: Vec<SourceRange>,
|
||||
retrieved_definitions: Vec<RetrievedDefinition>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct RetrievedDefinition {
|
||||
path: Arc<RelPath>,
|
||||
range: Range<Point>,
|
||||
score: f32,
|
||||
#[allow(dead_code)]
|
||||
retrieval_score: f32,
|
||||
#[allow(dead_code)]
|
||||
components: DeclarationScoreComponents,
|
||||
}
|
||||
|
||||
struct RetrieveResult {
|
||||
@@ -828,39 +1253,3 @@ impl From<SerializablePoint> for Point {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct RetrievalStatsResult {
|
||||
outcome: RetrievalOutcome,
|
||||
#[allow(dead_code)]
|
||||
path: Arc<RelPath>,
|
||||
#[allow(dead_code)]
|
||||
identifier: Identifier,
|
||||
#[allow(dead_code)]
|
||||
point: Point,
|
||||
#[allow(dead_code)]
|
||||
lsp_definitions: Vec<SourceRange>,
|
||||
retrieved_definitions: Vec<RetrievedDefinition>,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum RetrievalOutcome {
|
||||
Match {
|
||||
/// Lowest index within retrieved_definitions that matches an LSP definition.
|
||||
best_match: usize,
|
||||
},
|
||||
ProbablyLocal,
|
||||
NoMatch,
|
||||
NoMatchDueToExternalLspDefinitions,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct RetrievedDefinition {
|
||||
path: Arc<RelPath>,
|
||||
range: Range<Point>,
|
||||
score: f32,
|
||||
#[allow(dead_code)]
|
||||
retrieval_score: f32,
|
||||
#[allow(dead_code)]
|
||||
components: DeclarationScoreComponents,
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ accepted = [
|
||||
"Unicode-3.0",
|
||||
"OpenSSL",
|
||||
"Zlib",
|
||||
"BSL-1.0",
|
||||
]
|
||||
|
||||
[procinfo.clarify]
|
||||
|
||||
@@ -38,9 +38,9 @@ bit-set = { version = "0.8", default-features = false, features = ["std"] }
|
||||
bit-vec = { version = "0.8", default-features = false, features = ["std"] }
|
||||
bitflags = { version = "2", default-features = false, features = ["serde", "std"] }
|
||||
bstr = { version = "1" }
|
||||
bytemuck = { version = "1", default-features = false, features = ["aarch64_simd", "derive", "extern_crate_alloc"] }
|
||||
bytemuck = { version = "1", default-features = false, features = ["aarch64_simd", "derive", "extern_crate_alloc", "must_cast"] }
|
||||
byteorder = { version = "1" }
|
||||
bytes = { version = "1" }
|
||||
bytes = { version = "1", features = ["serde"] }
|
||||
chrono = { version = "0.4", features = ["serde"] }
|
||||
clap = { version = "4", features = ["cargo", "derive", "string", "wrap_help"] }
|
||||
clap_builder = { version = "4", default-features = false, features = ["cargo", "color", "std", "string", "suggestions", "usage", "wrap_help"] }
|
||||
@@ -55,6 +55,8 @@ either = { version = "1", features = ["serde", "use_std"] }
|
||||
euclid = { version = "0.22" }
|
||||
event-listener = { version = "5" }
|
||||
event-listener-strategy = { version = "0.5" }
|
||||
flate2 = { version = "1", features = ["zlib-rs"] }
|
||||
foldhash = { version = "0.1" }
|
||||
form_urlencoded = { version = "1" }
|
||||
futures = { version = "0.3", features = ["io-compat"] }
|
||||
futures-channel = { version = "0.3", features = ["sink"] }
|
||||
@@ -67,7 +69,7 @@ futures-util = { version = "0.3", features = ["channel", "io-compat", "sink"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["std"] }
|
||||
half = { version = "2", features = ["bytemuck", "num-traits", "rand_distr", "use-intrinsics"] }
|
||||
handlebars = { version = "4", features = ["rust-embed"] }
|
||||
hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15", features = ["serde"] }
|
||||
hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15", features = ["rayon", "serde"] }
|
||||
hashbrown-582f2526e08bb6a0 = { package = "hashbrown", version = "0.14", features = ["raw"] }
|
||||
hmac = { version = "0.12", default-features = false, features = ["reset"] }
|
||||
hyper = { version = "0.14", features = ["client", "http1", "http2", "runtime", "server", "stream"] }
|
||||
@@ -105,6 +107,8 @@ regalloc2 = { version = "0.11", features = ["checker", "enable-serde"] }
|
||||
regex = { version = "1" }
|
||||
regex-automata = { version = "0.4" }
|
||||
regex-syntax = { version = "0.8" }
|
||||
reqwest = { version = "0.12", default-features = false, features = ["blocking", "http2", "json", "rustls-tls-native-roots", "stream"] }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rust_decimal = { version = "1", default-features = false, features = ["maths", "serde", "std"] }
|
||||
rustc-hash = { version = "1" }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net"] }
|
||||
@@ -129,7 +133,7 @@ thiserror = { version = "2" }
|
||||
time = { version = "0.3", features = ["local-offset", "macros", "serde-well-known"] }
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["tls12"] }
|
||||
tokio-util = { version = "0.7", features = ["codec", "compat", "io"] }
|
||||
tokio-util = { version = "0.7", features = ["codec", "compat", "io-util", "rt"] }
|
||||
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
|
||||
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
|
||||
tracing = { version = "0.1", features = ["log"] }
|
||||
@@ -167,9 +171,9 @@ bit-set = { version = "0.8", default-features = false, features = ["std"] }
|
||||
bit-vec = { version = "0.8", default-features = false, features = ["std"] }
|
||||
bitflags = { version = "2", default-features = false, features = ["serde", "std"] }
|
||||
bstr = { version = "1" }
|
||||
bytemuck = { version = "1", default-features = false, features = ["aarch64_simd", "derive", "extern_crate_alloc"] }
|
||||
bytemuck = { version = "1", default-features = false, features = ["aarch64_simd", "derive", "extern_crate_alloc", "must_cast"] }
|
||||
byteorder = { version = "1" }
|
||||
bytes = { version = "1" }
|
||||
bytes = { version = "1", features = ["serde"] }
|
||||
cc = { version = "1", default-features = false, features = ["parallel"] }
|
||||
chrono = { version = "0.4", features = ["serde"] }
|
||||
clap = { version = "4", features = ["cargo", "derive", "string", "wrap_help"] }
|
||||
@@ -185,6 +189,8 @@ either = { version = "1", features = ["serde", "use_std"] }
|
||||
euclid = { version = "0.22" }
|
||||
event-listener = { version = "5" }
|
||||
event-listener-strategy = { version = "0.5" }
|
||||
flate2 = { version = "1", features = ["zlib-rs"] }
|
||||
foldhash = { version = "0.1" }
|
||||
form_urlencoded = { version = "1" }
|
||||
futures = { version = "0.3", features = ["io-compat"] }
|
||||
futures-channel = { version = "0.3", features = ["sink"] }
|
||||
@@ -197,7 +203,7 @@ futures-util = { version = "0.3", features = ["channel", "io-compat", "sink"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["std"] }
|
||||
half = { version = "2", features = ["bytemuck", "num-traits", "rand_distr", "use-intrinsics"] }
|
||||
handlebars = { version = "4", features = ["rust-embed"] }
|
||||
hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15", features = ["serde"] }
|
||||
hashbrown-3575ec1268b04181 = { package = "hashbrown", version = "0.15", features = ["rayon", "serde"] }
|
||||
hashbrown-582f2526e08bb6a0 = { package = "hashbrown", version = "0.14", features = ["raw"] }
|
||||
heck = { version = "0.4", features = ["unicode"] }
|
||||
hmac = { version = "0.12", default-features = false, features = ["reset"] }
|
||||
@@ -240,6 +246,8 @@ regalloc2 = { version = "0.11", features = ["checker", "enable-serde"] }
|
||||
regex = { version = "1" }
|
||||
regex-automata = { version = "0.4" }
|
||||
regex-syntax = { version = "0.8" }
|
||||
reqwest = { version = "0.12", default-features = false, features = ["blocking", "http2", "json", "rustls-tls-native-roots", "stream"] }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rust_decimal = { version = "1", default-features = false, features = ["maths", "serde", "std"] }
|
||||
rustc-hash = { version = "1" }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", features = ["fs", "net"] }
|
||||
@@ -269,7 +277,7 @@ time = { version = "0.3", features = ["local-offset", "macros", "serde-well-know
|
||||
time-macros = { version = "0.2", default-features = false, features = ["formatting", "parsing", "serde"] }
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["tls12"] }
|
||||
tokio-util = { version = "0.7", features = ["codec", "compat", "io"] }
|
||||
tokio-util = { version = "0.7", features = ["codec", "compat", "io-util", "rt"] }
|
||||
toml_datetime = { version = "0.6", default-features = false, features = ["serde"] }
|
||||
toml_edit = { version = "0.22", default-features = false, features = ["display", "parse", "serde"] }
|
||||
tracing = { version = "0.1", features = ["log"] }
|
||||
@@ -287,8 +295,6 @@ wasmtime-environ = { version = "29", default-features = false, features = ["comp
|
||||
codespan-reporting = { version = "0.12" }
|
||||
core-foundation = { version = "0.9" }
|
||||
core-foundation-sys = { version = "0.8" }
|
||||
flate2 = { version = "1" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
|
||||
@@ -301,13 +307,11 @@ objc2-foundation = { version = "0.3", default-features = false, features = ["NSA
|
||||
objc2-metal = { version = "0.3" }
|
||||
object = { version = "0.36", default-features = false, features = ["archive", "read_core", "unaligned", "write"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "process"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
security-framework = { version = "3", features = ["OSX_10_14"] }
|
||||
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -317,8 +321,6 @@ tower = { version = "0.5", default-features = false, features = ["timeout", "uti
|
||||
codespan-reporting = { version = "0.12" }
|
||||
core-foundation = { version = "0.9" }
|
||||
core-foundation-sys = { version = "0.8" }
|
||||
flate2 = { version = "1" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
|
||||
@@ -332,13 +334,11 @@ objc2-metal = { version = "0.3" }
|
||||
object = { version = "0.36", default-features = false, features = ["archive", "read_core", "unaligned", "write"] }
|
||||
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "process"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
security-framework = { version = "3", features = ["OSX_10_14"] }
|
||||
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -348,8 +348,6 @@ tower = { version = "0.5", default-features = false, features = ["timeout", "uti
|
||||
codespan-reporting = { version = "0.12" }
|
||||
core-foundation = { version = "0.9" }
|
||||
core-foundation-sys = { version = "0.8" }
|
||||
flate2 = { version = "1" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
|
||||
@@ -362,13 +360,11 @@ objc2-foundation = { version = "0.3", default-features = false, features = ["NSA
|
||||
objc2-metal = { version = "0.3" }
|
||||
object = { version = "0.36", default-features = false, features = ["archive", "read_core", "unaligned", "write"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "process"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
security-framework = { version = "3", features = ["OSX_10_14"] }
|
||||
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -378,8 +374,6 @@ tower = { version = "0.5", default-features = false, features = ["timeout", "uti
|
||||
codespan-reporting = { version = "0.12" }
|
||||
core-foundation = { version = "0.9" }
|
||||
core-foundation-sys = { version = "0.8" }
|
||||
flate2 = { version = "1" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
|
||||
@@ -393,13 +387,11 @@ objc2-metal = { version = "0.3" }
|
||||
object = { version = "0.36", default-features = false, features = ["archive", "read_core", "unaligned", "write"] }
|
||||
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "process"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "termios", "time"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
security-framework = { version = "3", features = ["OSX_10_14"] }
|
||||
security-framework-sys = { version = "2", features = ["OSX_10_14"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -413,9 +405,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
|
||||
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
|
||||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
@@ -436,13 +426,11 @@ proc-macro2 = { version = "1", features = ["span-locations"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
quote = { version = "1" }
|
||||
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -460,9 +448,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
|
||||
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
|
||||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
@@ -482,12 +468,10 @@ object = { version = "0.36", default-features = false, features = ["archive", "r
|
||||
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -506,9 +490,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
|
||||
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
|
||||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
@@ -529,13 +511,11 @@ proc-macro2 = { version = "1", features = ["span-locations"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
quote = { version = "1" }
|
||||
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -553,9 +533,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
|
||||
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
|
||||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
@@ -575,12 +553,10 @@ object = { version = "0.36", default-features = false, features = ["archive", "r
|
||||
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -592,18 +568,14 @@ zeroize = { version = "1", features = ["zeroize_derive"] }
|
||||
zvariant = { version = "5", features = ["enumflags2", "gvariant", "url"] }
|
||||
|
||||
[target.x86_64-pc-windows-msvc.dependencies]
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
|
||||
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
|
||||
livekit-runtime = { git = "https://github.com/zed-industries/livekit-rust-sdks", rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d" }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "fs", "net"] }
|
||||
scopeguard = { version = "1" }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -618,19 +590,15 @@ windows-sys-c8eced492e86ede7 = { package = "windows-sys", version = "0.48", feat
|
||||
windows-sys-d4189bed749088b6 = { package = "windows-sys", version = "0.61", features = ["Wdk_Foundation", "Wdk_Storage_FileSystem", "Win32_Globalization", "Win32_Networking_WinSock", "Win32_Security", "Win32_Storage_FileSystem", "Win32_System_Com", "Win32_System_IO", "Win32_System_LibraryLoader", "Win32_System_Threading", "Win32_System_WindowsProgramming", "Win32_UI_Shell"] }
|
||||
|
||||
[target.x86_64-pc-windows-msvc.build-dependencies]
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
|
||||
hyper-rustls = { version = "0.27", default-features = false, features = ["http1", "http2", "native-tokio", "ring", "tls12"] }
|
||||
livekit-runtime = { git = "https://github.com/zed-industries/livekit-rust-sdks", rev = "5f04705ac3f356350ae31534ffbc476abc9ea83d" }
|
||||
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "fs", "net"] }
|
||||
scopeguard = { version = "1" }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -652,9 +620,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
|
||||
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
|
||||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
@@ -675,13 +641,11 @@ proc-macro2 = { version = "1", features = ["span-locations"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
quote = { version = "1" }
|
||||
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
@@ -699,9 +663,7 @@ bytemuck = { version = "1", default-features = false, features = ["min_const_gen
|
||||
cipher = { version = "0.4", default-features = false, features = ["block-padding", "rand_core", "zeroize"] }
|
||||
codespan-reporting = { version = "0.12" }
|
||||
crypto-common = { version = "0.1", default-features = false, features = ["rand_core", "std"] }
|
||||
flate2 = { version = "1" }
|
||||
flume = { version = "0.11" }
|
||||
foldhash = { version = "0.1", default-features = false, features = ["std"] }
|
||||
getrandom-468e82937335b1c9 = { package = "getrandom", version = "0.3", default-features = false, features = ["std"] }
|
||||
getrandom-6f8ce4dd05d13bba = { package = "getrandom", version = "0.2", default-features = false, features = ["js", "rdrand"] }
|
||||
gimli = { version = "0.31", default-features = false, features = ["read", "std", "write"] }
|
||||
@@ -721,12 +683,10 @@ object = { version = "0.36", default-features = false, features = ["archive", "r
|
||||
proc-macro2 = { version = "1", default-features = false, features = ["span-locations"] }
|
||||
prost-5ef9efb8ec2df382 = { package = "prost", version = "0.12", features = ["prost-derive"] }
|
||||
rand-274715c4dabd11b0 = { package = "rand", version = "0.9" }
|
||||
ring = { version = "0.17", features = ["std"] }
|
||||
rustix-d585fab2519d2d1 = { package = "rustix", version = "0.38", features = ["event", "mm", "net", "param", "pipe", "process", "shm", "system"] }
|
||||
rustix-dff4ba8e3ae991db = { package = "rustix", version = "1", default-features = false, features = ["event", "pipe", "process", "pty", "stdio", "termios", "time"] }
|
||||
scopeguard = { version = "1" }
|
||||
smallvec = { version = "1", default-features = false, features = ["write"] }
|
||||
sync_wrapper = { version = "1", default-features = false, features = ["futures"] }
|
||||
tokio-rustls = { version = "0.26", default-features = false, features = ["logging", "ring"] }
|
||||
tokio-socks = { version = "0.5", features = ["futures-io"] }
|
||||
tokio-stream = { version = "0.1", features = ["fs"] }
|
||||
|
||||
Reference in New Issue
Block a user