mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-12 01:31:08 +00:00
fix(talk): fix ensure permissions on first execution of Talk Mode in MacOS (#62459)
* fix(talk): fix ensure permissions on first execution of Talk Mode in MacOS * macos: fix talk mode formatting * test: fix CI shard regressions * docs: add talk mode changelog --------- Co-authored-by: ImLukeF <92253590+ImLukeF@users.noreply.github.com>
This commit is contained in:
@@ -11,6 +11,7 @@ Docs: https://docs.openclaw.ai
|
||||
- WhatsApp: honor the configured default account when the active listener helper is used without an explicit account id, so named default accounts do not get registered under `default`. (#53918) Thanks @yhyatt.
|
||||
- QA/packaging: stop packaged CLI startup and completion cache generation from reading repo-only QA scenario markdown by routing QA command registration through a narrow facade. (#64648) Thanks @obviyus.
|
||||
- Control UI/webchat: persist agent-run TTS audio replies into webchat history before finalization so tool-generated audio reaches webchat clients again. (#63514) thanks @bittoby
|
||||
- macOS/Talk Mode: after granting microphone permission on first enable, continue starting Talk Mode instead of requiring a second toggle. (#62459) Thanks @ggarber.
|
||||
|
||||
## 2026.4.10
|
||||
|
||||
|
||||
@@ -128,8 +128,9 @@ actor TalkModeRuntime {
|
||||
private func start() async {
|
||||
let gen = self.lifecycleGeneration
|
||||
guard voiceWakeSupported else { return }
|
||||
guard PermissionManager.voiceWakePermissionsGranted() else {
|
||||
self.logger.debug("talk runtime not starting: permissions missing")
|
||||
|
||||
guard await PermissionManager.ensureVoiceWakePermissions(interactive: true) else {
|
||||
self.logger.error("talk runtime not starting: permissions missing")
|
||||
return
|
||||
}
|
||||
await self.reloadConfig()
|
||||
|
||||
@@ -21,6 +21,9 @@ describe("memory-wiki plugin", () => {
|
||||
expect(registerMemoryPromptSupplement).toHaveBeenCalledTimes(1);
|
||||
expect(registerGatewayMethod.mock.calls.map((call) => call[0])).toEqual([
|
||||
"wiki.status",
|
||||
"wiki.importRuns",
|
||||
"wiki.importInsights",
|
||||
"wiki.palace",
|
||||
"wiki.init",
|
||||
"wiki.doctor",
|
||||
"wiki.compile",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { applyConfigDefaults as applyAnthropicConfigDefaults } from "../../extensions/anthropic/provider-policy-api.js";
|
||||
import type { OpenClawConfig } from "./config.js";
|
||||
import { applyProviderConfigDefaultsForConfig } from "./provider-policy.js";
|
||||
|
||||
function expectAnthropicPruningDefaults(cfg: OpenClawConfig, heartbeatEvery = "30m") {
|
||||
expect(cfg.agents?.defaults?.contextPruning?.mode).toBe("cache-ttl");
|
||||
@@ -8,10 +8,8 @@ function expectAnthropicPruningDefaults(cfg: OpenClawConfig, heartbeatEvery = "3
|
||||
expect(cfg.agents?.defaults?.heartbeat?.every).toBe(heartbeatEvery);
|
||||
}
|
||||
|
||||
function applyAnthropicDefaultsForTest(
|
||||
config: Parameters<typeof applyAnthropicConfigDefaults>[0]["config"],
|
||||
) {
|
||||
return applyAnthropicConfigDefaults({ config, env: {} });
|
||||
function applyAnthropicDefaultsForTest(config: OpenClawConfig) {
|
||||
return applyProviderConfigDefaultsForConfig({ provider: "anthropic", config, env: {} });
|
||||
}
|
||||
|
||||
describe("config pruning defaults", () => {
|
||||
|
||||
@@ -23,6 +23,8 @@ vi.mock("../../channels/plugins/index.js", () => ({
|
||||
}));
|
||||
|
||||
vi.mock("../../plugins/runtime.js", () => ({
|
||||
getActivePluginChannelRegistry: () => null,
|
||||
getActivePluginRegistry: () => null,
|
||||
getActivePluginChannelRegistryVersion: () => mocks.getActivePluginChannelRegistryVersion(),
|
||||
}));
|
||||
|
||||
|
||||
Reference in New Issue
Block a user