refactor(auth): centralize inference-credential routing in CredentialAuthority
One authority answers 'which credential may ride this request': credential_class / manager_for / credential_for / bearer_resolver_for, keyed by (platform, base_url). SessionCredential is an opaque type with no production constructor, so a new call site cannot re-introduce the session-bearer leak. Platform-scoped tests extended across all bearer channels (session, aux, summary, subagent override). Verified: cargo check --workspace --all-targets clean; kigi-shell and kigi-tui suites green (6611+ tests).
This commit is contained in:
@@ -192,9 +192,18 @@ pub(crate) async fn apply(
|
||||
model.map(|e| &e.info),
|
||||
)
|
||||
};
|
||||
// H4: hand the session the catalog KEY the picker actually resolved. The
|
||||
// slug in `model_sampling.model` cannot distinguish `xai/grok-*` from
|
||||
// `xai-grok/grok-*` (duplicate ids across an API-key platform and its
|
||||
// subscription-OAuth twin are by design), and the process-global
|
||||
// `current_model_id()` below is not written at all in Leader mode.
|
||||
let catalog_key =
|
||||
crate::agent::models::resolve_catalog_key(&agent.models_manager.models(), &model_id)
|
||||
.map(|k| k.0.to_string());
|
||||
let (tx, rx) = oneshot::channel();
|
||||
let _ = handle.cmd_tx.send(SessionCommand::SetSessionModel {
|
||||
sampling_config: model_sampling,
|
||||
catalog_key,
|
||||
use_concise,
|
||||
apply_prompt_override,
|
||||
skip_prompt_rewrite: did_rebuild || model_unchanged,
|
||||
|
||||
Reference in New Issue
Block a user