Skip to content

fix(voice-call): add staleCallReaperSeconds and webhookSecurity to co…#39109

Closed
deepujain wants to merge 1 commit into
openclaw:mainfrom
deepujain:fix/39101-voice-call-config-schema
Closed

fix(voice-call): add staleCallReaperSeconds and webhookSecurity to co…#39109
deepujain wants to merge 1 commit into
openclaw:mainfrom
deepujain:fix/39101-voice-call-config-schema

Conversation

@deepujain

Copy link
Copy Markdown
Contributor

Summary

  • Problem: staleCallReaperSeconds and webhookSecurity are defined in the voice-call Zod config (extensions/voice-call/src/config.ts) but were missing from the plugin’s openclaw.plugin.json configSchema. With additionalProperties: false, setting them in config caused "must NOT have additional properties" and gateway crash loops. Separately, the pre-commit config had [pytest>=8, <9], so pip treated <9 as a package name and failed.
  • Why it matters: Users couldn’t use those voice-call options without crashing the gateway; pre-commit failed for anyone running the hooks.
  • What changed: Added staleCallReaperSeconds and webhookSecurity to the voice-call plugin’s configSchema in openclaw.plugin.json. Fixed the pytest dependency to a single specifier ["pytest>=8,<9"] in .pre-commit-config.yaml.
  • What did NOT change (scope boundary): No runtime behavior change for voice-call or pre-commit; only schema and dependency declarations.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

User-visible / Behavior Changes

None. Config that was previously invalid (and crashed the gateway) is now valid. Defaults and runtime behavior are unchanged.

Security Impact (required)

  • New permissions/capabilities? No
  • Secrets/tokens handling changed? No
  • New/changed network calls? No
  • Command/tool execution surface changed? No
  • Data access scope changed? No
  • If any Yes, explain risk + mitigation: N/A

Repro + Verification

Environment

  • OS: macOS
  • Runtime/container: Node 22
  • Model/provider: N/A
  • Integration/channel: voice-call plugin config
  • Relevant config (redacted): Added staleCallReaperSeconds and/or webhookSecurity under plugins.entries.voice-call.config.

Steps

  1. Set staleCallReaperSeconds or webhookSecurity in voice-call plugin config.
  2. Start gateway (e.g. openclaw gateway).
  3. Before: gateway crashes with "must NOT have additional properties". After: starts and accepts the config.

Expected

Gateway starts and uses the new options when set.

Actual

Before: crash. After: works as expected.

Evidence

  • Failing case: config with staleCallReaperSeconds/webhookSecurity caused validation error and crash; after the change, same config is accepted and gateway runs.
  • Trace/log snippets: N/A
  • Screenshot/recording: N/A
  • Perf numbers: N/A

Human Verification (required)

  • Verified scenarios: Edited openclaw.plugin.json to add the two properties; confirmed schema matches Zod (types, nesting for webhookSecurity). Confirmed pytest pre-commit dependency is a single string so pip install succeeds.
  • Edge cases checked: webhookSecurity sub-properties (allowedHosts, trustForwardingHeaders, trustedProxyIPs) and staleCallReaperSeconds minimum 0.
  • What you did not verify: Full voice-call flow with Twilio/Telnyx; pre-commit full run in a clean env (only dependency spec fix verified).

Compatibility / Migration

  • Backward compatible? Yes
  • Config/env changes? No (existing valid config unchanged; previously invalid config now valid).
  • Migration needed? No
  • If yes, exact upgrade steps: N/A

Failure Recovery (if this breaks)

  • How to disable/revert: Revert the commit or remove the two new properties from configSchema and the pytest line change.
  • Files/config to restore: extensions/voice-call/openclaw.plugin.json, .pre-commit-config.yaml.
  • Known bad symptoms reviewers should watch for: None expected; change is additive and schema-only.

Risks and Mitigations

None. Additive schema and dependency spec only; no new runtime behavior or security surface.

…nfigSchema

Sync openclaw.plugin.json configSchema with Zod VoiceCallConfigSchema.
Fix pre-commit pytest dependency spec (pytest>=8,<9 as single string).
Fixes openclaw#39101
@openclaw-barnacle openclaw-barnacle Bot added channel: voice-call Channel integration: voice-call size: XS labels Mar 7, 2026
@greptile-apps

greptile-apps Bot commented Mar 7, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR correctly patches two distinct bugs: the voice-call plugin's JSON configSchema was missing staleCallReaperSeconds and webhookSecurity, causing "must NOT have additional properties" crashes when users set them; and the pre-commit pytest dependency specifier was malformed YAML. Both fixes are minimal, additive, and match their respective source-of-truth definitions.

Key changes:

  • .pre-commit-config.yaml: [pytest>=8, <9]["pytest>=8,<9"] — correctly collapses the two-element YAML list into a single PEP 440 version specifier so pip resolves it properly.
  • openclaw.plugin.json: staleCallReaperSeconds added as integer, minimum: 0, matching z.number().int().nonnegative() in config.ts.
  • openclaw.plugin.json: webhookSecurity added as an object with additionalProperties: false and three sub-properties (allowedHosts, trustForwardingHeaders, trustedProxyIPs), correctly matching VoiceCallWebhookSecurityConfigSchema.
  • Incomplete fix: The streaming block in openclaw.plugin.json also uses additionalProperties: false but is still missing preStartTimeoutMs, maxPendingConnections, maxPendingConnectionsPerIp, and maxConnections — all present in VoiceCallStreamingConfigSchema. Any user who sets these will encounter the exact same crash this PR is fixing.

Confidence Score: 4/5

  • Safe to merge; changes are additive schema and dependency fixes with no runtime behavior changes, though the streaming schema gap should be addressed.
  • Both fixes are correct and minimal. The pre-commit change is a straightforward YAML/pip syntax fix. The plugin JSON additions match the Zod schema exactly (types, minimums, object structure). The only concern is that the same root-cause bug (missing properties under additionalProperties: false) still exists in the streaming block for four properties — this is pre-existing but directly related and worth resolving in this or a follow-up PR.
  • extensions/voice-call/openclaw.plugin.json — the streaming configSchema block is still missing preStartTimeoutMs, maxPendingConnections, maxPendingConnectionsPerIp, and maxConnections.

Comments Outside Diff (1)

  1. extensions/voice-call/openclaw.plugin.json, line 337-367 (link)

    Incomplete streaming configSchema — same crash for missing properties

    The streaming object has "additionalProperties": false but is missing four properties that exist in VoiceCallStreamingConfigSchema in config.ts:

    • preStartTimeoutMs (integer, minimum: 1)
    • maxPendingConnections (integer, minimum: 1)
    • maxPendingConnectionsPerIp (integer, minimum: 1)
    • maxConnections (integer, minimum: 1)

    Anyone who sets any of these in their config will get the same "must NOT have additional properties" crash that this PR is fixing for staleCallReaperSeconds and webhookSecurity. Since this file is already being updated, it's worth closing these gaps at the same time.

Last reviewed commit: cfab521

@steipete

steipete commented Mar 7, 2026

Copy link
Copy Markdown
Contributor

Closing as duplicate/superseded by #38892 for the voice-call schema fix.

Notes:

Thanks for the contribution.

@steipete steipete closed this Mar 7, 2026
deepujain added a commit to deepujain/openclaw that referenced this pull request May 8, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
deepujain added a commit to deepujain/openclaw that referenced this pull request Jun 26, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
deepujain added a commit to deepujain/openclaw that referenced this pull request Jun 26, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
deepujain added a commit to deepujain/openclaw that referenced this pull request Jun 30, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
deepujain added a commit to deepujain/openclaw that referenced this pull request Jul 2, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
deepujain added a commit to deepujain/openclaw that referenced this pull request Jul 3, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
steipete pushed a commit to deepujain/openclaw that referenced this pull request Jul 5, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
steipete pushed a commit to deepujain/openclaw that referenced this pull request Jul 5, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
steipete pushed a commit to deepujain/openclaw that referenced this pull request Jul 5, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
steipete pushed a commit to deepujain/openclaw that referenced this pull request Jul 5, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
steipete pushed a commit to deepujain/openclaw that referenced this pull request Jul 5, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
steipete pushed a commit to deepujain/openclaw that referenced this pull request Jul 5, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
steipete pushed a commit to deepujain/openclaw that referenced this pull request Jul 5, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
steipete pushed a commit that referenced this pull request Jul 5, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed #39109.
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jul 6, 2026
[pytest>=8, <9] is parsed as two items; pip fails on '<9'.
Use ["pytest>=8,<9"] so pip gets one valid PEP 440 spec.
Pre-commit-only fix from closed openclaw#39109.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

channel: voice-call Channel integration: voice-call size: XS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

voice-call: staleCallReaperSeconds missing from openclaw.plugin.json configSchema

2 participants