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.
Fix plugin tool discovery when a selected wildcard plugin set is resolved against a partial active registry.\n\nRequire scoped registries to cover every requested plugin owner, force cold-load incomplete tool discovery registries without replacing active plugin runtime state, and add regression coverage for the partial-registry path.\n\nFixes #76780.\nThanks @lilesjtu.
Preserve enabled-by-default metadata for manifest command aliases so missing CLI command diagnostics can point users at the parent bundled plugin and the `openclaw plugins enable <plugin>` repair path.
Also carries the current-main deadcode allowlist entry for the command-analysis barrel that blocked CI.
Verified:
- pnpm test src/cli/run-main.test.ts src/plugins/manifest-command-aliases.test.ts
- pnpm deadcode:unused-files
- pnpm exec oxfmt --check --threads=1 scripts/deadcode-unused-files.allowlist.mjs CHANGELOG.md src/cli/run-main-policy.ts src/cli/run-main.test.ts src/plugins/manifest-command-aliases.ts src/plugins/manifest-command-aliases.test.ts
- git diff --check
- PR CI on 6076ff2d52 green, ignoring cancelled auto-response per landing matrix
Keep externalized bundled npm bridge updates on the normal plugin security scanner path instead of granting source-linked official trust without artifact provenance.
Thanks @Lucenx9.
Fixes the session-list plugin metadata hot path by reusing the active workspace-scoped plugin metadata snapshot for manifest model-id normalization and setup CLI backend fallback. Also keeps model-pricing collection on its provided manifest registry and fixes the CI-only hoisted test mock failure.
Validated with targeted plugin/gateway/model-selection tests, CI-shaped gateway startup shard, Testbox `pnpm check:changed`, and green PR CI.
Thanks @rolandrscheel.