mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-08 23:18:28 +00:00
refactor(tools): share tool policy pipeline
This commit is contained in:
66
src/agents/tool-policy-pipeline.test.ts
Normal file
66
src/agents/tool-policy-pipeline.test.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
import { describe, expect, test } from "vitest";
|
||||
import { applyToolPolicyPipeline } from "./tool-policy-pipeline.js";
|
||||
|
||||
type DummyTool = { name: string };
|
||||
|
||||
describe("tool-policy-pipeline", () => {
|
||||
test("strips allowlists that would otherwise disable core tools", () => {
|
||||
const tools = [{ name: "exec" }, { name: "plugin_tool" }] as unknown as DummyTool[];
|
||||
const filtered = applyToolPolicyPipeline({
|
||||
// oxlint-disable-next-line typescript/no-explicit-any
|
||||
tools: tools as any,
|
||||
// oxlint-disable-next-line typescript/no-explicit-any
|
||||
toolMeta: (t: any) => (t.name === "plugin_tool" ? { pluginId: "foo" } : undefined),
|
||||
warn: () => {},
|
||||
steps: [
|
||||
{
|
||||
policy: { allow: ["plugin_tool"] },
|
||||
label: "tools.allow",
|
||||
stripPluginOnlyAllowlist: true,
|
||||
},
|
||||
],
|
||||
});
|
||||
const names = filtered.map((t) => (t as unknown as DummyTool).name).toSorted();
|
||||
expect(names).toEqual(["exec", "plugin_tool"]);
|
||||
});
|
||||
|
||||
test("warns about unknown allowlist entries", () => {
|
||||
const warnings: string[] = [];
|
||||
const tools = [{ name: "exec" }] as unknown as DummyTool[];
|
||||
applyToolPolicyPipeline({
|
||||
// oxlint-disable-next-line typescript/no-explicit-any
|
||||
tools: tools as any,
|
||||
// oxlint-disable-next-line typescript/no-explicit-any
|
||||
toolMeta: () => undefined,
|
||||
warn: (msg) => warnings.push(msg),
|
||||
steps: [
|
||||
{
|
||||
policy: { allow: ["wat"] },
|
||||
label: "tools.allow",
|
||||
stripPluginOnlyAllowlist: true,
|
||||
},
|
||||
],
|
||||
});
|
||||
expect(warnings.length).toBe(1);
|
||||
expect(warnings[0]).toContain("unknown entries (wat)");
|
||||
});
|
||||
|
||||
test("applies allowlist filtering when core tools are explicitly listed", () => {
|
||||
const tools = [{ name: "exec" }, { name: "process" }] as unknown as DummyTool[];
|
||||
const filtered = applyToolPolicyPipeline({
|
||||
// oxlint-disable-next-line typescript/no-explicit-any
|
||||
tools: tools as any,
|
||||
// oxlint-disable-next-line typescript/no-explicit-any
|
||||
toolMeta: () => undefined,
|
||||
warn: () => {},
|
||||
steps: [
|
||||
{
|
||||
policy: { allow: ["exec"] },
|
||||
label: "tools.allow",
|
||||
stripPluginOnlyAllowlist: true,
|
||||
},
|
||||
],
|
||||
});
|
||||
expect(filtered.map((t) => (t as unknown as DummyTool).name)).toEqual(["exec"]);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user