Skip to content

Stabilize Google Meet chrome-node launch configuration#96908

Merged
joshavant merged 1 commit into
mainfrom
codex/fix-googlemeet-node-command-policy
Jun 26, 2026
Merged

Stabilize Google Meet chrome-node launch configuration#96908
joshavant merged 1 commit into
mainfrom
codex/fix-googlemeet-node-command-policy

Conversation

@joshavant

Copy link
Copy Markdown
Contributor

What Problem This Solves

Google Meet's Chrome and chrome-node paths need to use the same configured launch, audio, and profile settings consistently across setup checks, local Chrome control, and paired node hosts.

Why This Change Was Made

This change keeps Google Meet chrome-node launch parameters derived from the plugin's configured runtime settings, while preserving the existing profile ownership split:

  • Local Chrome profile selection continues to use the Browser plugin's browser.defaultProfile.
  • chrome.browserProfile remains the chrome-node host profile setting.
  • macOS Chrome node-host launch now passes the Meet URL and Chrome profile args in the correct order.

User Impact

No new config surface is added.

Existing local Chrome users should continue using browser.defaultProfile for profile selection. Existing chrome-node users can continue using chrome.browserProfile and configured audio commands. The Google Meet transcribe and agent talk-back paths continue to work with the existing Chrome/BlackHole/SoX setup.

Evidence

  • node scripts/run-vitest.mjs extensions/google-meet/src/node-invoke-policy.test.ts extensions/google-meet/index.test.ts extensions/google-meet/node-host.test.ts src/gateway/node-invoke-plugin-policy.test.ts
  • pnpm tsgo:extensions && pnpm tsgo:test:extensions
  • pnpm build
  • Structured local review: clean
  • Live macOS Google Meet proof:
    • recovered an existing Meet tab through the configured Browser default profile
    • joined, inspected status, and left successfully
    • verified googlemeet setup --json with SoX available
    • verified googlemeet test-speech in Chrome agent mode with speech output confirmed

@clawsweeper

clawsweeper Bot commented Jun 26, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs real behavior proof before merge. Reviewed June 25, 2026, 10:48 PM ET / 02:48 UTC.

Summary
The PR marks googlemeet.chrome dangerous, adds a Google Meet node-invoke policy that rebuilds forwarded chrome-node parameters from plugin config, fixes macOS profiled Chrome launch argument order, and adds focused tests/harness support.

PR surface: Source +200, Tests +184. Total +384 across 7 files.

Reproducibility: yes. at source level. Current main appends the macOS Chrome URL after --args for profiled launches and forwards googlemeet.chrome params without a plugin policy; I did not run the live macOS paired-node flow in this read-only review.

Review metrics: 2 noteworthy metrics.

  • Dangerous Node Command: 1 command changed. googlemeet.chrome moves into the explicit dangerous-command policy path, which is a maintainer-visible gateway trust boundary change.
  • Config-Owned Executable Params: 4 command arrays. The policy stops per-request overrides for audio helper executable arrays and forwards the Google Meet plugin configuration instead.

Stored data model
Persistent data-model change detected: serialized state: extensions/google-meet/node-host.test.ts. Confirm migration or upgrade compatibility proof before merge.

Root-cause cluster
Relationship: canonical
Canonical: #96908
Summary: This PR is the canonical current replacement path for Google Meet chrome-node node.invoke policy stabilization, with the same core boundary as the older PR plus a macOS launch-order fix.

Members:

  • superseded: Update Google Meet chrome-node invoke policy [AI] #91509 - The older open PR adds a similar googlemeet.chrome node-invoke policy, but this PR covers that boundary with a dedicated policy module, additional action sanitization, launch-order repair, and maintainer-labeled proof context.

Proposal only: this assessment does not dispatch repair, suppress jobs, mutate sibling items, close, or merge anything.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🌊 off-meta tidepool
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • none.

Mantis proof suggestion
A paired macOS node proof would materially validate the Chrome profile/audio command boundary this PR changes. A maintainer can ask Mantis to capture proof by posting this exact PR comment:

@openclaw-mantis visual task: verify a Gateway Google Meet chrome-node join uses configured Chrome profile and audio helper commands on a paired macOS node.

Risk before merge

  • [P1] Merging intentionally changes direct googlemeet.chrome start semantics: launch/profile/audio helper parameters become config-owned instead of arbitrary per-request overrides.
  • [P1] The PR changes a node-host command execution trust boundary by marking googlemeet.chrome dangerous and requiring plugin policy mediation before raw node dispatch.

Maintainer options:

  1. Accept The Config-Owned Boundary (recommended)
    Maintainers can merge after relevant CI if they intentionally want direct googlemeet.chrome starts to use configured profile/audio helper settings rather than caller-supplied overrides.
  2. Require A Paired-Node Artifact
    Before merge, ask for redacted terminal, log, or video proof showing a Gateway start reaches a paired macOS node with the configured Chrome profile and helper commands.
  3. Pause To Reconcile The Older Policy PR
    If maintainers are not ready to choose this replacement path, pause this PR and explicitly decide how it should supersede or absorb Update Google Meet chrome-node invoke policy [AI] #91509.

Next step before merge

  • [P1] Maintainer review is needed for the intentional googlemeet.chrome compatibility/security-boundary change and final CI state; there is no narrow ClawSweeper repair defect.

Security
Cleared: No supply-chain, dependency, workflow, secret-handling, or package-resolution regression was found; the diff narrows a node command execution boundary and carries explicit merge-risk review.

Review details

Best possible solution:

Land this maintainer-labeled PR after owner review accepts the compatibility/security-boundary change and relevant CI is green, then close or supersede the older overlapping policy PR so only one Google Meet chrome-node policy path remains.

Do we have a high-confidence way to reproduce the issue?

Yes, at source level. Current main appends the macOS Chrome URL after --args for profiled launches and forwards googlemeet.chrome params without a plugin policy; I did not run the live macOS paired-node flow in this read-only review.

Is this the best way to solve the issue?

Yes, this appears to be the best fix shape: Google Meet owns the command policy, the gateway already has the pre-dispatch policy hook, and the macOS argument fix lives at the node-host launch point. The remaining question is maintainer acceptance of the intentional compatibility/security-boundary change.

AGENTS.md: found and applied where relevant.

Codex review notes: model internal, reasoning high; reviewed against 6830aa39eaa1.

Label changes

Label justifications:

  • P2: This is a bounded Google Meet chrome-node bug/security hardening PR with limited blast radius and no evidence of an active widespread outage.
  • merge-risk: 🚨 compatibility: Direct googlemeet.chrome node invocations that previously supplied launch/profile/audio helper overrides can behave differently after the policy rewrite.
  • merge-risk: 🚨 security-boundary: The PR changes where executable node-host command arrays are trusted and enforced before a paired node runs them.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🌊 off-meta tidepool and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Not applicable: The PR is protected with the maintainer label, so the external-contributor proof gate is not applied; the body still reports live macOS Google Meet proof in prose and GitHub's real-behavior-proof check passed.
Evidence reviewed

PR surface:

Source +200, Tests +184. Total +384 across 7 files.

View PR surface stats
Area Files Added Removed Net
Source 4 203 3 +200
Tests 3 186 2 +184
Docs 0 0 0 0
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 7 389 5 +384

What I checked:

  • Repository policy read: Root and extensions scoped AGENTS.md were read and applied because this PR touches a bundled plugin, plugin SDK node-invoke policy, compatibility, and security-boundary behavior. (AGENTS.md:1, 6830aa39eaa1)
  • Current main lacks the Google Meet policy: Current main registers googlemeet.chrome as a node-host command without dangerous: true and without a matching plugin node.invoke policy, so the PR is not obsolete on main. (extensions/google-meet/index.ts:1198, 6830aa39eaa1)
  • Current main has the launch-order issue: Current main appends the Meet URL after --args, so a profiled macOS Chrome launch can pass the URL as an app argument instead of the URL to open. (extensions/google-meet/src/node-host.ts:334, 6830aa39eaa1)
  • PR policy narrows forwarded start parameters: The PR head normalizes the Meet URL, rejects unsupported start modes, and forwards launch/profile/audio command parameters from resolved Google Meet config rather than caller-supplied executable arrays. (extensions/google-meet/src/node-invoke-policy.ts:43, 70e7219db271)
  • Gateway policy contract checked: Gateway node.invoke applies plugin node.invoke policy after global allowlist checks and before raw node transport dispatch, with a fail-closed path for dangerous plugin node-host commands that lack policy. (src/gateway/server-methods/nodes.ts:1447, 6830aa39eaa1)
  • Tests cover the new boundary: The PR adds tests for config-owned executable fields, trusted bridge commands, non-Meet URL rejection, setup sanitization, unsupported action rejection, and macOS URL-before-profile launch order. (extensions/google-meet/src/node-invoke-policy.test.ts:27, 70e7219db271)

Likely related people:

  • steipete: Live GitHub history shows repeated Google Meet chrome-node/runtime maintenance and node policy documentation work near the affected files. (role: feature owner and recent area contributor; confidence: high; commits: 96e581242605, b13e9f186491, 2b45a112cb65; files: extensions/google-meet/src/node-host.ts, extensions/google-meet/src/transports/chrome.ts, src/gateway/node-invoke-plugin-policy.ts)
  • BsnizND: Merged history includes chrome-node bridge cleanup, realtime interruption playback, and gateway-owned tool session fixes in the same Google Meet node-host/runtime area. (role: recent Google Meet chrome-node contributor; confidence: high; commits: f2a17b299119, 2785be2604d9, 916eda16c19f; files: extensions/google-meet/src/node-host.ts, extensions/google-meet/src/transports/chrome.ts, extensions/google-meet/index.test.ts)
  • pgondhi987: Live history shows work on gateway approval access and node-invoke policy plumbing, which is the generic security boundary this Google Meet policy uses. (role: adjacent gateway policy contributor; confidence: medium; commits: 386d321634b3; files: src/gateway/node-invoke-plugin-policy.ts, src/plugins/types.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@clawsweeper clawsweeper Bot added rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. P2 Normal backlog priority with limited blast radius. merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. labels Jun 26, 2026
@joshavant

Copy link
Copy Markdown
Contributor Author

@openclaw-mantis visual task: verify a Gateway Google Meet chrome-node join uses configured Chrome profile and audio helper commands on a paired macOS node.

@joshavant
joshavant merged commit 448b7c7 into main Jun 26, 2026
144 of 156 checks passed
@joshavant
joshavant deleted the codex/fix-googlemeet-node-command-policy branch June 26, 2026 03:11
github-actions Bot pushed a commit to Desicool/openclaw that referenced this pull request Jun 26, 2026
QiuYuang pushed a commit to QiuYuang/openclaw that referenced this pull request Jul 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

maintainer Maintainer-authored PR merge-risk: 🚨 compatibility 🚨 May break existing users, config, migrations, defaults, or upgrade paths. merge-risk: 🚨 security-boundary 🚨 May affect sandboxing, authorization, credentials, or sensitive data. P2 Normal backlog priority with limited blast radius. plugin: google-meet rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant