diff --git a/src/auto-reply/reply/get-reply.ts b/src/auto-reply/reply/get-reply.ts index e9903fdf1..20887c340 100644 --- a/src/auto-reply/reply/get-reply.ts +++ b/src/auto-reply/reply/get-reply.ts @@ -28,6 +28,7 @@ export async function getReplyFromConfig( opts?: GetReplyOptions, configOverride?: ClawdbotConfig, ): Promise { + const isFastTestEnv = process.env.CLAWDBOT_TEST_FAST === "1"; const cfg = configOverride ?? loadConfig(); const targetSessionKey = ctx.CommandSource === "native" ? ctx.CommandTargetSessionKey?.trim() : undefined; @@ -62,7 +63,7 @@ export async function getReplyFromConfig( const workspaceDirRaw = resolveAgentWorkspaceDir(cfg, agentId) ?? DEFAULT_AGENT_WORKSPACE_DIR; const workspace = await ensureAgentWorkspace({ dir: workspaceDirRaw, - ensureBootstrapFiles: !agentCfg?.skipBootstrap, + ensureBootstrapFiles: !agentCfg?.skipBootstrap && !isFastTestEnv, }); const workspaceDir = workspace.dir; const agentDir = resolveAgentDir(cfg, agentId); @@ -81,12 +82,14 @@ export async function getReplyFromConfig( const finalized = finalizeInboundContext(ctx); - await applyMediaUnderstanding({ - ctx: finalized, - cfg, - agentDir, - activeModel: { provider, model }, - }); + if (!isFastTestEnv) { + await applyMediaUnderstanding({ + ctx: finalized, + cfg, + agentDir, + activeModel: { provider, model }, + }); + } const commandAuthorized = finalized.CommandAuthorized; resolveCommandAuthorization({ diff --git a/test/global-setup.ts b/test/global-setup.ts new file mode 100644 index 000000000..289fd877b --- /dev/null +++ b/test/global-setup.ts @@ -0,0 +1,6 @@ +import { installTestEnv } from "./test-env"; + +export default async () => { + const { cleanup } = installTestEnv(); + return () => cleanup(); +}; diff --git a/test/setup.ts b/test/setup.ts index 6c532b0c2..971fa4731 100644 --- a/test/setup.ts +++ b/test/setup.ts @@ -9,11 +9,6 @@ import type { ClawdbotConfig } from "../src/config/config.js"; import type { OutboundSendDeps } from "../src/infra/outbound/deliver.js"; import { setActivePluginRegistry } from "../src/plugins/runtime.js"; import { createTestRegistry } from "../src/test-utils/channel-plugins.js"; -import { installTestEnv } from "./test-env"; - -const { cleanup } = installTestEnv(); -process.on("exit", cleanup); - const pickSendFn = (id: ChannelId, deps?: OutboundSendDeps) => { switch (id) { case "discord": diff --git a/test/test-env.ts b/test/test-env.ts index deda32178..815fe93d7 100644 --- a/test/test-env.ts +++ b/test/test-env.ts @@ -54,6 +54,7 @@ export function installTestEnv(): { cleanup: () => void; tempHome: string } { } const restore: RestoreEntry[] = [ + { key: "CLAWDBOT_TEST_FAST", value: process.env.CLAWDBOT_TEST_FAST }, { key: "HOME", value: process.env.HOME }, { key: "USERPROFILE", value: process.env.USERPROFILE }, { key: "XDG_CONFIG_HOME", value: process.env.XDG_CONFIG_HOME }, @@ -84,6 +85,7 @@ export function installTestEnv(): { cleanup: () => void; tempHome: string } { process.env.HOME = tempHome; process.env.USERPROFILE = tempHome; process.env.CLAWDBOT_TEST_HOME = tempHome; + process.env.CLAWDBOT_TEST_FAST = "1"; // Ensure test runs never touch the developer's real config/state, even if they have overrides set. delete process.env.CLAWDBOT_CONFIG_PATH; diff --git a/vitest.config.ts b/vitest.config.ts index 6628e33f8..8a783236c 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -26,6 +26,7 @@ export default defineConfig({ "test/format-error.test.ts", ], setupFiles: ["test/setup.ts"], + globalSetup: ["test/global-setup.ts"], exclude: [ "dist/**", "apps/macos/**", @@ -34,6 +35,7 @@ export default defineConfig({ "**/vendor/**", "dist/Clawdbot.app/**", "**/*.live.test.ts", + "**/*.e2e.test.ts", ], coverage: { provider: "v8", diff --git a/vitest.e2e.config.ts b/vitest.e2e.config.ts index 3531e7fe5..a33d324bd 100644 --- a/vitest.e2e.config.ts +++ b/vitest.e2e.config.ts @@ -9,8 +9,9 @@ export default defineConfig({ test: { pool: "forks", maxWorkers: e2eWorkers, - include: ["test/**/*.e2e.test.ts"], + include: ["test/**/*.e2e.test.ts", "src/**/*.e2e.test.ts"], setupFiles: ["test/setup.ts"], + globalSetup: ["test/global-setup.ts"], exclude: [ "dist/**", "apps/macos/**",