diff --git a/.openclaw-sync/source.json b/.openclaw-sync/source.json index aca8fda8f..6ea4ae030 100644 --- a/.openclaw-sync/source.json +++ b/.openclaw-sync/source.json @@ -1,5 +1,5 @@ { "repository": "openclaw/openclaw", - "sha": "900ba7cf33e081018f1d77dc8bc8bc56f215b698", - "syncedAt": "2026-04-24T22:07:52.082Z" + "sha": "e2f13959d409398908ac6899f1c7db28ec243cf0", + "syncedAt": "2026-04-24T22:12:14.803Z" } diff --git a/docs/.generated/config-baseline.sha256 b/docs/.generated/config-baseline.sha256 index 4bf159d5f..5690f60a2 100644 --- a/docs/.generated/config-baseline.sha256 +++ b/docs/.generated/config-baseline.sha256 @@ -1,4 +1,4 @@ -0adf332920764704575b21d2fe9568742d977ff0169683319c168d68ea7cf143 config-baseline.json +a608561acecc7cfc5f16a31b7498d7a66001f6655f5a5960a68842c59b7dcaa8 config-baseline.json 2936d2ccf0c1e6e932a0e7c617b809e4b31dbb9a7d5afefbba29b229913b9e50 config-baseline.core.json 22d7cd6d8279146b2d79c9531a55b80b52a2c99c81338c508104729154fdd02d config-baseline.channel.json -28d874a4910174c7014ef2a267269a3327d31ff657f76d38c034ef1b86eae484 config-baseline.plugin.json +d47a574045a47356e513ab308d7dcad9fa0b389f50e93c5cf0f820fab858e70e config-baseline.plugin.json diff --git a/docs/plugins/google-meet.md b/docs/plugins/google-meet.md index 67d7e278d..cec61f6f4 100644 --- a/docs/plugins/google-meet.md +++ b/docs/plugins/google-meet.md @@ -670,6 +670,7 @@ OpenClaw tools, it can call `openclaw_agent_consult`. The consult tool runs the regular OpenClaw agent behind the scenes with recent meeting transcript context and returns a concise spoken answer to the realtime voice session. The voice model can then speak that answer back into the meeting. +It uses the same shared realtime consult tool as Voice Call. `realtime.toolPolicy` controls the consult run: diff --git a/docs/plugins/voice-call.md b/docs/plugins/voice-call.md index 35a6b7514..92abfd5f3 100644 --- a/docs/plugins/voice-call.md +++ b/docs/plugins/voice-call.md @@ -126,6 +126,7 @@ Set config under `plugins.entries.voice-call.config`: realtime: { enabled: false, provider: "google", // optional; first registered realtime voice provider when unset + toolPolicy: "safe-read-only", providers: { google: { model: "gemini-2.5-flash-native-audio-preview-12-2025", @@ -174,6 +175,20 @@ Current runtime behavior: - Bundled realtime voice providers include Google Gemini Live (`google`) and OpenAI (`openai`), registered by their provider plugins. - Provider-owned raw config lives under `realtime.providers.`. +- Voice Call exposes the shared `openclaw_agent_consult` realtime tool by + default. The realtime model can call it when the caller asks for deeper + reasoning, current information, or normal OpenClaw tools. +- `realtime.toolPolicy` controls the consult run: + - `safe-read-only`: expose the consult tool and limit the regular agent to + `read`, `web_search`, `web_fetch`, `x_search`, `memory_search`, and + `memory_get`. + - `owner`: expose the consult tool and let the regular agent use the normal + agent tool policy. + - `none`: do not expose the consult tool. Custom `realtime.tools` are still + passed through to the realtime provider. +- Consult session keys reuse the existing voice session when available, then + fall back to the caller/callee phone number so follow-up consult calls keep + context during the call. - If `realtime.provider` points at an unregistered provider, or no realtime voice provider is registered at all, Voice Call logs a warning and skips realtime media instead of failing the whole plugin. @@ -199,7 +214,8 @@ Example: realtime: { enabled: true, provider: "google", - instructions: "Speak briefly and ask before using tools.", + instructions: "Speak briefly. Call openclaw_agent_consult before using deeper tools.", + toolPolicy: "safe-read-only", providers: { google: { apiKey: "${GEMINI_API_KEY}",