evOo-local/packages/adapters/src/background-job-handlers.test.ts
cynarAI 6c7eed7580 Initial clean evOo-local from f00577b
Fresh history cut from cynarAI/evoo antigravity-handoff/project-timeline
(Voice First + project timeline). Brand docs/titles as evOo; keep @rakazo/*
packages as tech debt. Excludes node_modules, caches, secrets, voice blobs.
2026-09-20 17:15:16 +02:00

152 lines
5.4 KiB
TypeScript

import type {
AgentHomeStore,
AgentRuntime,
JobPublisher,
MessagingSurface,
SandboxProvider,
} from "@rakazo/adapter-kit";
import type { PrismaClient, ThreadEvents } from "@rakazo/db";
import { createLogger, createTestSink, installLogger } from "@rakazo/logging";
import { describe, expect, it, vi } from "vitest";
import { createBackgroundJobHandlers } from "./background-job-handlers.js";
import { createRunExecutor } from "./executor.js";
import { compactHistory } from "./history-compaction.js";
import { deliverMessagingOutbound, mirrorMessagingOutbound } from "./messaging-delivery.js";
import type { EncryptedSecretStore } from "./secrets.js";
vi.mock("./history-compaction.js", () => ({ compactHistory: vi.fn(async () => undefined) }));
vi.mock("./messaging-delivery.js", () => ({
deliverMessagingOutbound: vi.fn(async () => undefined),
mirrorMessagingOutbound: vi.fn(async () => undefined),
}));
describe("createBackgroundJobHandlers", () => {
it("delivers directly when shutdown rejects a completed run's mirror job", async () => {
const enqueueError = new Error("Background job publisher is closing");
const jobs = {
enqueue: vi.fn(async () => {
throw enqueueError;
}),
} as unknown as JobPublisher;
const sink = createTestSink();
installLogger(createLogger({ service: "rakazo-worker", sinks: [sink] }));
const handlers = createBackgroundJobHandlers({
executor: {
continueRun: vi.fn(async () => undefined),
} as unknown as ReturnType<typeof createRunExecutor>,
prisma: {} as unknown as PrismaClient,
sandbox: {} as unknown as SandboxProvider,
home: {} as unknown as AgentHomeStore,
jobs,
events: {} as unknown as ThreadEvents,
workerId: "worker-1",
runtime: {} as unknown as AgentRuntime,
secretStore: {} as unknown as EncryptedSecretStore,
memoryProviders: { resolve: vi.fn(async () => null) },
messaging: {} as unknown as MessagingSurface,
});
await handlers["run.continue"]({ runId: "run-1" });
expect(mirrorMessagingOutbound).toHaveBeenCalledWith(
expect.objectContaining({ prisma: expect.anything(), messaging: expect.anything(), jobs }),
"run-1",
);
expect(deliverMessagingOutbound).toHaveBeenCalledWith(
expect.objectContaining({ prisma: expect.anything(), messaging: expect.anything(), jobs }),
{ runId: undefined },
expect.objectContaining({ operationId: "messaging.deliver:drain" }),
);
expect(sink.events.some((event) => event.message === "messaging.deliver enqueue error")).toBe(
true,
);
installLogger(createLogger({ service: "rakazo-worker", level: "off", sinks: [] }));
});
it("compacts the requested thread with the runtime, job publisher, and model key it was given", async () => {
const prisma = {} as unknown as PrismaClient;
const runtime = {} as unknown as AgentRuntime;
const jobs = {} as unknown as JobPublisher;
const secretStore = {} as unknown as EncryptedSecretStore;
const memoryProviders = { resolve: vi.fn(async () => null) };
const resolveModel = vi.fn();
const handlers = createBackgroundJobHandlers({
executor: { resolveModel } as unknown as ReturnType<typeof createRunExecutor>,
prisma,
sandbox: {} as unknown as SandboxProvider,
home: {} as unknown as AgentHomeStore,
jobs,
events: {} as unknown as ThreadEvents,
workerId: "worker-1",
runtime,
secretStore,
memoryProviders,
deploymentModelKey: "openrouter-key",
});
await handlers["history.compact"]({ threadId: "thread-1" });
expect(compactHistory).toHaveBeenCalledWith(
{
prisma,
runtime,
jobs,
memoryProviders,
deploymentModelKey: "openrouter-key",
resolveModel,
},
"thread-1",
);
});
it("resolves the deployment model when no user credential is configured", async () => {
const prisma = {
spaceModelPreference: { findFirst: vi.fn(async () => null) },
userModelCredential: { findFirst: vi.fn(async () => null) },
deploymentSettings: { findUnique: vi.fn(async () => null) },
} as unknown as PrismaClient;
const executor = createRunExecutor({
prisma,
deploymentModelKey: "deployment-key",
} as Parameters<typeof createRunExecutor>[0]);
await expect(
executor.resolveModel({ userId: "user-1", spaceId: "workspace-1" }),
).resolves.toEqual({
provider: "openrouter",
id: "openai/gpt-5.6-luna",
apiKey: "deployment-key",
baseUrl: undefined,
thinkingLevel: null,
oauth: undefined,
});
});
it("preserves a configured local model when resolving background compaction", async () => {
const prisma = {
spaceModelPreference: { findFirst: vi.fn(async () => null) },
userModelCredential: { findFirst: vi.fn(async () => null) },
deploymentSettings: {
findUnique: vi.fn(async () => ({
defaultModelProvider: "local",
defaultModelId: "qwen3:4b",
})),
},
} as unknown as PrismaClient;
const executor = createRunExecutor({
prisma,
} as Parameters<typeof createRunExecutor>[0]);
await expect(
executor.resolveModel({ userId: "user-1", spaceId: "workspace-1" }),
).resolves.toEqual({
provider: "local",
id: "qwen3:4b",
apiKey: undefined,
baseUrl: undefined,
thinkingLevel: null,
oauth: undefined,
});
});
});