feat(doctor,shell): ollama host-service suggestion + hub-update hint (0.80.0)
Some checks failed
Security / Security check (push) Failing after 2s

Doctor: when the system AI uses an Ollama endpoint that no declared
host service covers (host:port match, /v1 suffix stripped), the
services panel says so in one sentence with a one-click 'declare as
host service' via the new DeclareService RPC — and states honestly
that it takes effect after a daemon restart (the restart button sits
on the same page). Pure suggestOllamaServiceEndpoint pins every
branch.

Shell: one slim, dismissible banner after connecting when the
release manifest offers a newer hub version; dismissal is persisted
per version so each release hints exactly once (pure
shouldShowUpdateHint + a widget test through the fake hub).
Deliberately manifest-based — Studio and hub versions are
independent counters, so a direct comparison would be wrong;
unreleased dev skew stays with the per-page classified states.
The probe stays inert under the test probe override: its timeout
timer leaked into hub_banner_test (the hermeticity class again).

Signed-off-by: flemming-it <stefan.a.flemming@googlemail.com>
This commit is contained in:
flemming-it 2026-07-23 00:03:42 +02:00
parent 351c5a82bc
commit 14f824b8ef
13 changed files with 703 additions and 135 deletions

View file

@ -3704,6 +3704,42 @@ abstract class AppLocalizations {
/// **'declared'**
String get doctorSummaryDeclared;
/// No description provided for @doctorOllamaSuggest.
///
/// In en, this message translates to:
/// **'The system AI uses Ollama at {endpoint} — declare it as a host service so modules and the doctor know it?'**
String doctorOllamaSuggest(String endpoint);
/// No description provided for @doctorOllamaDeclareButton.
///
/// In en, this message translates to:
/// **'Declare as host service'**
String get doctorOllamaDeclareButton;
/// No description provided for @doctorOllamaDeclared.
///
/// In en, this message translates to:
/// **'Declared as host service \"ollama\" — takes effect after a daemon restart (button further down this page).'**
String get doctorOllamaDeclared;
/// No description provided for @updateHintBanner.
///
/// In en, this message translates to:
/// **'Version {latest} is available for the hub ({local}).'**
String updateHintBanner(String local, String latest);
/// No description provided for @updateHintOpenDoctor.
///
/// In en, this message translates to:
/// **'Open Doctor'**
String get updateHintOpenDoctor;
/// No description provided for @updateHintDismiss.
///
/// In en, this message translates to:
/// **'Later'**
String get updateHintDismiss;
/// No description provided for @svcExposureLoopback.
///
/// In en, this message translates to: