agent-source-repository 0.1.0

Agent Source Repository local context registry for coding agents
Documentation
use super::search_core::{asr_search_result, search_results_from_snapshot};
use super::{
    exact_shard, open_store, search_index_state, validate_repo_name, validate_top_k, AsrError,
    AsrResult, SearchOutput, MAX_TOP_K,
};

pub(crate) fn search(query: &str, repo_name: &str, top_k: usize) -> AsrResult<SearchOutput> {
    validate_repo_name(repo_name)?;
    let query = query.trim();
    if query.is_empty() {
        return Err(AsrError::new(
            "invalid_query",
            "Search query must not be empty",
        ));
    }
    exact_shard::validate_asr_query(query)?;
    validate_top_k(top_k, MAX_TOP_K)?;

    let (paths, store) = open_store()?;
    let snapshot = super::require_ready_index_snapshot(&paths, &store, repo_name)?;
    let raw_results = search_results_from_snapshot(query, &snapshot, top_k)?;
    let results = raw_results
        .iter()
        .map(|result| asr_search_result(query, result))
        .collect();
    let exact_shard = snapshot.exact_shard.summary.clone();

    Ok(SearchOutput {
        query: query.to_string(),
        repo: snapshot.repo.name,
        top_k,
        index_state: search_index_state(snapshot.state, false, exact_shard),
        results,
    })
}