feat: add adapter picker for imported agents

When importing a company, users can now choose the adapter type for each
imported agent. Defaults to the current company CEO's adapter type (or
claude_local if none). Includes an expandable "configure adapter" section
per agent that renders the adapter-specific config fields.

- Added adapterOverrides to import request schema and types
- Built AdapterPickerList UI component in CompanyImport.tsx
- Backend applies adapter overrides when creating/updating agents

Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
Dotta
2026-03-16 10:28:44 -05:00
parent cf8bfe8d8e
commit 1548b73b77
6 changed files with 243 additions and 11 deletions

View File

@@ -2260,16 +2260,21 @@ export function companyPortabilityService(db: Db) {
warnings.push(`Missing AGENTS markdown for ${manifestAgent.slug}; imported without prompt template.`);
}
const markdown = markdownRaw ? parseFrontmatterMarkdown(markdownRaw) : { frontmatter: {}, body: "" };
const adapterConfig = {
...manifestAgent.adapterConfig,
promptTemplate: markdown.body || asString((manifestAgent.adapterConfig as Record<string, unknown>).promptTemplate) || "",
} as Record<string, unknown>;
const promptTemplate = markdown.body || asString((manifestAgent.adapterConfig as Record<string, unknown>).promptTemplate) || "";
// Apply adapter overrides from request if present
const adapterOverride = input.adapterOverrides?.[planAgent.slug];
const effectiveAdapterType = adapterOverride?.adapterType ?? manifestAgent.adapterType;
const baseAdapterConfig = adapterOverride?.adapterConfig
? { ...adapterOverride.adapterConfig, promptTemplate }
: { ...manifestAgent.adapterConfig, promptTemplate } as Record<string, unknown>;
const desiredSkills = manifestAgent.skills ?? [];
const adapterConfigWithSkills = writePaperclipSkillSyncPreference(
adapterConfig,
baseAdapterConfig,
desiredSkills,
);
delete adapterConfig.instructionsFilePath;
delete baseAdapterConfig.instructionsFilePath;
const patch = {
name: planAgent.plannedName,
role: manifestAgent.role,
@@ -2277,7 +2282,7 @@ export function companyPortabilityService(db: Db) {
icon: manifestAgent.icon,
capabilities: manifestAgent.capabilities,
reportsTo: null,
adapterType: manifestAgent.adapterType,
adapterType: effectiveAdapterType,
adapterConfig: adapterConfigWithSkills,
runtimeConfig: manifestAgent.runtimeConfig,
budgetMonthlyCents: manifestAgent.budgetMonthlyCents,