mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-18 19:43:22 +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
|
|
@ -0,0 +1,153 @@
|
|||
import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
||||
import { minimaxWebSearchTesting } from "../test-api.js";
|
||||
|
||||
const {
|
||||
MINIMAX_SEARCH_ENDPOINT_GLOBAL,
|
||||
MINIMAX_SEARCH_ENDPOINT_CN,
|
||||
resolveMiniMaxApiKey,
|
||||
resolveMiniMaxEndpoint,
|
||||
resolveMiniMaxRegion,
|
||||
} = minimaxWebSearchTesting;
|
||||
|
||||
describe("minimax web search provider", () => {
|
||||
const originalApiHost = process.env.MINIMAX_API_HOST;
|
||||
const originalCodePlanKey = process.env.MINIMAX_CODE_PLAN_KEY;
|
||||
const originalCodingApiKey = process.env.MINIMAX_CODING_API_KEY;
|
||||
const originalApiKey = process.env.MINIMAX_API_KEY;
|
||||
|
||||
beforeEach(() => {
|
||||
delete process.env.MINIMAX_API_HOST;
|
||||
delete process.env.MINIMAX_CODE_PLAN_KEY;
|
||||
delete process.env.MINIMAX_CODING_API_KEY;
|
||||
delete process.env.MINIMAX_API_KEY;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
process.env.MINIMAX_API_HOST = originalApiHost;
|
||||
process.env.MINIMAX_CODE_PLAN_KEY = originalCodePlanKey;
|
||||
process.env.MINIMAX_CODING_API_KEY = originalCodingApiKey;
|
||||
process.env.MINIMAX_API_KEY = originalApiKey;
|
||||
});
|
||||
|
||||
describe("resolveMiniMaxRegion", () => {
|
||||
it("returns global by default", () => {
|
||||
expect(resolveMiniMaxRegion()).toBe("global");
|
||||
expect(resolveMiniMaxRegion({})).toBe("global");
|
||||
});
|
||||
|
||||
it("returns cn when explicit region is cn", () => {
|
||||
expect(resolveMiniMaxRegion({ minimax: { region: "cn" } })).toBe("cn");
|
||||
});
|
||||
|
||||
it("returns global when explicit region is not cn", () => {
|
||||
expect(resolveMiniMaxRegion({ minimax: { region: "global" } })).toBe("global");
|
||||
expect(resolveMiniMaxRegion({ minimax: { region: "us" } })).toBe("global");
|
||||
});
|
||||
|
||||
it("infers cn from MINIMAX_API_HOST", () => {
|
||||
process.env.MINIMAX_API_HOST = "https://api.minimaxi.com/anthropic";
|
||||
expect(resolveMiniMaxRegion()).toBe("cn");
|
||||
});
|
||||
|
||||
it("infers cn from model provider base URL", () => {
|
||||
const cnConfig = {
|
||||
models: {
|
||||
providers: {
|
||||
minimax: { baseUrl: "https://api.minimaxi.com/anthropic" },
|
||||
},
|
||||
},
|
||||
};
|
||||
expect(resolveMiniMaxRegion({}, cnConfig)).toBe("cn");
|
||||
});
|
||||
|
||||
it("infers cn from minimax-portal base URL (OAuth CN path)", () => {
|
||||
const cnPortalConfig = {
|
||||
models: {
|
||||
providers: {
|
||||
"minimax-portal": { baseUrl: "https://api.minimaxi.com/anthropic" },
|
||||
},
|
||||
},
|
||||
};
|
||||
expect(resolveMiniMaxRegion({}, cnPortalConfig)).toBe("cn");
|
||||
});
|
||||
|
||||
it("returns global when model provider base URL is global", () => {
|
||||
const globalConfig = {
|
||||
models: {
|
||||
providers: {
|
||||
minimax: { baseUrl: "https://api.minimax.io/anthropic" },
|
||||
},
|
||||
},
|
||||
};
|
||||
expect(resolveMiniMaxRegion({}, globalConfig)).toBe("global");
|
||||
});
|
||||
|
||||
it("explicit search config region takes priority over base URL", () => {
|
||||
const cnConfig = {
|
||||
models: {
|
||||
providers: {
|
||||
minimax: { baseUrl: "https://api.minimaxi.com/anthropic" },
|
||||
},
|
||||
},
|
||||
};
|
||||
// Explicit global region overrides CN base URL
|
||||
expect(resolveMiniMaxRegion({ minimax: { region: "global" } }, cnConfig)).toBe("global");
|
||||
});
|
||||
|
||||
it("handles non-object minimax search config gracefully", () => {
|
||||
expect(resolveMiniMaxRegion({ minimax: "invalid" })).toBe("global");
|
||||
expect(resolveMiniMaxRegion({ minimax: null })).toBe("global");
|
||||
expect(resolveMiniMaxRegion({ minimax: [1, 2] })).toBe("global");
|
||||
});
|
||||
});
|
||||
|
||||
describe("resolveMiniMaxEndpoint", () => {
|
||||
it("returns global endpoint by default", () => {
|
||||
expect(resolveMiniMaxEndpoint()).toBe(MINIMAX_SEARCH_ENDPOINT_GLOBAL);
|
||||
});
|
||||
|
||||
it("returns CN endpoint when region is cn", () => {
|
||||
expect(resolveMiniMaxEndpoint({ minimax: { region: "cn" } })).toBe(
|
||||
MINIMAX_SEARCH_ENDPOINT_CN,
|
||||
);
|
||||
});
|
||||
|
||||
it("returns CN endpoint when inferred from model provider base URL", () => {
|
||||
const cnConfig = {
|
||||
models: {
|
||||
providers: {
|
||||
minimax: { baseUrl: "https://api.minimaxi.com/anthropic" },
|
||||
},
|
||||
},
|
||||
};
|
||||
expect(resolveMiniMaxEndpoint({}, cnConfig)).toBe(MINIMAX_SEARCH_ENDPOINT_CN);
|
||||
});
|
||||
});
|
||||
|
||||
describe("resolveMiniMaxApiKey", () => {
|
||||
it("prefers configured apiKey over env vars", () => {
|
||||
process.env.MINIMAX_CODE_PLAN_KEY = "env-key";
|
||||
expect(resolveMiniMaxApiKey({ apiKey: "configured-key" })).toBe("configured-key");
|
||||
});
|
||||
|
||||
it("accepts MINIMAX_CODING_API_KEY as a coding-plan alias", () => {
|
||||
process.env.MINIMAX_CODING_API_KEY = "coding-key";
|
||||
expect(resolveMiniMaxApiKey()).toBe("coding-key");
|
||||
});
|
||||
|
||||
it("falls back to MINIMAX_API_KEY last", () => {
|
||||
process.env.MINIMAX_API_KEY = "plain-key";
|
||||
expect(resolveMiniMaxApiKey()).toBe("plain-key");
|
||||
});
|
||||
});
|
||||
|
||||
describe("endpoint constants", () => {
|
||||
it("uses correct global endpoint", () => {
|
||||
expect(MINIMAX_SEARCH_ENDPOINT_GLOBAL).toBe("https://api.minimax.io/v1/coding_plan/search");
|
||||
});
|
||||
|
||||
it("uses correct CN endpoint", () => {
|
||||
expect(MINIMAX_SEARCH_ENDPOINT_CN).toBe("https://api.minimaxi.com/v1/coding_plan/search");
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue