// @vitest-environment jsdom import { createRoot, type Root } from "react-dom/client"; import { flushSync } from "react-dom"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import type { Agent, Environment } from "@paperclipai/shared"; import { TooltipProvider } from "@/components/ui/tooltip"; import { AgentConfigForm } from "./AgentConfigForm"; import { defaultCreateValues } from "./agent-config-defaults"; const mockAgentsApi = vi.hoisted(() => ({ adapterModelProfiles: vi.fn(), adapterModels: vi.fn(), detectModel: vi.fn(), list: vi.fn(), testEnvironment: vi.fn(), })); const mockEnvironmentsApi = vi.hoisted(() => ({ list: vi.fn(), })); const mockInstanceSettingsApi = vi.hoisted(() => ({ get: vi.fn(), getExperimental: vi.fn(), getGeneral: vi.fn(), })); const mockSecretsApi = vi.hoisted(() => ({ list: vi.fn(), })); vi.mock("../api/agents", () => ({ agentsApi: mockAgentsApi, })); vi.mock("../api/environments", () => ({ environmentsApi: mockEnvironmentsApi, })); vi.mock("../api/instanceSettings", () => ({ instanceSettingsApi: mockInstanceSettingsApi, })); vi.mock("../api/secrets", () => ({ secretsApi: mockSecretsApi, })); vi.mock("../context/CompanyContext", () => ({ useCompany: () => ({ companies: [{ id: "company-1", name: "Paperclip" }], selectedCompanyId: "company-1", selectedCompany: { id: "company-1", name: "Paperclip" }, selectionSource: "bootstrap", loading: false, error: null, setSelectedCompanyId: vi.fn(), reloadCompanies: vi.fn(), createCompany: vi.fn(), }), })); vi.mock("../adapters", () => ({ getUIAdapter: (type: string) => ({ type, label: type === "hermes_gateway" ? "Hermes Gateway" : "Codex", ConfigFields: ({ adapterType, configurationSection, }: { adapterType: string; configurationSection?: "runtime" | "danger"; }) => adapterType === "hermes_gateway" ?
Hermes Gateway fields
:
{configurationSection ?? "runtime"} adapter fields
, buildAdapterConfig: (values: { model?: string }) => ({ model: values.model || undefined, }), parseStdoutLine: () => [], }), })); vi.mock("../adapters/use-adapter-capabilities", () => ({ useAdapterCapabilities: () => (adapterType: string) => adapterType === "hermes_gateway" ? { supportsInstructionsBundle: false, supportsSkills: false, supportsLocalAgentJwt: false, requiresMaterializedRuntimeSkills: false, supportsModelProfiles: false, supportsAcp: false, } : { supportsInstructionsBundle: true, supportsSkills: true, supportsLocalAgentJwt: true, requiresMaterializedRuntimeSkills: false, supportsModelProfiles: true, supportsAcp: true, }, })); vi.mock("../adapters/use-disabled-adapters", () => ({ useDisabledAdaptersSync: () => [], })); vi.mock("./MarkdownEditor", () => ({ MarkdownEditor: ({ value, onChange, placeholder, }: { value: string; onChange: (value: string) => void; placeholder?: string; }) => (