



























@@ -2361,23 +2361,78 @@ module.exports = { id: "throws-after-import", register() {} };`,
23612361).toBe(true);
23622362});
236323632364-it("can scope bundled provider loads to deepseek without hanging", () => {
2364+it("can scope bundled provider loads without hanging", () => {
2365+const bundledDir = makeTempDir();
2366+const scopedDir = path.join(bundledDir, "scoped-provider");
2367+mkdirSafe(scopedDir);
2368+fs.writeFileSync(
2369+path.join(scopedDir, "package.json"),
2370+JSON.stringify({
2371+name: "@openclaw/scoped-provider",
2372+openclaw: { extensions: ["./index.cjs"] },
2373+}),
2374+"utf-8",
2375+);
2376+const plugin = writePlugin({
2377+id: "scoped-provider",
2378+dir: scopedDir,
2379+filename: "index.cjs",
2380+body: `module.exports = {
2381+ id: "scoped-provider",
2382+ register(api) {
2383+ api.registerProvider({
2384+ id: "scoped-provider",
2385+ label: "Scoped Provider",
2386+ auth: [],
2387+ });
2388+ },
2389+ };`,
2390+});
2391+updatePluginManifest(plugin, { enabledByDefault: true, providers: ["scoped-provider"] });
2392+2393+const unscopedDir = path.join(bundledDir, "unscoped-provider");
2394+mkdirSafe(unscopedDir);
2395+fs.writeFileSync(
2396+path.join(unscopedDir, "package.json"),
2397+JSON.stringify({
2398+name: "@openclaw/unscoped-provider",
2399+openclaw: { extensions: ["./index.cjs"] },
2400+}),
2401+"utf-8",
2402+);
2403+const unscoped = writePlugin({
2404+id: "unscoped-provider",
2405+dir: unscopedDir,
2406+filename: "index.cjs",
2407+body: `module.exports = {
2408+ id: "unscoped-provider",
2409+ register() {
2410+ throw new Error("unscoped provider should not load");
2411+ },
2412+ };`,
2413+});
2414+updatePluginManifest(unscoped, {
2415+enabledByDefault: true,
2416+providers: ["unscoped-provider"],
2417+});
2418+process.env.OPENCLAW_BUNDLED_PLUGINS_DIR = bundledDir;
2419+delete process.env.OPENCLAW_DISABLE_BUNDLED_PLUGINS;
2420+23652421const scoped = loadOpenClawPlugins({
23662422cache: false,
23672423activate: false,
2368-pluginSdkResolution: "dist",
23692424config: {
23702425plugins: {
23712426enabled: true,
2372-allow: ["deepseek"],
2427+allow: ["scoped-provider", "unscoped-provider"],
23732428},
23742429},
2375-onlyPluginIds: ["deepseek"],
2430+onlyPluginIds: ["scoped-provider"],
23762431});
237724322378-expect(scoped.plugins.map((entry) => entry.id)).toEqual(["deepseek"]);
2433+expect(scoped.plugins.map((entry) => entry.id)).toEqual(["scoped-provider"]);
23792434expect(scoped.plugins[0]?.status).toBe("loaded");
2380-expect(scoped.providers.map((entry) => entry.provider.id)).toEqual(["deepseek"]);
2435+expect(scoped.providers.map((entry) => entry.provider.id)).toEqual(["scoped-provider"]);
23812436});
2382243723832438it("does not replace active memory plugin registries during non-activating loads", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。