fix(google-meet): preserve silent realtime joins

This commit is contained in:
Vincent Koc
2026-05-03 17:31:20 -07:00
parent 0633cb4504
commit 08762aa290
3 changed files with 16 additions and 1 deletions

View File

@@ -27,6 +27,7 @@ Docs: https://docs.openclaw.ai
- Plugins/update: treat official externalized bundled npm migrations and ClawHub-to-npm fallbacks as trusted source-linked installs, so prerelease-only official plugin packages can migrate from bundled builds without being rejected as unsafe prerelease resolutions. Thanks @vincentkoc.
- Plugins/update: clean stale bundled load paths for already-externalized pinned npm and ClawHub plugin installs, so release-channel sync does not leave removed bundled paths ahead of the installed external package. Thanks @vincentkoc.
- Plugins/CLI: include package dependency install state in `openclaw plugins list --json` so scripts can spot missing plugin dependencies without runtime-loading plugins.
- Google Meet: preserve `realtime.introMessage: ""` so realtime Chrome joins can stay silent instead of restoring the default spoken intro. Thanks @vincentkoc.
- Discord/status: add degraded Discord transport and gateway event-loop starvation signals to `openclaw channels status`, `openclaw status --deep`, and fetch-timeout logs so intermittent socket resets do not look like a healthy running channel. (#76327) Thanks @joshavant.
- Providers/OpenRouter: add opt-in response caching params that send OpenRouter's `X-OpenRouter-Cache`, `X-OpenRouter-Cache-TTL`, and cache-clear headers only on verified OpenRouter routes. Thanks @vincentkoc.
- Providers/OpenRouter: expand app-attribution categories so OpenClaw advertises coding, programming, writing, chat, and personal-agent usage on verified OpenRouter routes. Thanks @vincentkoc.

View File

@@ -451,6 +451,16 @@ describe("google-meet plugin", () => {
).toBe("jay");
});
it("preserves an empty realtime intro message for silent joins", () => {
expect(
resolveGoogleMeetConfig({
realtime: {
introMessage: "",
},
}).realtime.introMessage,
).toBe("");
});
it("keeps legacy command-pair audio format when custom commands omit a format", () => {
expect(
resolveGoogleMeetConfig({

View File

@@ -271,6 +271,10 @@ function readEnvString(env: NodeJS.ProcessEnv, keys: readonly string[]): string
return undefined;
}
function normalizeStringAllowEmpty(value: unknown): string | undefined {
return typeof value === "string" ? value.trim() : undefined;
}
function readEnvBoolean(env: NodeJS.ProcessEnv, keys: readonly string[]): boolean | undefined {
const normalized = normalizeOptionalLowercaseString(readEnvString(env, keys));
if (!normalized) {
@@ -486,7 +490,7 @@ export function resolveGoogleMeetConfigWithEnv(
normalizeOptionalString(realtime.instructions) ??
DEFAULT_GOOGLE_MEET_CONFIG.realtime.instructions,
introMessage:
normalizeOptionalString(realtime.introMessage) ??
normalizeStringAllowEmpty(realtime.introMessage) ??
DEFAULT_GOOGLE_MEET_CONFIG.realtime.introMessage,
agentId: normalizeOptionalString(realtime.agentId),
toolPolicy: resolveRealtimeVoiceAgentConsultToolPolicy(