use std::path::Path;
use provable_contracts::query::{self, ContractIndex, QueryParams};
fn main() {
let contracts_dir = Path::new("contracts");
let index =
ContractIndex::from_directory(contracts_dir).expect("contracts/ directory must exist");
println!("=== Cross-Project Query: \"softmax\" ===\n");
let params = QueryParams {
query: "softmax".to_string(),
show_call_sites: true,
show_violations: true,
show_coverage_map: true,
show_score: true,
limit: 3,
..Default::default()
};
let output = query::execute(&index, ¶ms);
print!("{output}");
println!("\n=== Filtered to aprender: \"softmax\" ===\n");
let params = QueryParams {
query: "softmax".to_string(),
show_call_sites: true,
show_violations: true,
show_coverage_map: true,
project_filter: Some("aprender".to_string()),
limit: 2,
..Default::default()
};
let output = query::execute(&index, ¶ms);
print!("{output}");
println!("\n=== All Projects Scan: \"attention\" ===\n");
let params = QueryParams {
query: "attention".to_string(),
all_projects: true,
limit: 2,
..Default::default()
};
let output = query::execute(&index, ¶ms);
print!("{output}");
println!("\n=== JSON Output (first result) ===\n");
let params = QueryParams {
query: "attention".to_string(),
show_call_sites: true,
show_coverage_map: true,
limit: 1,
..Default::default()
};
let output = query::execute(&index, ¶ms);
println!("{}", serde_json::to_string_pretty(&output).unwrap());
println!("\n=== Markdown Output ===\n");
let params = QueryParams {
query: "rmsnorm".to_string(),
show_call_sites: true,
show_violations: true,
show_coverage_map: true,
limit: 2,
..Default::default()
};
let output = query::execute(&index, ¶ms);
print!("{}", output.to_markdown());
println!("\n=== Tier 1 (Foundation Kernels): \"kernel\" ===\n");
let params = QueryParams {
query: "kernel".to_string(),
tier_filter: Some(1),
limit: 5,
..Default::default()
};
let output = query::execute(&index, ¶ms);
print!("{output}");
println!("\n=== Class E (Qwen): \"norm\" ===\n");
let params = QueryParams {
query: "norm".to_string(),
class_filter: Some('E'),
show_score: true,
limit: 5,
..Default::default()
};
let output = query::execute(&index, ¶ms);
print!("{output}");
println!("\n=== Rebuild Index ===\n");
let fresh_index =
ContractIndex::from_directory_opts(contracts_dir, true).expect("rebuild should succeed");
println!("Rebuilt index with {} contracts", fresh_index.entries.len());
}