v0.4.1 : Phase 1 complete (17/17) - dashboard TUI (#33), favoris/notes/tags (#39), profils d'environnement (#40), completions dynamiques + man pages (#41), packaging officiel + CI (#42), self-update Gitea, state v3, 212 tests
This commit is contained in:
@@ -20,6 +20,12 @@ struct InfoJson {
|
||||
pid: Option<u32>,
|
||||
installable: bool,
|
||||
note: Option<String>,
|
||||
/// Personal note (issue #39).
|
||||
personal_note: Option<String>,
|
||||
/// Personal tags (issue #39).
|
||||
personal_tags: Vec<String>,
|
||||
/// Favorite (issue #39).
|
||||
favorite: bool,
|
||||
platforms: Vec<String>,
|
||||
run: Option<String>,
|
||||
args: Vec<String>,
|
||||
@@ -83,6 +89,9 @@ pub fn run(app: &App, name: &str) -> Result<i32> {
|
||||
pid: if running { entry.as_ref().and_then(|e| e.pid) } else { None },
|
||||
installable: agent.installable,
|
||||
note: agent.note.clone(),
|
||||
personal_note: annotations_note(app, &agent.name),
|
||||
personal_tags: annotations_tags(app, &agent.name),
|
||||
favorite: annotations_favorite(app, &agent.name),
|
||||
platforms: agent.platforms.clone(),
|
||||
run: agent.run.clone(),
|
||||
args: agent.args.clone(),
|
||||
@@ -274,9 +283,48 @@ pub fn run(app: &App, name: &str) -> Result<i32> {
|
||||
println!();
|
||||
println!(" {}", dim(&format!("note {n}")));
|
||||
}
|
||||
// --- Personal annotations (issue #39) -------------------------------------
|
||||
let p_note = annotations_note(app, &agent.name);
|
||||
let p_tags = annotations_tags(app, &agent.name);
|
||||
let p_fav = annotations_favorite(app, &agent.name);
|
||||
if p_fav || p_tags.iter().any(|t| !agent.tags.contains(t)) || p_note.is_some() {
|
||||
println!();
|
||||
println!(" {}", bold("personal"));
|
||||
if p_fav {
|
||||
println!(" {} {}", dim("● favorite"), "★");
|
||||
}
|
||||
if !p_tags.is_empty() {
|
||||
println!(
|
||||
" {} {}",
|
||||
dim("● tags"),
|
||||
p_tags
|
||||
.iter()
|
||||
.map(|t| format!("#{t}"))
|
||||
.collect::<Vec<_>>()
|
||||
.join(" ")
|
||||
);
|
||||
}
|
||||
if let Some(n) = &p_note {
|
||||
println!(" {} {}", dim("● note"), n);
|
||||
}
|
||||
}
|
||||
Ok(0)
|
||||
}
|
||||
|
||||
// Personal annotations helpers (issue #39) — never fail.
|
||||
fn annotations_note(app: &App, name: &str) -> Option<String> {
|
||||
app.state.annotation(name).ok().and_then(|a| a.note)
|
||||
}
|
||||
fn annotations_tags(app: &App, name: &str) -> Vec<String> {
|
||||
app.state.annotation(name).map(|a| a.tags).unwrap_or_default()
|
||||
}
|
||||
fn annotations_favorite(app: &App, name: &str) -> bool {
|
||||
app.state
|
||||
.annotation(name)
|
||||
.map(|a| a.favorite)
|
||||
.unwrap_or(false)
|
||||
}
|
||||
|
||||
fn external_path(agent: &AgentDef) -> Option<std::path::PathBuf> {
|
||||
let first = agent.first_token()?;
|
||||
which::which(first).ok()
|
||||
|
||||
Reference in New Issue
Block a user