import fs from "node:fs/promises"; import path from "node:path"; import { describe, expect, it, vi } from "vitest"; import { DEFAULT_AGENT_MAX_CONCURRENT, DEFAULT_SUBAGENT_MAX_CONCURRENT, resolveAgentMaxConcurrent, resolveSubagentMaxConcurrent, } from "./agent-limits.js"; import { withTempHome } from "./test-helpers.js"; describe("agent concurrency defaults", () => { it("resolves defaults when unset", () => { expect(resolveAgentMaxConcurrent({})).toBe(DEFAULT_AGENT_MAX_CONCURRENT); expect(resolveSubagentMaxConcurrent({})).toBe(DEFAULT_SUBAGENT_MAX_CONCURRENT); }); it("resolves configured values", () => { const cfg = { agents: { defaults: { maxConcurrent: 6, subagents: { maxConcurrent: 9 }, }, }, }; expect(resolveAgentMaxConcurrent(cfg)).toBe(6); expect(resolveSubagentMaxConcurrent(cfg)).toBe(9); }); it("clamps invalid values to at least 1", () => { const cfg = { agents: { defaults: { maxConcurrent: 0, subagents: { maxConcurrent: -3 }, }, }, }; expect(resolveAgentMaxConcurrent(cfg)).toBe(1); expect(resolveSubagentMaxConcurrent(cfg)).toBe(1); }); it("injects defaults on load", async () => { await withTempHome(async (home) => { const configDir = path.join(home, ".clawdbot"); await fs.mkdir(configDir, { recursive: true }); await fs.writeFile( path.join(configDir, "clawdbot.json"), JSON.stringify({}, null, 2), "utf-8", ); vi.resetModules(); const { loadConfig } = await import("./config.js"); const cfg = loadConfig(); expect(cfg.agents?.defaults?.maxConcurrent).toBe(DEFAULT_AGENT_MAX_CONCURRENT); expect(cfg.agents?.defaults?.subagents?.maxConcurrent).toBe(DEFAULT_SUBAGENT_MAX_CONCURRENT); }); }); });