AkurAI Build
Menu

popagent

public

Latest change dc4b371554df3a78c40c29085ead1db3de7e24f8 - Add model routing policy, companyStatus tool, Markdown channel output, compact Runtime settings by AkurAI Build

import { describe, expect, test } from "bun:test";
import { createCompanyStatusTool } from "./company-status";
import type { AgentTask } from "../api-types";

const task = (overrides: Partial<AgentTask>): AgentTask => ({
  id: "t", sessionId: null, scheduleId: null, source: "user", workspaceId: "default", prompt: "Prepare report",
  model: "policy/routing", status: "completed", output: "## Report\n" + "x".repeat(600), error: null, stepsCompleted: 3,
  progress: "Completed", workflow: null, recoveryCount: 0, attemptCount: 1, maxAttempts: 3, nextAttemptAt: null,
  lastErrorClass: null, deadLetteredAt: null, heartbeatAt: null, createdAt: new Date(Date.now() - 3_600_000).toISOString(),
  startedAt: null, completedAt: new Date().toISOString(), activity: [], ...overrides,
} as AgentTask);

describe("companyStatus", () => {
  test("returns a bounded, grouped snapshot of tasks, attention, schedules, automation, and signals", async () => {
    const old = new Date(Date.now() - 72 * 3_600_000).toISOString();
    const tool = createCompanyStatusTool({
      workspaces: async () => [{ id: "default", name: "popagent", repositoryPath: "popagent", createdAt: "", updatedAt: "" }],
      tasks: async () => [
        task({ id: "done" }),
        task({ id: "stale", createdAt: old, completedAt: old }),
        task({ id: "dead", status: "dead-letter", error: "boom", lastErrorClass: "provider", createdAt: old, completedAt: old }),
        task({ id: "live", status: "running", createdAt: old, completedAt: null }),
      ],
      schedules: async () => [{ id: "s", sessionId: null, workspaceId: "default", source: "user", name: "Daily", prompt: "p", model: "policy/routing", maxAttempts: 3, cron: "0 10 * * *", timezone: "UTC", enabled: true, nextRunAt: null, lastRunAt: null, createdAt: "", updatedAt: "", latestTaskStatus: "completed" }],
      automation: async () => ({ state: "paused", selectedWorkspaceIds: [], activeTask: null }),
      signals: async () => [{ id: "sig", sessionId: null, turnId: null, traceId: null, agentId: "orchistrator", workspaceId: "default", kind: "turn-success", summary: "ok", status: "applied", attempts: 1, createdAt: new Date().toISOString() } as never],
    });
    const result = await tool.execute!({ sinceHours: 24, includeOutputs: true, maxTasks: 60 }, { abortSignal: AbortSignal.timeout(5_000) } as never) as unknown as {
      taskCounts: Record<string, number>; tasks: Array<{ id: string; output?: string }>; needsAttention: Array<{ id: string }>;
      schedules: Array<Record<string, unknown>>; automation: { state: string }; signals: unknown[]; truncated: boolean;
    };
    expect(result.taskCounts).toEqual({ completed: 1, running: 1 });
    expect(result.tasks.map((item) => item.id)).toEqual(["done", "live"]);
    expect(String(result.tasks[0]!.output)).toHaveLength(401);
    expect(result.needsAttention.map((item) => item.id)).toEqual(["dead"]);
    expect(result.schedules[0]).toMatchObject({ name: "Daily", latestTaskStatus: "completed" });
    expect(result.automation.state).toBe("paused");
    expect(result.signals).toHaveLength(1);
    expect(result.truncated).toBe(false);
  });
});