Web Search Plus OpenClaw plugin v3.3.0
OpenClaw build of Web Search Plus with the Hermes v3.0–v3.2 source-only engine port, plus a round of release-blocking fixes and two behaviour corrections that bring extract output back in line with the Hermes reference.
What you can do now that you could not on v3.2.0
New tools
web_search_health_plus— read-only view of provider health samples and passive shadow-quality aggregates collected in the current host process. It reports process start/scope metadata. Nothing is stored across restarts; nothing is served on a network port.web_extract_benchmark_plus— explicit-only extract benchmark. Caps at 1–3 provider calls, bypasses the extract cache, and returns a process-local priority recommendation. Hound is included only if you already allowed it via routingauto_allow.
Search and extract calls
routing_override_provideronweb_search_plusandweb_extract_plusforces one configured provider for that call (no env-var switch). The routing report surfaces the override.- Full-text continuation: a successful extract can return
full_content_ref. Callweb_extract_plusagain with that reference pluscontent_start/content_end(max 60 000 Unicode codepoints per read). If the provider also returned distinctraw_content, its length is reported on first read; fetch it withraw_content_start/raw_content_end(separate range from the main content offsets). Both ranges die when the process-local LRU entry is evicted or the host restarts. - Request budget preflight for research fan-out (max three providers), extract URL/context ceilings, and extract provider-start deadlines. There is still no daily quota ledger.
- Bounded extract context with operator ceilings (
extractMaxUrls,extractMaxContextChars,extractDeadlineSeconds, cache size limits), fair-share allocation, and honest truncation/omission metadata. - Optional semantic spans (
spans/spans_query) with NFC codepoint offsets andwithin_previewflags. - Diversity diagnostics on result sets; optional research re-ranking of near-duplicates via config
qualityDiversityRerank. self_hostedrouting profile for SearXNG/Keenable-oriented setups.- Hound local MCP sidecar (loopback-only transport): search + extract adapters, off auto routing until you set
auto_allowforhound. Seedocs/HOUND.md. - Brave is in the default Classic auto pool (opt out with
auto_allow.brave=false). - Independent extract provider priority via routing config (
extract_provider_priority/set_extract_provider_priority).
Call-site changes
| Area | v3.2.0 | v3.3.0 |
|---|---|---|
| Tools | web_search_plus, web_extract_plus, web_routing_config_plus |
same three, plus web_search_health_plus, web_extract_benchmark_plus |
provider / research provider enums |
included perplexity, kilo-perplexity |
those values are gone; use source-only providers (incl. optional hound) |
| Config keys | perplexityApiKey, kilocodeApiKey accepted |
removed — configure Hound/other source providers instead |
| Extract continuation | not available | content_ref + content_start/content_end; optional raw_content_* |
| Forced provider for one call | only provider=... |
also routing_override_provider — strict, no fallback, with routing-report provenance |
Default search/extract behaviour for existing source-only providers stays the same path unless you opt into the new arguments, profiles, or Hound.
Breaking
- Perplexity direct and Kilo Perplexity gateway are removed from the public provider schema, runtime, and config. They were not source-only evidence providers. Migration: pick any remaining search/extract provider; do not pass
provider: "perplexity"/"kilo-perplexity"or the old API key fields.
Behaviour changes in extract output
Two things changed in what an inline web_extract_plus result contains, both to match the Hermes reference implementation:
- Inline
raw_contentnow mirrors the returnedcontent. Previously an over-budget page returned the budgetedcontentand a second, full-lengthraw_content, so the payload could be about twice the sizecontext_chars_returnedreported. Distinct provider raw text is unaffected on the continuation path: it is still held behindfull_content_refand read withraw_content_start/raw_content_end. - Both size limits now apply, in that order. The aggregate context budget takes a deterministic prefix, and
extractCharLimitthen windows that prefix into head and tail with the literal truncation marker. Previously an over-budget page skipped the per-result window entirely and returned a bare prefix with no tail.
Fixed
- Made
routing_override_providerstrict for extraction and Research source extraction, including in the cache identity, so a forced provider that fails can no longer fall back to a different provider while the routing report still claims the override. - Bounded Hound response streams while reading chunked bodies, so an oversized response without a
Content-Lengthheader is rejected during the read instead of after it is fully buffered; session teardown is detached behind a 250 ms abort deadline so an unresponsive sidecar cannot hold up a completed call. - Pointed the npm entrypoint at the bundled runtime (
dist/index.js) and packaged the source modules the declared OpenClaw source entry imports — the previously declared entrypoint could not resolve. A packaging test now walks every packaged source file and fails if any relative import is left unpackaged. - Added the documented
extractCacheMaxCharsfield to the manifest schema; the documented value was previously rejected byadditionalProperties: false. - Corrected routing and extraction tool metadata to describe the real process-local lifetime — routing preferences live in process memory and are lost on host restart; no routing file is read or written.
- Removed the internal porting plan from the published package and completed the five-tool README/SKILL inventory.
- Extract cache eviction respects a full-text character budget (
extractCacheMaxChars), so large pages cannot blow the process-local cache without bound. raw_contentranges on the continuation path are validated and served on their own offset space, not mixed with maincontentoffsets.- Operator deadline ceilings are validated the same way for direct callers as for config-normalized values (non-integers rejected with a parameter-specific error).
- Cache size accounting is incremental (no full rescan of every entry on each write); hit and eviction behaviour is unchanged, cost is lower.
Install / package identity
- GitHub:
robbyczgw-cla/web-search-plus-plugintagv3.3.0 - ClawHub:
web-search-plus-plugin-v2@3.3.0 - npm package name in the tarball:
web-search-plus-plugin-v2(registry publication of that name is separate; see release NOTES)