Pi Runner: gate parallel_tool_calls to compatible APIs#39356
Pi Runner: gate parallel_tool_calls to compatible APIs#39356vincentkoc merged 7 commits intomainfrom
Conversation
Greptile SummaryThis PR adds API-gated handling for the Strengths:
Minor UX issue:
Confidence Score: 4/5
Last reviewed commit: 045a821 |
🔒 Aisle Security AnalysisWe found 1 potential security issue(s) in this PR:
1. 🔵 Log injection via unsanitized parallel_tool_calls value in warning message
DescriptionThe new
Vulnerable code: const summary =
typeof rawParallelToolCalls === "string"
? rawParallelToolCalls
: typeof rawParallelToolCalls;
log.warn(`ignoring invalid parallel_tool_calls param: ${summary}`);RecommendationNeutralize untrusted values before writing them to logs (especially console logs). Recommended approaches:
const summary =
typeof rawParallelToolCalls === "string"
? JSON.stringify(rawParallelToolCalls) // escapes \r/\n etc.
: typeof rawParallelToolCalls;
log.warn(`ignoring invalid parallel_tool_calls param: ${summary}`);
const summary =
typeof rawParallelToolCalls === "string"
? rawParallelToolCalls.replace(/[\r\n]/g, " ").slice(0, 200)
: typeof rawParallelToolCalls;
log.warn(`ignoring invalid parallel_tool_calls param: ${summary}`);Also consider logging structured metadata rather than interpolating raw values into the message string (e.g. Analyzed PR: #39356 at commit Last updated on: 2026-03-08T02:43:17Z |
* Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging
* Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging
* Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging
* Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging
* Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging
* Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging
* Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging
* Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging
* Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging (cherry picked from commit daecd2d) # Conflicts: # CHANGELOG.md # src/agents/pi-embedded-runner-extraparams.test.ts # src/agents/pi-embedded-runner/extra-params.ts
…r live test fixes (#1795) * Changelog: credit openclaw#39328 to @vincentkoc (cherry picked from commit 2ec478c) * Changelog: move openclaw#39328 credit to section end (cherry picked from commit 5b30c9d) * Pi Runner: gate parallel_tool_calls to compatible APIs (openclaw#39356) * Pi Runner: gate parallel_tool_calls payload injection * Pi Runner: cover parallel_tool_calls alias precedence * Changelog: note parallel_tool_calls compatibility fix * Update CHANGELOG.md * Pi Runner: clarify null parallel_tool_calls override logging (cherry picked from commit daecd2d) # Conflicts: # CHANGELOG.md # src/agents/pi-embedded-runner-extraparams.test.ts # src/agents/pi-embedded-runner/extra-params.ts * docs: add changelog for Telegram DM draft restore (openclaw#39398) (cherry picked from commit 722c5e5) * fix: document discord agentComponents schema parity (openclaw#39378) (thanks @gambletan) (openclaw#39378) Co-authored-by: Shadow <[email protected]> (cherry picked from commit 9c8e34d) * fix: land openclaw#39337 by @goodspeed-apps for acpx MCP bootstrap Co-authored-by: Goodspeed App Studio <[email protected]> (cherry picked from commit 5659d7f) # Conflicts: # extensions/acpx/openclaw.plugin.json # extensions/acpx/src/config.test.ts # extensions/acpx/src/config.ts # extensions/acpx/src/runtime-internals/test-fixtures.ts # extensions/acpx/src/runtime.test.ts # extensions/acpx/src/runtime.ts # extensions/acpx/src/service.ts * docs: clean up latest changelog sections (cherry picked from commit c743fd9) * fix: land contributor PR openclaw#39516 from @Imhermes1 macOS app/chat/browser/cron/permissions fixes. Co-authored-by: ImHermes1 <[email protected]> (cherry picked from commit d15b6af) # Conflicts: # CHANGELOG.md # apps/macos/Sources/RemoteClaw/NodeMode/MacNodeBrowserProxy.swift # apps/macos/Sources/RemoteClaw/NodeMode/MacNodeModeCoordinator.swift # apps/macos/Sources/RemoteClaw/NodeMode/MacNodeRuntime.swift # apps/macos/Sources/RemoteClaw/PermissionsSettings.swift # apps/macos/Tests/RemoteClawIPCTests/MacNodeBrowserProxyTests.swift # apps/shared/RemoteClawKit/Sources/RemoteClawChatUI/ChatView.swift # apps/shared/RemoteClawKit/Sources/RemoteClawKit/BrowserCommands.swift # apps/shared/RemoteClawKit/Tests/RemoteClawKitTests/ChatComposerPasteSupportTests.swift * fix: stage docker live tests from mounted source (cherry picked from commit 21df014) * fix: add minimal process shim for acpx mcp-agent-command The upstream process.ts depends on gutted runtime-api, so provide a minimal spawnAndCollect implementation that satisfies the import. --------- Co-authored-by: Vincent Koc <[email protected]> Co-authored-by: Ayaan Zaidi <[email protected]> Co-authored-by: gambletan <[email protected]> Co-authored-by: Shadow <[email protected]> Co-authored-by: Peter Steinberger <[email protected]>
Summary
parallel_tool_calls, but OpenClaw still needs a way to pass the flag for compatible OpenAI-style payloads.parallel_tool_calls/parallelToolCallsonly foropenai-completionsandopenai-responses, preserves higher-precedence alias overrides across config/runtime layers, and ignores invalid non-boolean values.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
User-visible / Behavior Changes
Model/provider
params.parallel_tool_callsandparams.parallelToolCallsnow work for OpenAI-compatible request payloads without leaking into unsupported APIs. Higher-precedence overrides win even when different alias spellings are mixed.Security Impact (required)
No)No)No)No)No)Yes, explain risk + mitigation:Repro + Verification
Environment
Steps
parallel_tool_callsorparallelToolCallsin model params or runtime override.applyExtraParamsToAgent(...)usingopenai-completions,openai-responses, and an unsupported API such asanthropic-messages.Expected
Actual
parallel_tool_calls, so affected providers could still fail from incompatible payload injection paths and mixed alias precedence could not be resolved cleanlyEvidence
Human Verification (required)
What you personally verified (not just CI), and how:
pnpm vitest run src/agents/pi-embedded-runner-extraparams.test.ts;pnpm exec oxfmt --check src/agents/pi-embedded-runner/extra-params.ts src/agents/pi-embedded-runner-extraparams.test.ts;pnpm exec oxlint --type-aware src/agents/pi-embedded-runner/extra-params.ts src/agents/pi-embedded-runner-extraparams.test.tsCompatibility / Migration
Yes)No)No)Failure Recovery (if this breaks)
b236476f87,af8b5035de, andbce1c1d5f6src/agents/pi-embedded-runner/extra-params.ts,src/agents/pi-embedded-runner-extraparams.test.ts,CHANGELOG.mdparallel_tool_callsinjected into unsupported APIs, or mixed alias overrides losing higher-precedence valuesRisks and Mitigations
Notes
pnpm check src/agents/pi-embedded-runner/extra-params.ts src/agents/pi-embedded-runner-extraparams.test.tscurrently trips an unrelated pre-existing formatting issue insrc/commands/status.service-summary.tson this checkout, so verification here uses focused formatter/lint commands on the touched files instead of claiming a clean full check.