Ask a provider for its models, and let the app update its CLI
The Claude model list was four words in machines.rs, copied into every
machine's config.ron at discovery -- so a model the CLI had gained was
unreachable from the phone, which is how Opus 5.5 came to be invisible.
Every catalog is now read from the provider itself when a picker opens:
Claude Code over its control channel (control_request{subtype:list_models},
the same channel the driver sends set_model down, since the CLI has no
listing command), Codex over app-server, llama.cpp from the GGUFs on its
machine. Echo is the one case config.ron still answers, having nothing to
ask. A row the CLI marks disabled -- a model the installed version is too
old to run -- is dropped rather than offered as a chip that fails.
The reading of each catalog lives in that driver's own module, and
provider_models is one line per driver: core code says which driver to ask
and never what an answer looks like. parse_codex_models moved out for the
same reason.
Beside it, a provider now reports the version of its program and can be
told to update it. The version comes from --version on its own machine,
read from whichever stream carried it but only from a run that exited 0 --
llama-server prints its version to stderr, and so does "command not found".
It is never compared against a latest release, which nothing here can know.
Update runs the driver's own updater, or an updateCommand the config file
names for an install those will not touch; its whole output comes back,
because every install on these machines is package-managed and the
updater's refusal is the sentence worth reading. Nothing on its stdin, so a
password prompt fails rather than hangs.
A catalog that cannot be read no longer fails the whole provider view: that
is exactly the provider somebody came there to update, and refusing the
screen took the version and the Update button away with it.
Verified against a scratch server and on the emulator: the live catalog
(1.06s, disabled row absent), all four providers' versions including the
unknown state, the confirmation and output dialogs, a configured command
returning in 87ms with its stdin closed, and Update correctly disabled for
llama.cpp.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
53fc59a946
commit
7371af8e36
14 files changed
+773
-135
No files matched your search
+8
-4
@@ -282,10 +282,12 @@ impl UsageProvider for CodexUsage {
|
||||
serde_json::json!({"method": "initialized"}),
|
||||
serde_json::json!({"id": 2, "method": "account/rateLimits/read"}),
|
||||
];
|
||||
let answer = match self
|
||||
.transport
|
||||
.request_json_blocking(&launch, &initialized, &requests, 2)
|
||||
{
|
||||
let answer = match self.transport.request_json_blocking(
|
||||
&launch,
|
||||
Some(&initialized),
|
||||
&requests,
|
||||
Transport::answer_to(2),
|
||||
) {
|
||||
Ok(answer) => answer,
|
||||
Err(err) => {
|
||||
return vec![self.snapshot(
|
||||
@@ -1105,6 +1107,7 @@ mod tests {
|
||||
}),
|
||||
providers: vec![crate::config::ProviderConfig {
|
||||
name: "claude-cli".to_string(),
|
||||
update_command: None,
|
||||
kind: DriverKind::ClaudeCli,
|
||||
command: None,
|
||||
models: vec![],
|
||||
@@ -1171,6 +1174,7 @@ mod tests {
|
||||
let mut echo_only = unreachable_machine();
|
||||
echo_only.providers = vec![crate::config::ProviderConfig {
|
||||
name: "echo".to_string(),
|
||||
update_command: None,
|
||||
kind: DriverKind::Echo,
|
||||
command: None,
|
||||
models: vec![],
|
||||
|
||||
Reference in new issue
Block a user