From 99d8f699aa7d7d6188fe2140add119a5af9dac33 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 24 Apr 2026 06:18:42 +0100 Subject: [PATCH] fix: use absolute system profiler for Meet audio checks --- extensions/google-meet/index.test.ts | 4 ++-- extensions/google-meet/src/node-host.ts | 10 ++++++++-- extensions/google-meet/src/transports/chrome.ts | 4 +++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/extensions/google-meet/index.test.ts b/extensions/google-meet/index.test.ts index 5beeb4313e6..3d976b1e800 100644 --- a/extensions/google-meet/index.test.ts +++ b/extensions/google-meet/index.test.ts @@ -112,7 +112,7 @@ function setup( : (options.nodesInvokeResult ?? { launched: true }), ); const runCommandWithTimeout = vi.fn(async (argv: string[]) => { - if (argv[0] === "system_profiler") { + if (argv[0] === "/usr/sbin/system_profiler") { return { code: 0, stdout: "BlackHole 2ch", stderr: "" }; } return { code: 0, stdout: "", stderr: "" }; @@ -506,7 +506,7 @@ describe("google-meet plugin", () => { expect(respond.mock.calls[0]?.[0]).toBe(true); expect(runCommandWithTimeout).toHaveBeenNthCalledWith( 1, - ["system_profiler", "SPAudioDataType"], + ["/usr/sbin/system_profiler", "SPAudioDataType"], { timeoutMs: 10000 }, ); expect(runCommandWithTimeout).toHaveBeenNthCalledWith( diff --git a/extensions/google-meet/src/node-host.ts b/extensions/google-meet/src/node-host.ts index a74426cc5c8..7dd5c636b98 100644 --- a/extensions/google-meet/src/node-host.ts +++ b/extensions/google-meet/src/node-host.ts @@ -6,7 +6,10 @@ import { DEFAULT_GOOGLE_MEET_AUDIO_INPUT_COMMAND, DEFAULT_GOOGLE_MEET_AUDIO_OUTPUT_COMMAND, } from "./config.js"; -import { outputMentionsBlackHole2ch } from "./transports/chrome.js"; +import { + GOOGLE_MEET_SYSTEM_PROFILER_COMMAND, + outputMentionsBlackHole2ch, +} from "./transports/chrome.js"; type NodeBridgeSession = { id: string; @@ -63,7 +66,10 @@ function assertBlackHoleAvailable(timeoutMs: number) { if (process.platform !== "darwin") { throw new Error("Chrome Meet transport with blackhole-2ch audio is currently macOS-only"); } - const result = runCommandWithTimeout(["system_profiler", "SPAudioDataType"], timeoutMs); + const result = runCommandWithTimeout( + [GOOGLE_MEET_SYSTEM_PROFILER_COMMAND, "SPAudioDataType"], + timeoutMs, + ); const output = `${result.stdout}\n${result.stderr}`; if (result.code !== 0 || !outputMentionsBlackHole2ch(output)) { throw new Error("BlackHole 2ch audio device not found on the node."); diff --git a/extensions/google-meet/src/transports/chrome.ts b/extensions/google-meet/src/transports/chrome.ts index 4fbce1c666d..f3fe1fef0eb 100644 --- a/extensions/google-meet/src/transports/chrome.ts +++ b/extensions/google-meet/src/transports/chrome.ts @@ -11,6 +11,8 @@ import { type ChromeRealtimeAudioBridgeHandle, } from "../realtime.js"; +export const GOOGLE_MEET_SYSTEM_PROFILER_COMMAND = "/usr/sbin/system_profiler"; + export function outputMentionsBlackHole2ch(output: string): boolean { return /\bBlackHole\s+2ch\b/i.test(output); } @@ -24,7 +26,7 @@ export async function assertBlackHole2chAvailable(params: { } const result = await params.runtime.system.runCommandWithTimeout( - ["system_profiler", "SPAudioDataType"], + [GOOGLE_MEET_SYSTEM_PROFILER_COMMAND, "SPAudioDataType"], { timeoutMs: params.timeoutMs }, ); const output = `${result.stdout ?? ""}\n${result.stderr ?? ""}`;