From 996a3f89d5f3835009236782f2b3a93409b090cf Mon Sep 17 00:00:00 2001 From: Tyler <109685178+tlongwell-block@users.noreply.github.com> Date: Thu, 25 Jun 2026 10:05:41 -0400 Subject: [PATCH] fix(desktop): allow saving personas with an empty system prompt (#1276) Signed-off-by: Tyler Longwell Co-authored-by: npub1qyvc0c5kl4gqv2fd97fsk46tu378sqgy35vc83rvgfwne90sel7s0ed67d <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Tyler Longwell --- desktop/src-tauri/src/commands/personas.rs | 6 ++-- .../src/features/agents/ui/PersonaDialog.tsx | 7 ++-- .../agents/ui/personaDialogState.test.mjs | 32 +++++++++++++++++++ .../features/agents/ui/personaDialogState.ts | 14 ++++++++ 4 files changed, 51 insertions(+), 8 deletions(-) diff --git a/desktop/src-tauri/src/commands/personas.rs b/desktop/src-tauri/src/commands/personas.rs index 8dc77eaa5..562112427 100644 --- a/desktop/src-tauri/src/commands/personas.rs +++ b/desktop/src-tauri/src/commands/personas.rs @@ -167,13 +167,13 @@ pub fn create_persona( state: State<'_, AppState>, ) -> Result { let display_name = trim_required(&input.display_name, "Display name")?; - let system_prompt = trim_required(&input.system_prompt, "System prompt")?; + // System prompt optional: core memory is auto-injected. Empty is valid. + let system_prompt = input.system_prompt.trim().to_string(); let avatar_url = trim_optional(input.avatar_url); let runtime = trim_optional(input.runtime); let model = trim_optional(input.model); let provider = trim_optional(input.provider); let now = now_iso(); - let _store_guard = state .managed_agents_store_lock .lock() @@ -217,7 +217,7 @@ pub fn update_persona( state: State<'_, AppState>, ) -> Result { let display_name = trim_required(&input.display_name, "Display name")?; - let system_prompt = trim_required(&input.system_prompt, "System prompt")?; + let system_prompt = input.system_prompt.trim().to_string(); let avatar_url = trim_optional(input.avatar_url); let runtime = trim_optional(input.runtime); let model = trim_optional(input.model); diff --git a/desktop/src/features/agents/ui/PersonaDialog.tsx b/desktop/src/features/agents/ui/PersonaDialog.tsx index e2e42a14a..df6d3fcce 100644 --- a/desktop/src/features/agents/ui/PersonaDialog.tsx +++ b/desktop/src/features/agents/ui/PersonaDialog.tsx @@ -25,6 +25,7 @@ import { getImportErrorLabel, IMPORT_ERROR_VISIBILITY_MS, } from "./personaDialogImportState"; +import { canSubmitPersonaDialog } from "./personaDialogState"; type PersonaDialogProps = { open: boolean; @@ -519,11 +520,7 @@ export function PersonaDialog({ Cancel