Épique : #87 · Dépend de : #88 (registre de providers)
Objectif
Aujourd'hui les secrets sont strictement par-agent (agent/NAME, secrets.rs key_for) : mettre la même clé OpenAI pour 5 agents = 5 entrées. Ajouter un namespace partagé providers/<nom> pour qu'un token serve tous les agents branchés sur ce provider, avec résolution en cascade.
Spécification
Étendre secrets.rs : key_for_provider(name) → "providers/<name>/api_key" (et providers/<name>/<VAR> pour les clés secondaires)
am providers set-token <nom> = alias de am secret set api_key --provider <nom> ; am providers token <nom> vérifie la présence SANS afficher la valeur
Résolution en cascade dans resolve_env_secrets (secrets.rs) : 1) agent/<VAR> 2) providers/<provider_du_registre>/<VAR> 3) warning si absent
Un agent déclare son provider (issue #90) → la cascade utilise ce provider ; sinon fallback sur settings.default_provider
Les valeurs ne quittent JAMAIS le keyring : pas de log, pas de --json, pas dans env_keys des événements (déjà le cas, à préserver)
am sync exclut déjà les secrets (#66) — ajouter un test qui vérifie que providers/* n'est jamais poussé
Critères d'acceptation
un token posé avec am providers set-token openai est résolu par tous les agents du provider
le secret par-agent reste prioritaire sur le secret provider (cascade 1 puis 2)
warning clair (noms seulement) quand aucun token n'existe
am secret list montre les deux namespaces (agent/ et providers/)
tests : cascade, priorité, exclusion sync, jamais de valeur dans les logs
Épique : #87 · Dépend de : #88 (registre de providers)
## Objectif
Aujourd'hui les secrets sont strictement par-agent (`agent/NAME`, secrets.rs key_for) : mettre la même clé OpenAI pour 5 agents = 5 entrées. Ajouter un namespace partagé `providers/<nom>` pour qu'un token serve tous les agents branchés sur ce provider, avec résolution en cascade.
## Spécification
- Étendre secrets.rs : `key_for_provider(name)` → `"providers/<name>/api_key"` (et `providers/<name>/<VAR>` pour les clés secondaires)
- `am providers set-token <nom>` = alias de `am secret set api_key --provider <nom>` ; `am providers token <nom>` vérifie la présence SANS afficher la valeur
- Résolution en cascade dans `resolve_env_secrets` (secrets.rs) : 1) `agent/<VAR>` 2) `providers/<provider_du_registre>/<VAR>` 3) warning si absent
- Un agent déclare son provider (issue #90) → la cascade utilise ce provider ; sinon fallback sur `settings.default_provider`
- Les valeurs ne quittent JAMAIS le keyring : pas de log, pas de --json, pas dans env_keys des événements (déjà le cas, à préserver)
- `am sync` exclut déjà les secrets (#66) — ajouter un test qui vérifie que `providers/*` n'est jamais poussé
## Critères d'acceptation
- [ ] un token posé avec `am providers set-token openai` est résolu par tous les agents du provider
- [ ] le secret par-agent reste prioritaire sur le secret provider (cascade 1 puis 2)
- [ ] warning clair (noms seulement) quand aucun token n'existe
- [ ] `am secret list` montre les deux namespaces (agent/ et providers/)
- [ ] tests : cascade, priorité, exclusion sync, jamais de valeur dans les logs
## Référence ROADMAP
Milestone v0.7.0 — priorité P0. Étend l'existant #36 (keyring) sans rien casser (clés agent/ conservées).
bruno
added this to the v0.7.0 — Providers & configuration automatisée milestone 2026-08-19 14:59:23 -04:00
bruno
added the P0axe-8S labels 2026-08-19 14:59:23 -04:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Épique : #87 · Dépend de : #88 (registre de providers)
Objectif
Aujourd'hui les secrets sont strictement par-agent (
agent/NAME, secrets.rs key_for) : mettre la même clé OpenAI pour 5 agents = 5 entrées. Ajouter un namespace partagéproviders/<nom>pour qu'un token serve tous les agents branchés sur ce provider, avec résolution en cascade.Spécification
key_for_provider(name)→"providers/<name>/api_key"(etproviders/<name>/<VAR>pour les clés secondaires)am providers set-token <nom>= alias deam secret set api_key --provider <nom>;am providers token <nom>vérifie la présence SANS afficher la valeurresolve_env_secrets(secrets.rs) : 1)agent/<VAR>2)providers/<provider_du_registre>/<VAR>3) warning si absentsettings.default_provideram syncexclut déjà les secrets (#66) — ajouter un test qui vérifie queproviders/*n'est jamais pousséCritères d'acceptation
am providers set-token openaiest résolu par tous les agents du provideram secret listmontre les deux namespaces (agent/ et providers/)Référence ROADMAP
Milestone v0.7.0 — priorité P0. Étend l'existant #36 (keyring) sans rien casser (clés agent/ conservées).