From 1f406efcde8eb98b227788ed04ecd4685a4d0602 Mon Sep 17 00:00:00 2001 From: klopez4212 Date: Sun, 21 Jun 2026 10:56:56 +0100 Subject: [PATCH] Preserve provider in batch persona imports --- .../features/agents/ui/BatchImportDialog.tsx | 10 +--- .../ui/batchImportPersonaInput.test.mjs | 46 +++++++++++++++++++ .../agents/ui/batchImportPersonaInput.ts | 19 ++++++++ 3 files changed, 67 insertions(+), 8 deletions(-) create mode 100644 desktop/src/features/agents/ui/batchImportPersonaInput.test.mjs create mode 100644 desktop/src/features/agents/ui/batchImportPersonaInput.ts diff --git a/desktop/src/features/agents/ui/BatchImportDialog.tsx b/desktop/src/features/agents/ui/BatchImportDialog.tsx index 510b4ef40..5b2a0e612 100644 --- a/desktop/src/features/agents/ui/BatchImportDialog.tsx +++ b/desktop/src/features/agents/ui/BatchImportDialog.tsx @@ -19,6 +19,7 @@ import { DialogHeader, DialogTitle, } from "@/shared/ui/dialog"; +import { buildBatchImportPersonaInput } from "./batchImportPersonaInput"; type BatchImportDialogProps = { fileName: string; @@ -92,14 +93,7 @@ export function BatchImportDialog({ }); try { - const avatarUrl = resolveImportedPersonaAvatarUrl(persona); - await createPersona({ - displayName: persona.displayName, - avatarUrl: avatarUrl ?? undefined, - systemPrompt: persona.systemPrompt, - runtime: persona.runtime ?? undefined, - model: persona.model ?? undefined, - }); + await createPersona(buildBatchImportPersonaInput(persona)); completed += 1; setImportedCount(completed); setItemStatuses((prev) => { diff --git a/desktop/src/features/agents/ui/batchImportPersonaInput.test.mjs b/desktop/src/features/agents/ui/batchImportPersonaInput.test.mjs new file mode 100644 index 000000000..3ddd1679e --- /dev/null +++ b/desktop/src/features/agents/ui/batchImportPersonaInput.test.mjs @@ -0,0 +1,46 @@ +import assert from "node:assert/strict"; +import test from "node:test"; + +import { buildBatchImportPersonaInput } from "./batchImportPersonaInput.ts"; + +function persona(overrides = {}) { + return { + displayName: "Imported Agent", + avatarDataUrl: null, + avatarRef: null, + systemPrompt: "Use the imported provider.", + runtime: "goose", + model: "claude-sonnet-4", + provider: "anthropic", + namePool: [], + sourceFile: "agent.persona.md", + ...overrides, + }; +} + +test("buildBatchImportPersonaInput preserves provider from parsed personas", () => { + assert.deepEqual(buildBatchImportPersonaInput(persona()), { + displayName: "Imported Agent", + avatarUrl: undefined, + systemPrompt: "Use the imported provider.", + runtime: "goose", + model: "claude-sonnet-4", + provider: "anthropic", + namePool: undefined, + }); +}); + +test("buildBatchImportPersonaInput carries imported name pools", () => { + assert.deepEqual( + buildBatchImportPersonaInput(persona({ namePool: ["fizz", "buzz"] })), + { + displayName: "Imported Agent", + avatarUrl: undefined, + systemPrompt: "Use the imported provider.", + runtime: "goose", + model: "claude-sonnet-4", + provider: "anthropic", + namePool: ["fizz", "buzz"], + }, + ); +}); diff --git a/desktop/src/features/agents/ui/batchImportPersonaInput.ts b/desktop/src/features/agents/ui/batchImportPersonaInput.ts new file mode 100644 index 000000000..64e90b70b --- /dev/null +++ b/desktop/src/features/agents/ui/batchImportPersonaInput.ts @@ -0,0 +1,19 @@ +import type { ParsedPersonaPreview } from "@/shared/api/tauriPersonas"; +import type { CreatePersonaInput } from "@/shared/api/types"; +import { resolveImportedPersonaAvatarUrl } from "@/shared/avatars/gooseAppAvatarRefs"; + +export function buildBatchImportPersonaInput( + persona: ParsedPersonaPreview, +): CreatePersonaInput { + const avatarUrl = resolveImportedPersonaAvatarUrl(persona); + + return { + displayName: persona.displayName, + avatarUrl: avatarUrl ?? undefined, + systemPrompt: persona.systemPrompt, + runtime: persona.runtime ?? undefined, + model: persona.model ?? undefined, + provider: persona.provider ?? undefined, + namePool: persona.namePool.length > 0 ? persona.namePool : undefined, + }; +}