mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-16 14:10:48 +08:00
重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。 Made-with: Cursor
This commit is contained in:
parent
4a23b715a2
commit
dbbe3add6a
14438 changed files with 2693620 additions and 2546 deletions
75
openclaw/extensions/elevenlabs/config-compat.test.ts
Normal file
75
openclaw/extensions/elevenlabs/config-compat.test.ts
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
import type fs from "node:fs";
|
||||
import type os from "node:os";
|
||||
import type path from "node:path";
|
||||
import { describe, expect, it, vi } from "vitest";
|
||||
import {
|
||||
migrateElevenLabsLegacyTalkConfig,
|
||||
resolveElevenLabsApiKeyWithProfileFallback,
|
||||
} from "./config-compat.js";
|
||||
|
||||
describe("elevenlabs config compat", () => {
|
||||
it("moves legacy talk fields into talk.providers.elevenlabs", () => {
|
||||
const result = migrateElevenLabsLegacyTalkConfig({
|
||||
talk: {
|
||||
voiceId: "voice-123",
|
||||
modelId: "eleven_v3",
|
||||
outputFormat: "pcm_44100",
|
||||
apiKey: "secret-key", // pragma: allowlist secret
|
||||
},
|
||||
});
|
||||
|
||||
expect(result.changes).toEqual([
|
||||
"Moved talk legacy fields (voiceId, modelId, outputFormat, apiKey) → talk.providers.elevenlabs (filled missing provider fields only).",
|
||||
]);
|
||||
expect(result.config).toEqual({
|
||||
talk: {
|
||||
providers: {
|
||||
elevenlabs: {
|
||||
voiceId: "voice-123",
|
||||
modelId: "eleven_v3",
|
||||
outputFormat: "pcm_44100",
|
||||
apiKey: "secret-key", // pragma: allowlist secret
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
});
|
||||
|
||||
it("reads ELEVENLABS_API_KEY from profile when env is missing", () => {
|
||||
const existsSync = vi.fn((candidate: string) => candidate.endsWith(".profile"));
|
||||
const readFileSync = vi.fn(() => "export ELEVENLABS_API_KEY=profile-key\n");
|
||||
const homedir = vi.fn(() => "/tmp/home");
|
||||
|
||||
const value = resolveElevenLabsApiKeyWithProfileFallback(
|
||||
{},
|
||||
{
|
||||
fs: { existsSync, readFileSync } as unknown as typeof fs,
|
||||
os: { homedir } as unknown as typeof os,
|
||||
path: { join: (...parts: string[]) => parts.join("/") } as unknown as typeof path,
|
||||
},
|
||||
);
|
||||
|
||||
expect(value).toBe("profile-key");
|
||||
expect(readFileSync).toHaveBeenCalledOnce();
|
||||
});
|
||||
|
||||
it("prefers ELEVENLABS_API_KEY env over profile", () => {
|
||||
const existsSync = vi.fn(() => {
|
||||
throw new Error("profile should not be read when env key exists");
|
||||
});
|
||||
const readFileSync = vi.fn(() => "");
|
||||
|
||||
const value = resolveElevenLabsApiKeyWithProfileFallback(
|
||||
{ ELEVENLABS_API_KEY: "env-key" },
|
||||
{
|
||||
fs: { existsSync, readFileSync } as unknown as typeof fs,
|
||||
os: { homedir: () => "/tmp/home" } as unknown as typeof os,
|
||||
path: { join: (...parts: string[]) => parts.join("/") } as unknown as typeof path,
|
||||
},
|
||||
);
|
||||
|
||||
expect(value).toBe("env-key");
|
||||
expect(existsSync).not.toHaveBeenCalled();
|
||||
expect(readFileSync).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue