Skip to content

[Parity][Android] Provider attention/expiry state — available flag, expiring status, readyModelProviderCount #723

Description

@yuga-hashimoto

Parity Gap

Upstream source: `openclaw/openclaw`

  • Commit cluster (2026-06-04 – 2026-06-06):
    • `8b66003a` — `fix(android): clarify provider attention state`
    • `30160933` — `refactor(android): distill provider availability cleanup`
    • `d6dbcb2f` — `fix(android): surface expiring providers in palette`
    • `61d121f1` — `fix(android): show unavailable model rows as attention`
    • `72b387ad` — `fix(android): show configured provider readiness`

Files changed (combined):

  • `apps/android/app/src/main/java/ai/openclaw/app/NodeRuntime.kt` — adds `available: Boolean?` field to `GatewayModelSummary`; populates from `obj.optionalBoolean("available")`
  • `apps/android/app/src/main/java/ai/openclaw/app/ui/ProvidersModelsScreen.kt` — `ProviderSetupRow` and `ProviderRow` gain `available`, `statusLabel`, `warning`, `setupRequired` fields; row rendering shows attention color when unavailable/warning
  • `apps/android/app/src/main/java/ai/openclaw/app/ui/CommandPalette.kt` — replaces `modelProviderReady(it.status)` count with `readyModelProviderCount(providers, models)`; adds `expiringModelProviderCount(providers)` subtitle line
  • `apps/android/app/src/main/java/ai/openclaw/app/ui/ShellScreen.kt` — `homeAttentionRows()` gains `expiringProviderCount` param, surfaces "Provider auth expires soon" attention row
  • `apps/android/app/src/test/java/ai/openclaw/app/ui/ProviderModelStatusTest.kt` — +103 lines of new tests including `expiringProviderStatusIsNotFullyReady`, `readyModelProviderCount`, `expiringModelProviderCount` tests
  • `apps/android/app/src/test/java/ai/openclaw/app/ui/ShellScreenLogicTest.kt` — adds `homeAttentionRowsSurfaceExpiringProviderAuth` test
  • Gateway protocol side: `packages/gateway-protocol/src/schema/agents-models-skills.ts` and `src/gateway/server-methods/models-list-result.ts` — `available` field added to model schema

Related: #715 covers the earlier `modelProviderReady()` helper; this issue tracks the follow-up availability/expiry state layer.

Current app: `yuga-hashimoto/openclaw-assistant`

  • `GatewayModelSummary` has no `available` field
  • `CommandPalette` uses simple `modelProviderReady()` count without expiry awareness
  • No "Provider auth expires soon" attention row on home screen
  • `ProviderRow` / `ProviderSetupRow` have no `warning` / `available` fields

Problem Summary

Upstream extended the provider readiness model to distinguish three states:

  • Ready — provider status is `"static"` or similar fully-ready value
  • Expiring — provider auth expires soon (status `"expiring"`); shown as a warning but not fully failed
  • Unavailable/Warning — provider is missing, requires setup, or has a non-ready status

Concretely:

  • `GatewayModelSummary` gets an `available: Boolean?` flag from the gateway JSON
  • `readyModelProviderCount(providers, models)` counts providers that have ≥1 available model
  • `expiringModelProviderCount(providers)` counts providers with `"expiring"` status
  • `CommandPalette` subtitle shows "N providers expiring" when nothing is fully ready
  • Home screen (ShellScreen) shows an attention row "Provider auth expires soon" for expiring providers
  • `ProviderRow` renders in attention/warning color when `available == false` or `warning == true`

Implementation Checklist

  • Add `available: Boolean?` to `GatewayModelSummary` in `NodeRuntime.kt`; populate from gateway JSON
  • Add helper functions to `ProvidersModelsScreen.kt`:
    • `fun readyModelProviderCount(providers: List, models: List): Int`
    • `fun expiringModelProviderCount(providers: List): Int`
  • Update `ProviderSetupRow` and `ProviderRow` data classes with `available`, `statusLabel`, `warning`, `setupRequired` fields
  • Update row rendering to show attention/warning appearance when `warning == true`
  • Update `CommandPalette` to use `readyModelProviderCount` and add expiring-provider subtitle
  • Add `expiringProviderCount` param to `homeAttentionRows()` in `ShellScreen.kt`; show "Provider auth expires soon" row when > 0
  • Expand `ProviderModelStatusTest` with tests for:
    • `expiringProviderStatusIsNotFullyReady`
    • `readyModelProviderCount` variants
    • `expiringModelProviderCount` variants
  • Add `homeAttentionRowsSurfaceExpiringProviderAuth` to `ShellScreenLogicTest`

Acceptance Criteria

  • When a provider auth is expiring, Command Palette shows "N providers expiring" subtitle
  • Home screen shows "Provider auth expires soon" attention row for expiring providers
  • Unavailable/warning providers render with warning color in Provider list
  • `readyModelProviderCount` and `expiringModelProviderCount` pass unit tests
  • `expiringProviderStatusIsNotFullyReady` assertion passes

Test Steps

  1. Connect a gateway with a provider whose auth is near expiry (status `"expiring"`)
  2. Open Command Palette — subtitle should say "N providers expiring" (not "N providers ready")
  3. Check home/overview screen — attention row "Provider auth expires soon" should appear
  4. Open Providers list — the expiring provider row should render with warning styling
  5. Check a provider with `available = false` — row should appear in attention/warning color

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions