···
println!("No issues found (showing only issues you created)");
println!("RKEY\tTITLE\tREPO");
+
// Build cache of repo AT-URIs to formatted names
+
let mut repo_cache: std::collections::HashMap<String, String> = std::collections::HashMap::new();
+
let repo_display = if let Some(cached) = repo_cache.get(&it.issue.repo) {
+
} else if let Some((repo_did, repo_rkey)) = parse_repo_at_uri(&it.issue.repo) {
+
// Fetch and format repo info
+
let formatted = match client
+
.get_repo_by_rkey(&repo_did, &repo_rkey, Some(session.access_jwt.as_str()))
+
.resolve_did_to_handle(&repo_did, Some(session.access_jwt.as_str()))
+
.unwrap_or(repo_did.clone());
+
format!("{}/{}", handle, repo.name)
+
Err(_) => it.issue.repo.clone(),
+
repo_cache.insert(it.issue.repo.clone(), formatted.clone());
+
println!("{}\t{}\t{}", it.rkey, it.issue.title, repo_display);
+
fn parse_repo_at_uri(at_uri: &str) -> Option<(String, String)> {
+
// Parse at://did/sh.tangled.repo/rkey
+
let without_prefix = at_uri.strip_prefix("at://")?;
+
let parts: Vec<&str> = without_prefix.split('/').collect();
+
if parts.len() >= 3 && parts[1] == "sh.tangled.repo" {
+
Some((parts[0].to_string(), parts[2].to_string()))
async fn create(args: IssueCreateArgs) -> Result<()> {