mirror of
https://github.com/openclaw/openclaw.git
synced 2026-06-22 18:48:10 +00:00
* feat(parallel): add free Parallel Search MCP as the zero-config default web_search provider
Registers two Parallel web_search providers in the parallel plugin:
- parallel-free: keyless, always the free hosted Search MCP (search.parallel.ai/mcp);
the zero-config default (autoDetectOrder 76) so web_search works with no key.
- parallel: the existing paid v1 REST API (requires PARALLEL_API_KEY).
Shared query/result normalization lives in parallel-search-normalize.ts (used by both
transports); a minimal Streamable-HTTP JSON-RPC client (parallel-mcp-search.runtime.ts)
backs the free path. UI brands the tool-call chip 'Parallel Web Search' on the free path
via a searchTransport marker; setup default mirrors runtime auto-detect.
* chore(parallel): register parallel-free in doctor legacy-web-search owners
parallel-free is a bundled web_search provider, so add it to the doctor's
exhaustive BUNDLED_LEGACY_WEB_SEARCH_OWNERS map (owned by the parallel plugin)
and the NON_MIGRATED set — it has no legacy tools.web.search.* shape, so this is
a no-op for migration, matching paid parallel/tavily. Keeps the registry
complete. (Spotted by diffing the earlier local WIP branch.)
* docs(parallel): restore concise frontmatter summary
* docs(parallel): clearer, professional copy; drop v1 REST jargon and UI-label claim
- Frame the two providers as Parallel Search (Free) vs paid Parallel Search;
remove internal 'v1 REST API' wording.
- Remove conversational/overstated phrasing ('out of the box for everyone').
- Remove the 'labeled Parallel Web Search in the UI' claim (only renders in the
Control UI, not the TUI). Scope the searchTransport code comment accordingly.
* revert(parallel): drop the "Parallel Web Search" tool-call branding
The label only rendered in the Control UI, never the TUI (a separate renderer
via src/agents/tool-display.ts). Extending it would put provider-specific
labeling into a shared/core display path, against the plugin-agnostic-core rule.
Reverts the Control-UI labelOverride wiring and removes the now-orphaned
searchTransport marker from the free provider's result. The result still carries
provider: "parallel-free".
* fix(parallel): cap free Search MCP session_id at its 100-char tools/list contract
The free parallel-free provider reused the paid ParallelSearchSchema, whose
session_id allows 1000 chars, but the live Search MCP tools/list schema caps
session_id at 100. Parameterize normalizeParallelSessionId(value, maxLength);
the free path passes 100 (paid keeps 1000) and advertises the tighter bound in
its own ParallelFreeSearchSchema. An over-limit caller id is dropped and a
fresh in-contract id is minted. Updates tests and docs accordingly.
51 lines
1.1 KiB
JSON
51 lines
1.1 KiB
JSON
{
|
|
"id": "parallel",
|
|
"activation": {
|
|
"onStartup": false
|
|
},
|
|
"setup": {
|
|
"providers": [
|
|
{
|
|
"id": "parallel",
|
|
"envVars": ["PARALLEL_API_KEY"]
|
|
}
|
|
]
|
|
},
|
|
"uiHints": {
|
|
"webSearch.apiKey": {
|
|
"label": "Parallel API Key",
|
|
"help": "Parallel Search API key (fallback: PARALLEL_API_KEY env var).",
|
|
"sensitive": true,
|
|
"placeholder": "par-..."
|
|
},
|
|
"webSearch.baseUrl": {
|
|
"label": "Parallel Search Base URL",
|
|
"help": "Optional Parallel API base URL override. OpenClaw appends /v1/search when the URL does not already end there."
|
|
}
|
|
},
|
|
"contracts": {
|
|
"webSearchProviders": ["parallel", "parallel-free"]
|
|
},
|
|
"configContracts": {
|
|
"compatibilityRuntimePaths": ["tools.web.search.apiKey"]
|
|
},
|
|
"configSchema": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"webSearch": {
|
|
"type": "object",
|
|
"additionalProperties": false,
|
|
"properties": {
|
|
"apiKey": {
|
|
"type": ["string", "object"]
|
|
},
|
|
"baseUrl": {
|
|
"type": "string"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|