| import { tmpdir } from "node:os"; |
| import path from "node:path"; |
| import { describe, expect, it, vi } from "vitest"; |
| import { loadConfig, validateConfigObject } from "./config.js"; |
| import { withTempHomeConfig } from "./test-helpers.js"; |
|
|
| describe("multi-agent agentDir validation", () => { |
| it("rejects shared agents.list agentDir", async () => { |
| const shared = path.join(tmpdir(), "openclaw-shared-agentdir"); |
| const res = validateConfigObject({ |
| agents: { |
| list: [ |
| { id: "a", agentDir: shared }, |
| { id: "b", agentDir: shared }, |
| ], |
| }, |
| }); |
| expect(res.ok).toBe(false); |
| if (!res.ok) { |
| expect(res.issues.some((i) => i.path === "agents.list")).toBe(true); |
| expect(res.issues[0]?.message).toContain("Duplicate agentDir"); |
| } |
| }); |
|
|
| it("throws on shared agentDir during loadConfig()", async () => { |
| await withTempHomeConfig( |
| { |
| agents: { |
| list: [ |
| { id: "a", agentDir: "~/.openclaw/agents/shared/agent" }, |
| { id: "b", agentDir: "~/.openclaw/agents/shared/agent" }, |
| ], |
| }, |
| bindings: [{ agentId: "a", match: { channel: "telegram" } }], |
| }, |
| async () => { |
| const spy = vi.spyOn(console, "error").mockImplementation(() => {}); |
| expect(() => loadConfig()).toThrow(/duplicate agentDir/i); |
| expect(spy.mock.calls.flat().join(" ")).toMatch(/Duplicate agentDir/i); |
| spy.mockRestore(); |
| }, |
| ); |
| }); |
| }); |
|
|