AkurAI Build
Menu

popagent

public

Latest change 4565eb356975518dfc0202eab29b56dff51e8f71 - add deterministic agent health validation by AkurAI Build

import { describe, expect, test } from "bun:test";
import type { AgentSettings, AgentSkill } from "./api-types";
import { validateAgentHealth } from "./agent-health";

const agent = (overrides: Partial<AgentSettings> = {}): AgentSettings => ({
  id: "researcher",
  name: "Researcher",
  description: "Researches evidence",
  instructions: "# Role: Researcher",
  model: "codex/gpt-5.6-luna-medium",
  workspaceAccess: "read-only",
  browserAccess: "read-only",
  delegationEnabled: false,
  tools: ["webSearch"],
  sourceUrls: ["https://example.com"],
  createdAt: "2026-08-16T00:00:00Z",
  updatedAt: "2026-08-16T00:00:00Z",
  ...overrides,
});

const skill = (overrides: Partial<AgentSkill> = {}): AgentSkill => ({
  id: "skill-1",
  agentId: "researcher",
  name: "source-research",
  description: "Research primary sources",
  instructions: "Read primary sources and cite evidence.",
  references: {},
  sourceUrls: [],
  enabled: true,
  userInvocable: false,
  evolutionManaged: false,
  createdAt: "2026-08-16T00:00:00Z",
  updatedAt: "2026-08-16T00:00:00Z",
  ...overrides,
});

describe("validateAgentHealth", () => {
  test("reports deterministic configuration errors and bloat warnings", () => {
    const duplicated = skill({ id: "skill-2" });
    const report = validateAgentHealth(
      [agent({ tools: ["webSearch", "webSearch"] })],
      [skill(), duplicated, skill({ id: "skill-3", name: "researcher-practice", instructions: "Confirm ownership. Verify evidence." })],
    );

    expect(report.summary).toEqual({ agents: 1, skills: 3, errors: 2, warnings: 1 });
    expect(report.findings.map(({ code }) => code)).toEqual([
      "duplicate-agent-tool",
      "duplicate-skill-name",
      "generic-practice-skill",
    ]);
  });

  test("accepts a narrow healthy profile", () => {
    expect(validateAgentHealth([agent()], [skill()])).toMatchObject({
      status: "ok",
      summary: { agents: 1, skills: 1, errors: 0, warnings: 0 },
      findings: [],
    });
  });
});