import type { AgentTool, AgentToolResult } from "@mariozechner/pi-agent-core"; import { describe, expect, it } from "vitest"; import { filterToolsByPolicy, isToolAllowedByPolicyName } from "./pi-tools.policy.js"; function createStubTool(name: string): AgentTool { return { name, label: name, description: "", parameters: {}, execute: async () => ({}) as AgentToolResult, }; } describe("pi-tools.policy", () => { it("treats * in allow as allow-all", () => { const tools = [createStubTool("read"), createStubTool("exec")]; const filtered = filterToolsByPolicy(tools, { allow: ["*"] }); expect(filtered.map((tool) => tool.name)).toEqual(["read", "exec"]); }); it("treats * in deny as deny-all", () => { const tools = [createStubTool("read"), createStubTool("exec")]; const filtered = filterToolsByPolicy(tools, { deny: ["*"] }); expect(filtered).toEqual([]); }); it("supports wildcard allow/deny patterns", () => { expect(isToolAllowedByPolicyName("web_fetch", { allow: ["web_*"] })).toBe(true); expect(isToolAllowedByPolicyName("web_search", { deny: ["web_*"] })).toBe(false); }); it("keeps apply_patch when exec is allowlisted", () => { expect(isToolAllowedByPolicyName("apply_patch", { allow: ["exec"] })).toBe(true); }); });