

























@@ -10,6 +10,7 @@ import {
1010import "./test-helpers/fast-bash-tools.js";
1111import "./test-helpers/fast-coding-tools.js";
1212import "./test-helpers/fast-openclaw-tools.js";
13+import * as openClawPluginTools from "./openclaw-plugin-tools.js";
1314import { createOpenClawTools } from "./openclaw-tools.js";
1415import { createOpenClawCodingTools } from "./pi-tools.js";
1516import { createHostSandboxFsBridge } from "./test-helpers/host-sandbox-fs-bridge.js";
@@ -419,6 +420,40 @@ describe("createOpenClawCodingTools", () => {
419420expect(createOpenClawToolsMock).not.toHaveBeenCalled();
420421});
421422423+it("forwards active model metadata to plugin-only tool construction", () => {
424+const createOpenClawToolsMock = vi.mocked(createOpenClawTools);
425+createOpenClawToolsMock.mockClear();
426+const resolvePluginToolsSpy = vi
427+.spyOn(openClawPluginTools, "resolveOpenClawPluginToolsForOptions")
428+.mockReturnValue([]);
429+430+try {
431+createOpenClawCodingTools({
432+config: testConfig,
433+includeCoreTools: false,
434+runtimeToolAllowlist: ["memory_search"],
435+modelProvider: "openrouter",
436+modelId: "openrouter/auto",
437+toolConstructionPlan: {
438+includeBaseCodingTools: false,
439+includeShellTools: false,
440+includeChannelTools: false,
441+includeOpenClawTools: false,
442+includePluginTools: true,
443+},
444+});
445+446+expect(createOpenClawToolsMock).not.toHaveBeenCalled();
447+expect(resolvePluginToolsSpy).toHaveBeenCalledTimes(1);
448+expect(resolvePluginToolsSpy.mock.calls[0]?.[0].options).toMatchObject({
449+modelProvider: "openrouter",
450+modelId: "openrouter/auto",
451+});
452+} finally {
453+resolvePluginToolsSpy.mockRestore();
454+}
455+});
456+422457it("uses tools.alsoAllow for optional plugin discovery without widening to all plugins", () => {
423458const createOpenClawToolsMock = vi.mocked(createOpenClawTools);
424459createOpenClawToolsMock.mockClear();
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。