Files
openclaw/src/auto-reply
Peter Steinberger 4e4cca2b99 fix(agents): surface utility-model narration failures and show the utility model in models status (#104770)
* fix(agents): surface utility-model narration failures and show the utility model in models status

Narration failures were verbose-only, so a dead utility-model credential
silently degraded channel progress drafts back to raw tool lines. The
narrator now warns once per turn when it disables after consecutive
failures, naming the utility model + auth profile, and openclaw models
status renders the resolved utility model (config / provider default /
disabled) in human and JSON output.

Formatting verified remotely via Testbox format:check (hook bypassed:
no node_modules in this worktree).

Fixes #104764

* fix(models): include the utility model in models status auth analysis

The utility ref was rendered but not registered as a provider use, so
missing utility-provider auth kept --check green (Codex review P2).
Utility completions ride the plain API path like image models.

Formatting verified remotely via Testbox format:check.

* fix(models): register the utility model only for otherwise-unused providers

main's route analysis reports per-model issues; a same-provider utility
ref duplicated route reports (CI: incompatible-routes test). Shared
providers are already analyzed via their configured uses; utility-only
providers still enter the analysis so they stay visible to status.

Formatting verified remotely via Testbox format:check.

* fix(models): always analyze the utility model route in models status

Same-provider dedupe hid the documented incident class: an OAuth-healthy
primary says nothing about the utility model's plain API route (Codex
review round 3). The openai route-test fixture now pins utilityModel off
so route tests stay focused on their configured models, and a dedicated
test covers the OAuth-primary/api-key-utility scenario.

Formatting verified remotely via Testbox format:check.

* fix(models): give the utility model full text-route analysis in models status

Uses without codex fallback previously skipped per-model route
resolution (image-auth scoping), so the utility ref never produced
missing-auth route issues. Route scope is now explicit: text uses get
evaluateModelAuth, image uses keep provider-wide availability.

Formatting verified remotely via Testbox format:check.

* fix(models): probe the configured utility model and document source labels

--probe candidates now include the utility ref so utility-only providers
probe the actual configured model instead of an arbitrary catalog entry
(Codex review round 4). Inline comment records that the status resolver
never falls back to the primary, so 'provider default' labels are exact.

Formatting verified remotely via Testbox format:check.

* fix(models): canonicalize the reported utility ref and dedupe route diagnostics

utilityModel accepts aliases, so status now reports the resolved
provider/model instead of the raw alias, and identical route issues from
overlapping primary/utility refs collapse to one entry (Codex round 5).

Formatting verified remotely via Testbox format:check.
2026-07-11 17:08:19 -07:00
..