openclaw - ✅(Solved) Fix Beta blocker: google-meet chrome-node realtime bridges can orphan and stop on transient input failure [1 pull requests, 1 participants]

Official PRs (…)
ON THIS PAGE

Recommended Tools

×6

Utilities matched from this issue’s tags and category — try them while you read without losing context.

GitHub issue graph ai analysis

Paste a GitHub issue URL. We fetch that issue, discover linked issues from bodies/comments/timeline, collect linked pull requests, and produce a structured English report.

The report is written in English Markdown for sharing and archival.

Helpful · Quick feedback

Loading…
GitHub stats
openclaw/openclaw#72371Fetched 2026-04-27 05:30:44
View on GitHub
Comments
0
Participants
1
Timeline
2
Reactions
0
Author
Participants
Timeline (top)
cross-referenced ×1labeled ×1

Chrome-node Google Meet realtime sessions can leave the node-side command-pair audio bridge alive after the gateway/plugin-side session registry loses ownership. A later join for the same Meet URL can start a second node bridge while the stale SoX/BlackHole pair keeps running. Separately, one transient pullAudio node invoke failure currently tears down the realtime bridge immediately, leaving the Meet tab joined but unresponsive.

Error Message

  • realtime-node.ts stopped on the first pullAudio exception, including transient node invoke timeouts

Root Cause

Chrome-node Google Meet realtime sessions can leave the node-side command-pair audio bridge alive after the gateway/plugin-side session registry loses ownership. A later join for the same Meet URL can start a second node bridge while the stale SoX/BlackHole pair keeps running. Separately, one transient pullAudio node invoke failure currently tears down the realtime bridge immediately, leaving the Meet tab joined but unresponsive.

Fix Action

Fix / Workaround

Patch

PR fix notes

PR #72372: Fix Google Meet chrome-node bridge cleanup

Description (problem / solution / changelog)

Summary

Fixes #72371.

Fixes chrome-node Google Meet realtime bridge lifecycle handling so stale node-side command-pair bridges do not accumulate after gateway/plugin ownership is lost, and so transient pullAudio node failures do not immediately tear down an otherwise healthy realtime session.

Changes

  • Add URL/mode metadata to node-host Google Meet bridge sessions.
  • Add googlemeet.chrome node-host actions:
    • list
    • stopByUrl
  • Stop same-URL/same-mode stale node bridge sessions before starting a fresh chrome-node bridge.
  • Make node child cleanup send SIGTERM first, then SIGKILL after a grace window if the child does not exit.
  • Make paired-node realtime input tolerate transient pull failures up to 5 consecutive failures.
  • Expose consecutiveInputErrors and lastInputError through Chrome health.
  • Add tests for chrome-node stale cleanup, transient input-pull recovery, repeated input-pull shutdown, and node-host lifecycle actions.

Why

The gateway-side Google Meet runtime and the persistent node-host command-pair bridge currently keep separate in-memory ownership maps. If the gateway/plugin side loses state, the node-side SoX/BlackHole bridge can remain alive while googlemeet.status no longer reports a session. A later join for the same Meet URL can create an additional bridge. A separate observed failure path was a transient node invoke timeout in pullAudio, which stopped the realtime bridge immediately and left the browser participant joined but silent/unresponsive.

This keeps the existing official Google Meet plugin and chrome-node architecture intact; it only adds lifecycle reconciliation and input resilience around that path.

Validation

  • pnpm exec oxfmt --check extensions/google-meet/src/node-host.ts extensions/google-meet/src/realtime-node.ts extensions/google-meet/src/transports/chrome.ts extensions/google-meet/src/transports/types.ts extensions/google-meet/index.test.ts
  • pnpm exec vitest run extensions/google-meet/index.test.ts
  • pnpm tsgo:extensions:test

Docs/release context

Changed files

  • extensions/google-meet/index.test.ts (modified, +157/-2)
  • extensions/google-meet/src/node-host.ts (modified, +110/-2)
  • extensions/google-meet/src/realtime-node.ts (modified, +17/-2)
  • extensions/google-meet/src/transports/chrome.ts (modified, +18/-0)
  • extensions/google-meet/src/transports/types.ts (modified, +2/-0)
RAW_BUFFERClick to expand / collapse

Summary

Chrome-node Google Meet realtime sessions can leave the node-side command-pair audio bridge alive after the gateway/plugin-side session registry loses ownership. A later join for the same Meet URL can start a second node bridge while the stale SoX/BlackHole pair keeps running. Separately, one transient pullAudio node invoke failure currently tears down the realtime bridge immediately, leaving the Meet tab joined but unresponsive.

Why this looks like a beta blocker

The documented Google Meet plugin supports realtime Chrome/Chrome-node participation and the documented node host is the supported way to run browser/audio work on another machine. In a real private Meet session, a gateway restart/state loss plus transient node timeout produced:

  • gateway googlemeet.status returning no sessions while the node-side SoX bridge processes were still alive
  • repeated rejoins creating multiple open Meet tabs/bridge pairs
  • the browser participant staying in-call after realtime audio stopped responding

Docs:

Local evidence from reproduced incident

Runtime: OpenClaw 2026.4.24 on macOS, Google Meet plugin, transport=chrome-node, mode=realtime, Google realtime provider using gemini-3.1-flash-live-preview.

Observed process split:

  • gateway/plugin GoogleMeetRuntime owns only process-local #sessions, #sessionStops, and #sessionHealth
  • persistent node host owns actual googlemeet.chrome command-pair bridge sessions and SoX children in its own process-local sessions map
  • join only reuses sessions visible to the gateway map
  • leave can only stop sessions still visible to the gateway map
  • node-host stopSession only sent SIGTERM and exposed status by bridge id; there was no list/gc/stop-by-url action for orphaned node bridge cleanup
  • realtime-node.ts stopped on the first pullAudio exception, including transient node invoke timeouts

Expected behavior

  • Joining the same Meet URL over chrome-node should reconcile/clean stale node-side bridge ownership before starting a fresh command-pair bridge.
  • Node host should expose lifecycle inspection/cleanup for Google Meet bridge sessions by URL/mode so gateway recovery is possible.
  • Transient input-pull failures should be tolerated for a short window; hard bridge loss or repeated failures should still stop cleanly.
  • Stopping a node bridge should escalate beyond SIGTERM if SoX children do not exit.

Patch

I opened a PR from BsnizND:fix/google-meet-node-bridge-orphans that:

  • adds node-host list and stopByUrl actions for googlemeet.chrome
  • stores Meet URL/mode metadata on node bridge sessions
  • cleans same-URL/same-mode stale node bridge sessions before chrome-node starts a new bridge
  • adds SIGTERM then SIGKILL escalation for child audio processes
  • tolerates transient node pullAudio failures up to 5 consecutive failures and surfaces consecutiveInputErrors / lastInputError in chrome health
  • adds focused Google Meet extension tests

Validation:

  • pnpm exec oxfmt --check extensions/google-meet/src/node-host.ts extensions/google-meet/src/realtime-node.ts extensions/google-meet/src/transports/chrome.ts extensions/google-meet/src/transports/types.ts extensions/google-meet/index.test.ts
  • pnpm exec vitest run extensions/google-meet/index.test.ts
  • pnpm tsgo:extensions:test

extent analysis

TL;DR

Apply the patch from BsnizND:fix/google-meet-node-bridge-orphans to address the issue of stale node-side command-pair audio bridges.

Guidance

  • Review the patch to understand the changes made to the node-host, including the addition of list and stopByUrl actions for googlemeet.chrome.
  • Verify that the patch correctly cleans up stale node bridge sessions before starting a new bridge by checking the Meet URL/mode metadata stored on node bridge sessions.
  • Test the patch using the provided validation commands, including pnpm exec oxfmt --check and pnpm exec vitest run extensions/google-meet/index.test.ts.
  • Monitor the behavior of the node host after applying the patch to ensure that it correctly tolerates transient pullAudio failures and stops cleanly in case of hard bridge loss or repeated failures.

Example

No code snippet is provided as the issue is resolved by applying the existing patch.

Notes

The patch addresses several issues, including the cleanup of stale node bridge sessions, tolerance of transient pullAudio failures, and improved lifecycle inspection and cleanup for Google Meet bridge sessions. However, the effectiveness of the patch may depend on the specific environment and configuration.

Recommendation

Apply the workaround by merging the patch from BsnizND:fix/google-meet-node-bridge-orphans to fix the issue of stale node-side command-pair audio bridges. This patch provides a comprehensive solution to the problem, including cleanup of stale sessions, tolerance of transient failures, and improved lifecycle management.

Vote matrix · Quick signals

Works
Did the solution work? Tap to confirm.
Easy Fix
Was it a quick fix?
Time Saver
Did it save you time?
Blocking
Was it severely blocking?
Common Issue
Are others likely hitting this too?
Flaky / Intermittent
Is it intermittent?
Verified / Reproducible
Can you reproduce it reliably?
Loading…

FAQ

Expected behavior

  • Joining the same Meet URL over chrome-node should reconcile/clean stale node-side bridge ownership before starting a fresh command-pair bridge.
  • Node host should expose lifecycle inspection/cleanup for Google Meet bridge sessions by URL/mode so gateway recovery is possible.
  • Transient input-pull failures should be tolerated for a short window; hard bridge loss or repeated failures should still stop cleanly.
  • Stopping a node bridge should escalate beyond SIGTERM if SoX children do not exit.

Still need to ship something?

×6

Another batch ranked right after the header list — different links, same matching logic.

Back to top recommendations

TRENDING

openclaw - ✅(Solved) Fix Beta blocker: google-meet chrome-node realtime bridges can orphan and stop on transient input failure [1 pull requests, 1 participants]