Spaces:
Sleeping
Sleeping
| 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, ".openclaw"); | |
| await fs.mkdir(configDir, { recursive: true }); | |
| await fs.writeFile( | |
| path.join(configDir, "openclaw.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); | |
| }); | |
| }); | |
| }); | |