Summary:
- Use sessions.list as the Control UI source of truth for available sessions.
- Hide archived sessions by default and keep the Sessions filter UI explicit, compact, and reversible.
- Preserve session-change behavior, checkpoint details, generated i18n output, and chat/session picker consistency.
Validation:
- pnpm ui:i18n:check
- pnpm test ui/src/styles/components.test.ts ui/src/ui/views/sessions.test.ts ui/src/ui/app-render.helpers.node.test.ts
- pnpm test ui/src/ui/controllers/sessions.test.ts ui/src/ui/app-gateway.sessions.node.test.ts ui/src/ui/views/sessions.test.ts ui/src/styles/components.test.ts ui/src/ui/app-render.helpers.node.test.ts
- pnpm tsgo:test:ui
- Blacksmith Testbox: pnpm check:changed -- <PR paths>
Show the active agent name in the Control UI dashboard breadcrumb without adding the current session key/name.
Verification:
- pnpm test ui/src/ui/app-render.helpers.node.test.ts
- node scripts/run-oxlint.mjs --tsconfig config/tsconfig/oxlint.core.json ui/src/ui/components/dashboard-header.ts ui/src/ui/app-render.helpers.ts ui/src/ui/app-render.ts ui/src/ui/app-render.helpers.node.test.ts
- git diff --check
- Testbox pnpm check:changed
When createWebSearchTool is wired with lateBindRuntimeConfig: true, the
first-class assistant tool now lives off whatever runtime is active at
execute time. That works in the gateway process where runtime metadata
and the active secrets snapshot are populated, but in agent contexts that
do not share that in-process state, both fall through to undefined and
the tool returned "web_search is disabled or no provider is available"
even though `openclaw capability web search` and direct provider runtime
execution succeeded.
Two fixes:
- src/agents/tools/web-search.ts: when late-binding, fall back to
options.runtimeWebSearch when the active runtime web tools metadata is
null, and fall back to options.config when getActiveSecretsRuntimeSnapshot
is null. Derive a configured provider id from
config.tools.web.search.provider and use it together with the runtime
selection when deciding preferRuntimeProviders, so an explicit Brave/
Perplexity selection still discovers the configured plugin even when
no runtime provider id is bound.
- src/plugins/web-provider-runtime-shared.ts: the active gateway plugin
registry may be otherwise compatible with the active config while
contributing zero web providers (channels, memory, harnesses, and
sidecars without Brave/web). Treating that empty active registry as
authoritative meant first-class tools resolved to "no provider".
Fall through to the scoped provider plugin load when the active
registry returns no providers. Explicit `onlyPluginIds: []` still
short-circuits to [] to preserve the empty-scope contract.
Adds regression tests for both seams.
#77120 added user-facing TUI copy that replaces the stale-response
watchdog notice with plain language, but the entry landed without
contributor attribution. Add the merging PR ref and credit the human
contributor @davemorin per CLAUDE.md changelog-attribution rules.