diff --git a/server/src/__tests__/built-in-agents.test.ts b/server/src/__tests__/built-in-agents.test.ts index 336bb207ac2..b206d5037bf 100644 --- a/server/src/__tests__/built-in-agents.test.ts +++ b/server/src/__tests__/built-in-agents.test.ts @@ -163,6 +163,13 @@ describeEmbeddedPostgres("built-in agents", () => { adapterConfig: { model: "gpt-5.4" }, }); + const reconciled = await svc.ensure(companyId, "briefs"); + expect(reconciled.status).toBe("ready"); + expect(reconciled.agent).toMatchObject({ + adapterType: "codex_local", + adapterConfig: { model: "gpt-5.4" }, + }); + const rows = await db.select().from(agents).where(eq(agents.companyId, companyId)); expect(rows).toHaveLength(1); }); diff --git a/server/src/services/built-in-agents.ts b/server/src/services/built-in-agents.ts index a530183a9f6..258d5f5aa65 100644 --- a/server/src/services/built-in-agents.ts +++ b/server/src/services/built-in-agents.ts @@ -1307,8 +1307,16 @@ export function builtInAgentService(db: Db) { async function ensure(companyId: string, key: string, input: BuiltInAgentProvisionInput = {}) { const definition = requireBuiltInAgentDefinition(key); await ensureCompany(companyId); - const resolvedInput = await defaultProvisionInput(companyId, definition, input); const existing = await findSingleAgent(companyId, definition); + const preserveExistingAdapter = Boolean( + existing + && input.adapterType === undefined + && input.adapterConfig === undefined + && hasCompleteAdapterConfig(existing.adapterType, existing.adapterConfig), + ); + const resolvedInput = preserveExistingAdapter + ? input + : await defaultProvisionInput(companyId, definition, input); if (existing) { const patch: Partial = { metadata: builtInMetadata(definition, existing.metadata),