From f64e4fd8cf3cd4f019cabb60d763656b8ff0a54a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Tue, 28 Apr 2026 02:58:16 +0100 Subject: [PATCH] test: split agents vitest shards --- scripts/lib/ci-node-test-plan.mjs | 7 ++++++- scripts/test-projects.mjs | 5 ++++- .../reply/commands-session-abort.test-support.ts | 10 +++++++--- .../reply/commands-status.thinking-default.test.ts | 12 ++++++++---- test/scripts/ci-node-test-plan.test.ts | 7 ++++++- test/scripts/test-projects.test.ts | 5 ++++- test/vitest-projects-config.test.ts | 8 ++++++++ test/vitest/vitest.agents-core.config.ts | 12 ++++++++++++ test/vitest/vitest.agents-paths.mjs | 14 ++++++++++++++ test/vitest/vitest.agents-pi-embedded.config.ts | 12 ++++++++++++ test/vitest/vitest.agents-support.config.ts | 13 +++++++++++++ test/vitest/vitest.agents-tools.config.ts | 12 ++++++++++++ test/vitest/vitest.agents.config.ts | 3 ++- test/vitest/vitest.config.ts | 5 ++++- test/vitest/vitest.scoped-config.ts | 4 ++++ test/vitest/vitest.shared.config.ts | 5 +++++ test/vitest/vitest.test-shards.mjs | 5 ++++- 17 files changed, 125 insertions(+), 14 deletions(-) create mode 100644 test/vitest/vitest.agents-core.config.ts create mode 100644 test/vitest/vitest.agents-paths.mjs create mode 100644 test/vitest/vitest.agents-pi-embedded.config.ts create mode 100644 test/vitest/vitest.agents-support.config.ts create mode 100644 test/vitest/vitest.agents-tools.config.ts diff --git a/scripts/lib/ci-node-test-plan.mjs b/scripts/lib/ci-node-test-plan.mjs index ac4ec15036c..c9cdd2e10d3 100644 --- a/scripts/lib/ci-node-test-plan.mjs +++ b/scripts/lib/ci-node-test-plan.mjs @@ -190,7 +190,12 @@ const SPLIT_NODE_SHARDS = new Map([ }, { shardName: "agentic-agents", - configs: ["test/vitest/vitest.agents.config.ts"], + configs: [ + "test/vitest/vitest.agents-core.config.ts", + "test/vitest/vitest.agents-pi-embedded.config.ts", + "test/vitest/vitest.agents-support.config.ts", + "test/vitest/vitest.agents-tools.config.ts", + ], requiresDist: false, }, { diff --git a/scripts/test-projects.mjs b/scripts/test-projects.mjs index 571df0a8743..4fdab27f432 100644 --- a/scripts/test-projects.mjs +++ b/scripts/test-projects.mjs @@ -45,7 +45,10 @@ const FULL_SUITE_CONFIG_WEIGHT = new Map([ ["test/vitest/vitest.gateway-client.config.ts", 178], ["test/vitest/vitest.gateway-methods.config.ts", 177], ["test/vitest/vitest.commands.config.ts", 175], - ["test/vitest/vitest.agents.config.ts", 170], + ["test/vitest/vitest.agents-core.config.ts", 170], + ["test/vitest/vitest.agents-pi-embedded.config.ts", 169], + ["test/vitest/vitest.agents-support.config.ts", 168], + ["test/vitest/vitest.agents-tools.config.ts", 167], ["test/vitest/vitest.extension-voice-call.config.ts", 169], ["test/vitest/vitest.extensions.config.ts", 168], ["test/vitest/vitest.extension-provider-openai.config.ts", 167], diff --git a/src/auto-reply/reply/commands-session-abort.test-support.ts b/src/auto-reply/reply/commands-session-abort.test-support.ts index 5e80f328e55..cd6315623bb 100644 --- a/src/auto-reply/reply/commands-session-abort.test-support.ts +++ b/src/auto-reply/reply/commands-session-abort.test-support.ts @@ -1,5 +1,9 @@ import { vi } from "vitest"; -vi.mock("./queue.js", () => ({ - clearSessionQueues: vi.fn(() => ({ followupCleared: 0, laneCleared: 0, keys: [] })), -})); +vi.mock("./queue.js", async () => { + const actual = await vi.importActual("./queue.js"); + return { + ...actual, + clearSessionQueues: vi.fn(() => ({ followupCleared: 0, laneCleared: 0, keys: [] })), + }; +}); diff --git a/src/auto-reply/reply/commands-status.thinking-default.test.ts b/src/auto-reply/reply/commands-status.thinking-default.test.ts index fa48344e754..841d5bd4480 100644 --- a/src/auto-reply/reply/commands-status.thinking-default.test.ts +++ b/src/auto-reply/reply/commands-status.thinking-default.test.ts @@ -26,10 +26,14 @@ vi.mock("../group-activation.js", () => ({ normalizeGroupActivation: (value: unknown) => value, })); -vi.mock("./queue.js", () => ({ - getFollowupQueueDepth: () => 0, - resolveQueueSettings: () => ({ mode: "interrupt" }), -})); +vi.mock("./queue.js", async () => { + const actual = await vi.importActual("./queue.js"); + return { + ...actual, + getFollowupQueueDepth: () => 0, + resolveQueueSettings: () => ({ mode: "interrupt" }), + }; +}); const { buildStatusReply } = await import("./commands-status.js"); diff --git a/test/scripts/ci-node-test-plan.test.ts b/test/scripts/ci-node-test-plan.test.ts index 61124be6790..7ad4a1851f2 100644 --- a/test/scripts/ci-node-test-plan.test.ts +++ b/test/scripts/ci-node-test-plan.test.ts @@ -171,7 +171,12 @@ describe("scripts/lib/ci-node-test-plan.mjs", () => { expect(agentShard).toEqual({ checkName: "checks-node-agentic-agents", shardName: "agentic-agents", - configs: ["test/vitest/vitest.agents.config.ts"], + configs: [ + "test/vitest/vitest.agents-core.config.ts", + "test/vitest/vitest.agents-pi-embedded.config.ts", + "test/vitest/vitest.agents-support.config.ts", + "test/vitest/vitest.agents-tools.config.ts", + ], requiresDist: false, }); expect(pluginSdkShard).toEqual({ diff --git a/test/scripts/test-projects.test.ts b/test/scripts/test-projects.test.ts index f4fe3b154fc..bda3ec850d9 100644 --- a/test/scripts/test-projects.test.ts +++ b/test/scripts/test-projects.test.ts @@ -1057,7 +1057,10 @@ describe("scripts/test-projects full-suite sharding", () => { "test/vitest/vitest.cli.config.ts", "test/vitest/vitest.commands-light.config.ts", "test/vitest/vitest.commands.config.ts", - "test/vitest/vitest.agents.config.ts", + "test/vitest/vitest.agents-core.config.ts", + "test/vitest/vitest.agents-pi-embedded.config.ts", + "test/vitest/vitest.agents-support.config.ts", + "test/vitest/vitest.agents-tools.config.ts", "test/vitest/vitest.daemon.config.ts", "test/vitest/vitest.plugin-sdk-light.config.ts", "test/vitest/vitest.plugin-sdk.config.ts", diff --git a/test/vitest-projects-config.test.ts b/test/vitest-projects-config.test.ts index d3d6a405e48..8910c1a89bb 100644 --- a/test/vitest-projects-config.test.ts +++ b/test/vitest-projects-config.test.ts @@ -1,6 +1,10 @@ import { afterEach, describe, expect, it } from "vitest"; import { createPatternFileHelper } from "./helpers/pattern-file.js"; import { normalizeConfigPath, normalizeConfigPaths } from "./helpers/vitest-config-paths.js"; +import { createAgentsCoreVitestConfig } from "./vitest/vitest.agents-core.config.ts"; +import { createAgentsPiEmbeddedVitestConfig } from "./vitest/vitest.agents-pi-embedded.config.ts"; +import { createAgentsSupportVitestConfig } from "./vitest/vitest.agents-support.config.ts"; +import { createAgentsToolsVitestConfig } from "./vitest/vitest.agents-tools.config.ts"; import { createAgentsVitestConfig } from "./vitest/vitest.agents.config.ts"; import bundledConfig from "./vitest/vitest.bundled.config.ts"; import { createCommandsLightVitestConfig } from "./vitest/vitest.commands-light.config.ts"; @@ -45,6 +49,10 @@ describe("projects vitest config", () => { it("keeps root projects on their expected pool defaults", () => { expect(createGatewayVitestConfig().test.pool).toBe("threads"); expect(createAgentsVitestConfig().test.pool).toBe("threads"); + expect(createAgentsCoreVitestConfig().test.pool).toBe("threads"); + expect(createAgentsPiEmbeddedVitestConfig().test.pool).toBe("threads"); + expect(createAgentsSupportVitestConfig().test.pool).toBe("threads"); + expect(createAgentsToolsVitestConfig().test.pool).toBe("threads"); expect(createCommandsLightVitestConfig().test.pool).toBe("threads"); expect(createCommandsVitestConfig().test.pool).toBe("threads"); expect(createPluginSdkLightVitestConfig().test.pool).toBe("threads"); diff --git a/test/vitest/vitest.agents-core.config.ts b/test/vitest/vitest.agents-core.config.ts new file mode 100644 index 00000000000..96edd9a9ced --- /dev/null +++ b/test/vitest/vitest.agents-core.config.ts @@ -0,0 +1,12 @@ +import { agentsCoreTestPatterns } from "./vitest.agents-paths.mjs"; +import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; + +export function createAgentsCoreVitestConfig(env?: Record) { + return createScopedVitestConfig(agentsCoreTestPatterns, { + dir: "src/agents", + env, + name: "agents-core", + }); +} + +export default createAgentsCoreVitestConfig(); diff --git a/test/vitest/vitest.agents-paths.mjs b/test/vitest/vitest.agents-paths.mjs new file mode 100644 index 00000000000..113ad2ee9ad --- /dev/null +++ b/test/vitest/vitest.agents-paths.mjs @@ -0,0 +1,14 @@ +export const agentsAllTestPatterns = ["src/agents/**/*.test.ts"]; + +export const agentsCoreTestPatterns = ["src/agents/*.test.ts"]; + +export const agentsPiEmbeddedTestPatterns = ["src/agents/pi-embedded-runner/**/*.test.ts"]; + +export const agentsToolsTestPatterns = ["src/agents/tools/**/*.test.ts"]; + +export const agentsSupportTestPatterns = ["src/agents/*/**/*.test.ts"]; + +export const agentsSupportExcludePatterns = [ + "src/agents/pi-embedded-runner/**", + "src/agents/tools/**", +]; diff --git a/test/vitest/vitest.agents-pi-embedded.config.ts b/test/vitest/vitest.agents-pi-embedded.config.ts new file mode 100644 index 00000000000..0738c1aeaf1 --- /dev/null +++ b/test/vitest/vitest.agents-pi-embedded.config.ts @@ -0,0 +1,12 @@ +import { agentsPiEmbeddedTestPatterns } from "./vitest.agents-paths.mjs"; +import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; + +export function createAgentsPiEmbeddedVitestConfig(env?: Record) { + return createScopedVitestConfig(agentsPiEmbeddedTestPatterns, { + dir: "src/agents", + env, + name: "agents-pi-embedded", + }); +} + +export default createAgentsPiEmbeddedVitestConfig(); diff --git a/test/vitest/vitest.agents-support.config.ts b/test/vitest/vitest.agents-support.config.ts new file mode 100644 index 00000000000..2e5fa363b79 --- /dev/null +++ b/test/vitest/vitest.agents-support.config.ts @@ -0,0 +1,13 @@ +import { agentsSupportExcludePatterns, agentsSupportTestPatterns } from "./vitest.agents-paths.mjs"; +import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; + +export function createAgentsSupportVitestConfig(env?: Record) { + return createScopedVitestConfig(agentsSupportTestPatterns, { + dir: "src/agents", + env, + exclude: agentsSupportExcludePatterns, + name: "agents-support", + }); +} + +export default createAgentsSupportVitestConfig(); diff --git a/test/vitest/vitest.agents-tools.config.ts b/test/vitest/vitest.agents-tools.config.ts new file mode 100644 index 00000000000..1d852040d49 --- /dev/null +++ b/test/vitest/vitest.agents-tools.config.ts @@ -0,0 +1,12 @@ +import { agentsToolsTestPatterns } from "./vitest.agents-paths.mjs"; +import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; + +export function createAgentsToolsVitestConfig(env?: Record) { + return createScopedVitestConfig(agentsToolsTestPatterns, { + dir: "src/agents", + env, + name: "agents-tools", + }); +} + +export default createAgentsToolsVitestConfig(); diff --git a/test/vitest/vitest.agents.config.ts b/test/vitest/vitest.agents.config.ts index 30a867c875e..b3e974571ec 100644 --- a/test/vitest/vitest.agents.config.ts +++ b/test/vitest/vitest.agents.config.ts @@ -1,7 +1,8 @@ +import { agentsAllTestPatterns } from "./vitest.agents-paths.mjs"; import { createScopedVitestConfig } from "./vitest.scoped-config.ts"; export function createAgentsVitestConfig(env?: Record) { - return createScopedVitestConfig(["src/agents/**/*.test.ts"], { + return createScopedVitestConfig(agentsAllTestPatterns, { dir: "src/agents", env, name: "agents", diff --git a/test/vitest/vitest.config.ts b/test/vitest/vitest.config.ts index dffe2ddb031..04d03d56f31 100644 --- a/test/vitest/vitest.config.ts +++ b/test/vitest/vitest.config.ts @@ -32,7 +32,10 @@ export const rootVitestProjects = [ "test/vitest/vitest.commands-light.config.ts", "test/vitest/vitest.commands.config.ts", "test/vitest/vitest.auto-reply.config.ts", - "test/vitest/vitest.agents.config.ts", + "test/vitest/vitest.agents-core.config.ts", + "test/vitest/vitest.agents-pi-embedded.config.ts", + "test/vitest/vitest.agents-support.config.ts", + "test/vitest/vitest.agents-tools.config.ts", "test/vitest/vitest.daemon.config.ts", "test/vitest/vitest.media.config.ts", "test/vitest/vitest.unit-fast.config.ts", diff --git a/test/vitest/vitest.scoped-config.ts b/test/vitest/vitest.scoped-config.ts index 93eeb9bcf9a..0b8dd0ed843 100644 --- a/test/vitest/vitest.scoped-config.ts +++ b/test/vitest/vitest.scoped-config.ts @@ -45,6 +45,10 @@ const SCOPED_PROJECT_GROUP_ORDER_BY_NAME = new Map( [ "acp", "agents", + "agents-core", + "agents-pi-embedded", + "agents-support", + "agents-tools", "auto-reply", "auto-reply-core", "auto-reply-reply", diff --git a/test/vitest/vitest.shared.config.ts b/test/vitest/vitest.shared.config.ts index e186781ccde..d1912929f73 100644 --- a/test/vitest/vitest.shared.config.ts +++ b/test/vitest/vitest.shared.config.ts @@ -168,6 +168,11 @@ export const sharedVitestConfig = { "test/setup.extensions.ts", "test/setup-openclaw-runtime.ts", "test/vitest/vitest.channel-paths.mjs", + "test/vitest/vitest.agents-paths.mjs", + "test/vitest/vitest.agents-core.config.ts", + "test/vitest/vitest.agents-pi-embedded.config.ts", + "test/vitest/vitest.agents-support.config.ts", + "test/vitest/vitest.agents-tools.config.ts", "test/vitest/vitest.channels.config.ts", "test/vitest/vitest.acp.config.ts", "test/vitest/vitest.boundary.config.ts", diff --git a/test/vitest/vitest.test-shards.mjs b/test/vitest/vitest.test-shards.mjs index 1255a81139a..7d6d47674cc 100644 --- a/test/vitest/vitest.test-shards.mjs +++ b/test/vitest/vitest.test-shards.mjs @@ -86,7 +86,10 @@ export const fullSuiteVitestShards = [ "test/vitest/vitest.cli.config.ts", "test/vitest/vitest.commands-light.config.ts", "test/vitest/vitest.commands.config.ts", - "test/vitest/vitest.agents.config.ts", + "test/vitest/vitest.agents-core.config.ts", + "test/vitest/vitest.agents-pi-embedded.config.ts", + "test/vitest/vitest.agents-support.config.ts", + "test/vitest/vitest.agents-tools.config.ts", "test/vitest/vitest.daemon.config.ts", "test/vitest/vitest.plugin-sdk-light.config.ts", "test/vitest/vitest.plugin-sdk.config.ts",