feat: phase 2 — modèles locaux + catalogue distant + suggest (closes #70 #71 #73 #60 #67 #61)

Axe 11 (modèles) :
- am models : inventaire des runtimes locaux (ollama list --format json,
  llama.cpp .gguf sur disque, LM Studio API locale) avec cache façon
  probe.rs (TTL 30s) et absence de runtime signalée sans erreur fatale
- am run <agent> --model <m> : résolution dans l'inventaire, transmission
  via model_env/model_arg de l'agent (défaut AM_MODEL), tracé en session
- am models --prune : candidats inutilisés depuis settings.models_prune_days
  (défaut 30), :latest toujours protégé, dry-run + confirmation + événement
  EventKind::Model journalisé

Axes 7/9 (catalogue) :
- am catalog update : fetch du catalogue officiel, diff (ajoutés/retirés/
  modifiés), confirmation, enregistrement en include
- am catalog add <url> : validation du format (parse + validate), cache
  catalog-cache.json (TTL 3600s), événement EventKind::Catalog journalisé
- include par URL (http/https/file) dans config.yaml, résolu au chargement
  avec cache + TTL ; override local toujours prioritaire (issue #67)
- am suggest <requête> : réutilise le scoring fuzzy du catalogue, boost par
  usage réel (lancements + durée depuis le journal), top 5 justifié, --json

REPL : commandes models/catalog/suggest (parse, complétion, descriptions),
help specs, tip cheat sheet, man pages régénérées (49 pages, dont 3 nouvelles).
Version bump 0.4.5, ROADMAP cases cochées, 266 tests verts.
This commit is contained in:
2026-08-18 09:06:16 -04:00
parent 890ad953e5
commit 22bc529818
31 changed files with 2122 additions and 40 deletions
+54
View File
@@ -367,6 +367,60 @@ pub static HELP_SPECS: &[HelpSpec] = &[
HelpExample { desc: "Supervise with auto-restart.", code: "watch claude-code --restart --notify" },
],
},
HelpSpec {
name: "models",
category: "Commands",
usage: "models {flags}",
about: "List the models of the local runtimes (ollama, llama.cpp, LM Studio) and prune unused ones.",
search_terms: &["ollama", "llama", "lm studio", "model", "prune", "gguf"],
flags: &[
HelpFlag { short: "", long: "--prune", value: "", desc: "Purge unused models instead of listing them" },
HelpFlag { short: "", long: "--dry-run", value: "", desc: "Only list what would be pruned, delete nothing" },
HelpFlag { short: "", long: "--days", value: "DAYS", desc: "Consider a model unused after N days (default: 30)" },
],
subcommands: &[],
parameters: &[],
io: None,
examples: &[
HelpExample { desc: "List the local models.", code: "models" },
HelpExample { desc: "Preview the prune candidates.", code: "models --prune --dry-run" },
HelpExample { desc: "Prune models unused for 60 days.", code: "models --prune --days 60" },
],
},
HelpSpec {
name: "catalog",
category: "Commands",
usage: "catalog {flags} <update|add|list> [url]",
about: "Manage remote agent catalogs: refresh the official one or register external catalogs by URL.",
search_terms: &["remote", "url", "team", "share", "include"],
flags: &[],
subcommands: &[
("update", "Fetch the official catalog, show the diff and register it"),
("add", "Register an external catalog by URL"),
("list", "List the registered remote catalogs"),
],
parameters: &[],
io: None,
examples: &[
HelpExample { desc: "Refresh the official catalog.", code: "catalog update" },
HelpExample { desc: "Add a team catalog.", code: "catalog add https://git.dracodev.net/team/agents.yaml" },
],
},
HelpSpec {
name: "suggest",
category: "Commands",
usage: "suggest <query>",
about: "Recommend agents for a natural-language request, ranked by relevance and real usage.",
search_terms: &["recommend", "recommendation", "find an agent", "what agent"],
flags: &[],
subcommands: &[],
parameters: &[],
io: None,
examples: &[
HelpExample { desc: "Find an agent for Python.", code: "suggest un agent pour du Python" },
HelpExample { desc: "Machine-readable output.", code: "suggest frontend framework --json" },
],
},
HelpSpec {
name: "alias",
category: "Commands",