Skip to content

Google Meet tool-created realtime sessions can lose gateway ownership #72440

Description

@BsnizND

Summary

When the google_meet agent tool creates or joins a realtime Google Meet room, the live session can be owned only by the tool-turn plugin runtime instead of the gateway-owned googlemeet.* runtime. After the agent turn completes, googlemeet.status, googlemeet.leave, and googlemeet.speak can no longer see that session, even though the Chrome tab and node audio bridge continue running.

Observed behavior

In a live OpenClaw 2026.4.24 install:

  1. An agent used google_meet action create with join: true, transport: chrome-node, mode: realtime.
  2. The tool result returned a session id and initial same-turn google_meet status could report realtime readiness.
  3. After the agent turn ended, openclaw gateway call googlemeet.status --params '{"sessionId":"..."}' returned { "found": false } and googlemeet.status listed no active sessions.
  4. The Chrome Meet tab and BlackHole/SoX node bridge processes were still running.
  5. Tool-backed live conversation then stalled because the official gateway control path no longer owned the session.

Expected behavior

Stateful google_meet tool actions should use the registered googlemeet.* gateway methods so that the same gateway runtime owns session maps, speak/leave callbacks, and health checks after the agent turn exits.

Additional bridge cleanup issue found during verification

While verifying the fix, googlemeet.leave could still leave one side of the node command-pair audio bridge alive. The cause is stopSession() returning early when session.closed is already true; if one child process closes first, the later official stop path skips termination of the surviving child. Also, Node's child.killed flag only means a signal was sent, not that the process exited, so SIGKILL fallback should check exitCode/signalCode.

Fix in PR

  • Routes stateful google_meet tool actions (join, create, test_speech, status, recover_current_tab, setup_status, leave, speak) through the existing gateway methods.
  • Preserves structured Google Meet gateway error payloads in protocol error.details, while keeping legacy gateway payload shape for direct gateway handlers.
  • Hardens node command-pair cleanup so both child processes are always signaled, even if the bridge was already marked closed, and escalates from SIGTERM to SIGKILL based on process exit state.

Local validation

  • pnpm exec oxfmt --check extensions/google-meet/index.ts extensions/google-meet/index.test.ts extensions/google-meet/index.create.test.ts extensions/google-meet/src/test-support/plugin-harness.ts extensions/google-meet/src/node-host.ts
  • pnpm exec vitest run extensions/google-meet/index.test.ts extensions/google-meet/index.create.test.ts
  • pnpm tsgo:extensions:test

Live smoke validation

On a patched OpenClaw 2026.4.24 install, an agent-created Google Meet room through the real google_meet tool stayed visible to googlemeet.status after the agent turn completed. A direct create/leave smoke after node-host cleanup left no BlackHole SoX bridge processes running.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Fields

    Priority

    None yet

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions