oclaw/openclaw/test/web-provider-boundary.test.ts
oliver dbbe3add6a 重构主控编排与运行时预热链路,统一工作区提示词/专家调度协议并补齐 wiki 记忆注入与写回闭环。
同时收敛启动与运维脚本默认行为(含 wiki worker)、更新 Admin 可观测性与相关测试,降低首轮时延并提高运行稳定性。

Made-with: Cursor
2026-04-26 08:34:33 +08:00

62 lines
2.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
collectWebFetchProviderBoundaryViolations,
main as webFetchMain,
} from "../scripts/check-web-fetch-provider-boundaries.mjs";
import {
collectWebSearchProviderBoundaryInventory,
main as webSearchMain,
} from "../scripts/check-web-search-provider-boundaries.mjs";
import { BUNDLED_PLUGIN_PATH_PREFIX } from "./helpers/bundled-plugin-paths.js";
import { createCapturedIo } from "./helpers/captured-io.js";
const webFetchViolationsPromise = collectWebFetchProviderBoundaryViolations();
const webFetchJsonOutputPromise = getJsonOutput(webFetchMain);
const webSearchInventoryPromise = collectWebSearchProviderBoundaryInventory();
const webSearchJsonOutputPromise = getJsonOutput(webSearchMain);
async function getJsonOutput(
main: (argv: string[], io: ReturnType<typeof createCapturedIo>["io"]) => Promise<number>,
) {
const captured = createCapturedIo();
const exitCode = await main(["--json"], captured.io);
return {
exitCode,
stderr: captured.readStderr(),
json: JSON.parse(captured.readStdout()),
};
}
describe("web provider boundaries", () => {
it("keeps Firecrawl-specific fetch logic out of core runtime/tooling", async () => {
const violations = await webFetchViolationsPromise;
const jsonOutput = await webFetchJsonOutputPromise;
expect(violations).toEqual([]);
expect(jsonOutput.exitCode).toBe(0);
expect(jsonOutput.stderr).toBe("");
expect(jsonOutput.json).toEqual([]);
});
it("keeps web search provider boundary inventory empty, core-only, and sorted", async () => {
const inventory = await webSearchInventoryPromise;
const jsonOutput = await webSearchJsonOutputPromise;
expect(inventory).toEqual([]);
expect(inventory.some((entry) => entry.file.startsWith(BUNDLED_PLUGIN_PATH_PREFIX))).toBe(
false,
);
expect(
[...inventory].toSorted(
(left, right) =>
left.provider.localeCompare(right.provider) ||
left.file.localeCompare(right.file) ||
left.line - right.line ||
left.reason.localeCompare(right.reason),
),
).toEqual(inventory);
expect(jsonOutput.exitCode).toBe(0);
expect(jsonOutput.stderr).toBe("");
expect(jsonOutput.json).toEqual([]);
});
});