import { describe, expect, it } from "vitest"; import { validateConfigObjectWithPlugins } from "./config.js"; describe("config hooks module paths", () => { const expectRejectedIssuePath = (config: Record, expectedPath: string) => { const res = validateConfigObjectWithPlugins(config); expect(res.ok).toBe(false); if (res.ok) { throw new Error("expected validation failure"); } expect(res.issues.some((iss) => iss.path === expectedPath)).toBe(true); }; it("rejects absolute hooks.mappings[].transform.module", () => { expectRejectedIssuePath( { agents: { list: [{ id: "pi" }] }, hooks: { mappings: [ { match: { path: "custom" }, action: "agent", transform: { module: "/tmp/transform.mjs" }, }, ], }, }, "hooks.mappings.0.transform.module", ); }); it("rejects escaping hooks.mappings[].transform.module", () => { expectRejectedIssuePath( { agents: { list: [{ id: "pi" }] }, hooks: { mappings: [ { match: { path: "custom" }, action: "agent", transform: { module: "../escape.mjs" }, }, ], }, }, "hooks.mappings.0.transform.module", ); }); it("rejects absolute hooks.internal.handlers[].module", () => { expectRejectedIssuePath( { agents: { list: [{ id: "pi" }] }, hooks: { internal: { enabled: true, handlers: [{ event: "command:new", module: "/tmp/handler.mjs" }], }, }, }, "hooks.internal.handlers.0.module", ); }); it("rejects escaping hooks.internal.handlers[].module", () => { expectRejectedIssuePath( { agents: { list: [{ id: "pi" }] }, hooks: { internal: { enabled: true, handlers: [{ event: "command:new", module: "../handler.mjs" }], }, }, }, "hooks.internal.handlers.0.module", ); }); });