diff --git a/src/main/AryxAppService.ts b/src/main/AryxAppService.ts index 69ec61e..bed3c93 100644 --- a/src/main/AryxAppService.ts +++ b/src/main/AryxAppService.ts @@ -710,13 +710,15 @@ export class AryxAppService extends EventEmitter { } async deletePattern(patternId: string): Promise { - if (isBuiltinPattern(patternId)) { - throw new Error('Built-in patterns cannot be deleted.'); - } - const workspace = await this.loadWorkspace(); workspace.patterns = workspace.patterns.filter((pattern) => pattern.id !== patternId); + if (isBuiltinPattern(patternId)) { + const deletedIds = new Set(workspace.deletedBuiltinPatternIds ?? []); + deletedIds.add(patternId); + workspace.deletedBuiltinPatternIds = [...deletedIds]; + } + if (workspace.selectedPatternId === patternId) { workspace.selectedPatternId = workspace.patterns[0]?.id; } diff --git a/src/main/persistence/workspaceRepository.ts b/src/main/persistence/workspaceRepository.ts index 7ef5f36..624a222 100644 --- a/src/main/persistence/workspaceRepository.ts +++ b/src/main/persistence/workspaceRepository.ts @@ -30,13 +30,16 @@ import { } from '@main/persistence/appPaths'; import { readJsonFile, writeJsonFile } from '@main/persistence/jsonStore'; -function mergePatterns(existingPatterns: PatternDefinition[]): PatternDefinition[] { +function mergePatterns(existingPatterns: PatternDefinition[], deletedBuiltinIds: string[]): PatternDefinition[] { const builtinTimestamp = nowIso(); const builtinPatterns = createBuiltinPatterns(builtinTimestamp); const builtinIds = new Set(builtinPatterns.map((pattern) => pattern.id)); + const deletedSet = new Set(deletedBuiltinIds); const existingMap = new Map(existingPatterns.map((pattern) => [pattern.id, pattern])); - const mergedBuiltins = builtinPatterns.map((builtin) => { + const mergedBuiltins = builtinPatterns + .filter((builtin) => !deletedSet.has(builtin.id)) + .map((builtin) => { const existing = existingMap.get(builtin.id); if (!existing) { return builtin; @@ -108,9 +111,11 @@ export class WorkspaceRepository { })); const settings = normalizeWorkspaceSettings(stored.settings); + const deletedBuiltinPatternIds = stored.deletedBuiltinPatternIds ?? []; + const workspace: WorkspaceState = { ...stored, - patterns: mergePatterns(stored.patterns ?? []).map((pattern) => ({ + patterns: mergePatterns(stored.patterns ?? [], deletedBuiltinPatternIds).map((pattern) => ({ ...pattern, approvalPolicy: applyDefaultToolApprovalPolicy(pattern.approvalPolicy), graph: resolvePatternGraph(pattern), @@ -118,6 +123,7 @@ export class WorkspaceRepository { projects, sessions, settings, + deletedBuiltinPatternIds, selectedProjectId: projects.some((project) => project.id === stored.selectedProjectId) ? stored.selectedProjectId : projects[0]?.id, diff --git a/src/renderer/components/PatternEditor.tsx b/src/renderer/components/PatternEditor.tsx index 6602191..0f43b7c 100644 --- a/src/renderer/components/PatternEditor.tsx +++ b/src/renderer/components/PatternEditor.tsx @@ -311,7 +311,7 @@ export function PatternEditor({
- {!isBuiltin && onDelete && ( + {onDelete && (