feat: sunbeam reindex-code CLI verb + ReindexCode proto

Proto: ReindexCode RPC with org/repo/branch filters.
CLI: sunbeam reindex-code [--org studio] [--repo owner/name] [--endpoint ...]
Calls Sol's gRPC ReindexCode endpoint, prints indexed symbol count.
This commit is contained in:
2026-03-24 09:38:02 +00:00
parent 8726e8fbe7
commit 04f10d2794
3 changed files with 61 additions and 0 deletions

View File

@@ -145,6 +145,23 @@ pub enum Verb {
action: Option<crate::code::CodeCommand>,
},
/// Reindex Gitea repos into Sol's code search index.
#[command(name = "reindex-code")]
ReindexCode {
/// Filter to a specific org.
#[arg(long)]
org: Option<String>,
/// Index a specific repo (owner/name format).
#[arg(long)]
repo: Option<String>,
/// Index a specific branch (default: repo's default branch).
#[arg(long)]
branch: Option<String>,
/// Sol gRPC endpoint.
#[arg(long, default_value = "http://127.0.0.1:50051")]
endpoint: String,
},
/// Self-update from latest mainline commit.
Update,
@@ -1060,6 +1077,33 @@ pub async fn dispatch() -> Result<()> {
},
Some(Verb::Code { action }) => crate::code::cmd_code(action).await,
Some(Verb::ReindexCode { org, repo, branch, endpoint }) => {
use sunbeam_proto::sunbeam_code_v1::code_agent_client::CodeAgentClient;
use sunbeam_proto::sunbeam_code_v1::ReindexCodeRequest;
tracing::info!(endpoint = endpoint.as_str(), "Connecting to Sol for reindex");
let mut client = CodeAgentClient::connect(endpoint)
.await
.map_err(|e| sunbeam_sdk::error::SunbeamError::Other(format!("Failed to connect: {e}")))?;
let request = ReindexCodeRequest {
org: org.unwrap_or_default(),
repo: repo.unwrap_or_default(),
branch: branch.unwrap_or_default(),
};
let response = client.reindex_code(request)
.await
.map_err(|e| sunbeam_sdk::error::SunbeamError::Other(format!("Reindex failed: {e}")))?;
let resp = response.into_inner();
if resp.error.is_empty() {
println!("Indexed {} symbols across {} repos", resp.symbols_indexed, resp.repos_indexed);
} else {
eprintln!("Error: {}", resp.error);
}
Ok(())
}
Some(Verb::Update) => sunbeam_sdk::update::cmd_update().await,

View File

@@ -72,6 +72,10 @@ impl CodeAgent for MockCodeAgent {
Ok(Response::new(Box::pin(ReceiverStream::new(rx))))
}
async fn reindex_code(&self, _req: Request<ReindexCodeRequest>) -> Result<Response<ReindexCodeResponse>, Status> {
Ok(Response::new(ReindexCodeResponse { repos_indexed: 0, symbols_indexed: 0, error: "mock".into() }))
}
}
#[tokio::test]