export interface AdapterDefaults { runtimeImage: string; envKeys: string[]; allowFqdns: string[]; probeCommand: string[]; } const REGISTRY: Record = { claude_local: { runtimeImage: "ghcr.io/paperclipai/agent-runtime-claude:v1", envKeys: ["ANTHROPIC_API_KEY"], allowFqdns: ["api.anthropic.com"], probeCommand: ["claude", "--version"], }, codex_local: { runtimeImage: "ghcr.io/paperclipai/agent-runtime-codex:v1", envKeys: ["OPENAI_API_KEY"], allowFqdns: ["api.openai.com"], probeCommand: ["codex", "--version"], }, gemini_local: { runtimeImage: "ghcr.io/paperclipai/agent-runtime-gemini:v1", envKeys: ["GOOGLE_API_KEY", "GEMINI_API_KEY"], allowFqdns: ["generativelanguage.googleapis.com"], probeCommand: ["gemini", "--version"], }, cursor_local: { runtimeImage: "ghcr.io/paperclipai/agent-runtime-cursor:v1", envKeys: ["ANTHROPIC_API_KEY", "OPENAI_API_KEY"], allowFqdns: ["api.anthropic.com", "api.openai.com"], probeCommand: ["cursor-agent", "--version"], }, opencode_local: { runtimeImage: "ghcr.io/paperclipai/agent-runtime-opencode:v1", envKeys: ["ANTHROPIC_API_KEY", "OPENAI_API_KEY", "OPENROUTER_API_KEY"], allowFqdns: ["api.anthropic.com", "api.openai.com", "openrouter.ai"], probeCommand: ["opencode", "--version"], }, acpx_local: { runtimeImage: "ghcr.io/paperclipai/agent-runtime-acpx:v1", envKeys: ["ANTHROPIC_API_KEY", "OPENAI_API_KEY"], allowFqdns: ["api.anthropic.com", "api.openai.com"], probeCommand: ["acpx", "--version"], }, pi_local: { runtimeImage: "ghcr.io/paperclipai/agent-runtime-pi:v1", envKeys: ["ANTHROPIC_API_KEY"], allowFqdns: ["api.anthropic.com"], probeCommand: ["pi", "--version"], }, }; export const KNOWN_ADAPTER_TYPES: ReadonlySet = new Set(Object.keys(REGISTRY)); export function getAdapterDefaults(adapterType: string): AdapterDefaults { const defaults = REGISTRY[adapterType]; if (!defaults) { throw new Error(`Unknown adapter type: ${adapterType}`); } return defaults; }