1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//! Where the operator goes when the §9.4 roster query comes back on
//! credentials — §8.3 rule 5's sibling seat (bl-91f1).
//!
//! The picker asks a provider row for its models; when that row has no
//! credential, `bz` answers in its own words, which yog forwards verbatim
//! (INV-2 / §7.3): *"no credential for this provider: set BRAZEN_API_KEY (or
//! the provider API-key env var / --api-key) or run `bz --login --provider
//! <id>`"*. That sentence is brazen's `resolved_secret` decline, reached from
//! `StaticSecretAuth` — so it fires for `api_key` and `bearer` rows and no
//! others. Left as the whole answer it is a shell remedy in a desktop surface,
//! and for exactly the rows it fires on it leads with an env var and offers a
//! sign-in yog's own capability read says can only exit 78.
//!
//! **yog already knows the row's real remedy, and says it in two other seats.**
//! [`ProviderRow::login_blocked`] is the one home for "what this row needs",
//! rendered by the §8.3 Login rows and the §9.5 config rows alike. This is a
//! third seat at that same derivation and it invents no wording of its own: it
//! pairs that sentence with the §11 tab that acts on it, so the picker's fault
//! ends in a control like every other auth seat in the tree.
//!
//! **No `Unrouted` state.** §8.3's [`AuthFailure`](crate::login::auth::AuthFailure)
//! needs one because a failed step's error carries no row and the join that
//! recovers it can come back ambiguous. The picker has nothing to join: the row
//! is the question it just asked, by name, one frame ago.
use crateProviderRow;
use crateCenterTab;
use cratelooks_auth;
/// The way out of an auth-shaped roster failure: what the row needs, the
/// control that goes there, and the §11 tab it focuses.
/// The remedy for `error`, or `None` when it is not a credential problem at
/// all — a spawn failure, a non-zero exit on something else, an empty roster.
/// Gated on [`looks_auth`], §8.3's own classifier, rather than a second list of
/// markers: routing a transport reset to the Config tab would be a guess with a
/// button on it.