From 76c3bb5fd9c30d11e9b4eb9023382b4cb331a9f8 Mon Sep 17 00:00:00 2001 From: Leonid <127580858+bashrusakh@users.noreply.github.com> Date: Sun, 12 Jul 2026 00:05:16 +1100 Subject: [PATCH] fix(agents): preserve YAML frontmatter fields when saving agent settings via UI (#2004) Co-authored-by: bashrusakh --- packages/ui/src/components/sections/agents/AgentsPage.tsx | 4 ++-- packages/vscode/src/opencodeConfig.ts | 3 +++ packages/web/server/lib/opencode/agents.js | 3 +++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/sections/agents/AgentsPage.tsx b/packages/ui/src/components/sections/agents/AgentsPage.tsx index 6db27c18..01c30f4b 100644 --- a/packages/ui/src/components/sections/agents/AgentsPage.tsx +++ b/packages/ui/src/components/sections/agents/AgentsPage.tsx @@ -624,7 +624,7 @@ export const AgentsPage: React.FC = () => { const permissionConfig = buildPermissionConfigWithGlobal(globalPermission, permissionRules); const config: AgentConfig = { name: agentName, - description: description.trim() || undefined, + ...(description.trim() ? { description: description.trim() } : {}), mode, model: trimmedModel === '' ? null : trimmedModel, variant: trimmedVariant === '' ? null : trimmedVariant || undefined, @@ -632,7 +632,7 @@ export const AgentsPage: React.FC = () => { top_p: topP ?? null, prompt: trimmedPrompt || (isNewAgent ? undefined : null), permission: permissionConfig, - scope: isNewAgent ? draftScope : undefined, + ...(isNewAgent && draftScope ? { scope: draftScope } : {}), }; let result: AgentMutationResult; diff --git a/packages/vscode/src/opencodeConfig.ts b/packages/vscode/src/opencodeConfig.ts index 8478e1ab..79a7455d 100644 --- a/packages/vscode/src/opencodeConfig.ts +++ b/packages/vscode/src/opencodeConfig.ts @@ -1666,6 +1666,9 @@ export const updateAgent = (agentName: string, updates: Record, const creatingNewMd = isBuiltinOverride; for (const [field, value] of Object.entries(updates || {})) { + // Skip undefined values — they would overwrite existing frontmatter fields with nothing + if (value === undefined) continue; + if (field === 'prompt') { if (value === null) { if (mdExists || creatingNewMd) { diff --git a/packages/web/server/lib/opencode/agents.js b/packages/web/server/lib/opencode/agents.js index d2acff89..9dd85052 100644 --- a/packages/web/server/lib/opencode/agents.js +++ b/packages/web/server/lib/opencode/agents.js @@ -451,6 +451,9 @@ function updateAgent(agentName, updates, workingDirectory) { const creatingNewMd = isBuiltinOverride; for (const [field, value] of Object.entries(updates)) { + // Skip undefined values — they would overwrite existing frontmatter fields with nothing + if (value === undefined) continue; + if (field === 'prompt') { if (value === null) { if (mdExists || creatingNewMd) {