feat(voicewake): add gateway-owned wake words sync

This commit is contained in:
Peter Steinberger
2025-12-14 05:05:06 +00:00
parent 26a05292b9
commit 1a92127dfa
5 changed files with 413 additions and 2 deletions

View File

@@ -0,0 +1,46 @@
import fs from "node:fs/promises";
import os from "node:os";
import path from "node:path";
import { describe, expect, it } from "vitest";
import {
defaultVoiceWakeTriggers,
loadVoiceWakeConfig,
setVoiceWakeTriggers,
} from "./voicewake.js";
describe("voicewake store", () => {
it("returns defaults when missing", async () => {
const baseDir = await fs.mkdtemp(
path.join(os.tmpdir(), "clawdis-voicewake-"),
);
const cfg = await loadVoiceWakeConfig(baseDir);
expect(cfg.triggers).toEqual(defaultVoiceWakeTriggers());
expect(cfg.updatedAtMs).toBe(0);
});
it("sanitizes and persists triggers", async () => {
const baseDir = await fs.mkdtemp(
path.join(os.tmpdir(), "clawdis-voicewake-"),
);
const saved = await setVoiceWakeTriggers(
[" hi ", "", " there "],
baseDir,
);
expect(saved.triggers).toEqual(["hi", "there"]);
expect(saved.updatedAtMs).toBeGreaterThan(0);
const loaded = await loadVoiceWakeConfig(baseDir);
expect(loaded.triggers).toEqual(["hi", "there"]);
expect(loaded.updatedAtMs).toBeGreaterThan(0);
});
it("falls back to defaults when triggers empty", async () => {
const baseDir = await fs.mkdtemp(
path.join(os.tmpdir(), "clawdis-voicewake-"),
);
const saved = await setVoiceWakeTriggers(["", " "], baseDir);
expect(saved.triggers).toEqual(defaultVoiceWakeTriggers());
});
});