From 04c63d4ef601876186e5d7fab980d76575c494ec Mon Sep 17 00:00:00 2001 From: bndw Date: Sat, 28 Feb 2026 21:08:40 -0800 Subject: feat: **1. `src/main/db/schema.ts`** — add `settings` table … (+10 more) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - ✅ **1. `src/main/db/schema.ts`** — add `settings` table to `initSchema` - ✅ **2. `src/main/db/settings.ts`** — create file with `getSetting`, `getSettings`, `setSetting`, `deleteSetting` - ✅ **3. `src/main/claude/phases.ts`** — add `customSystemPrompt?` param to `getPhaseConfig`; add `getDefaultSystemPromptTemplate` export - ✅ **4. `src/main/claude/index.ts`** — import `getSetting`; load custom prompt in `sendMessage`; pass to `getPhaseConfig` - ✅ **5. `src/main/ipc/handlers.ts`** — import `settingsDb` + `getDefaultSystemPromptTemplate`; register `settings:get`, `settings:set`, `settings:delete`, `settings:getDefaultPrompts` - ✅ **6. `src/main/preload.ts`** — add `getSettings`, `setSetting`, `deleteSetting`, `getDefaultSystemPrompts` to interface + api object - ✅ **7. `renderer/src/styles/globals.css`** — append all new CSS rules - ✅ **8. `renderer/src/components/settings/SystemPromptsSettings.tsx`** — create file (new directory) - ✅ **9. `renderer/src/components/SettingsPage.tsx`** — create file - ✅ **10. `renderer/src/components/Header.tsx`** — add `onOpenSettings` prop + ⚙ button - ✅ **11. `renderer/src/App.tsx`** — add `showSettings` state; import + render ``; pass `onOpenSettings` to Header --- src/main/ipc/handlers.ts | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/main/ipc/handlers.ts') diff --git a/src/main/ipc/handlers.ts b/src/main/ipc/handlers.ts index 774eb63..bc7d78d 100644 --- a/src/main/ipc/handlers.ts +++ b/src/main/ipc/handlers.ts @@ -2,8 +2,10 @@ import { ipcMain, dialog, type BrowserWindow } from "electron"; import * as projects from "../db/projects"; import * as sessions from "../db/sessions"; import * as claude from "../claude"; +import * as settingsDb from "../db/settings"; import { createSessionBranch, ensureGitIgnore } from "../git"; import type { UserPermissionMode } from "../claude/phases"; +import { getDefaultSystemPromptTemplate } from "../claude/phases"; export function registerIpcHandlers(mainWindow: BrowserWindow): void { // Projects @@ -155,6 +157,24 @@ export function registerIpcHandlers(mainWindow: BrowserWindow): void { claude.writeClaudeMd(projectPath, content); }); + // Settings + ipcMain.handle("settings:get", (_, keys: string[]) => + settingsDb.getSettings(keys) + ); + ipcMain.handle("settings:set", (_, key: string, value: string) => + settingsDb.setSetting(key, value) + ); + ipcMain.handle("settings:delete", (_, key: string) => + settingsDb.deleteSetting(key) + ); + + // Returns default prompt text (with {{artifactDir}} placeholder) for all phases + ipcMain.handle("settings:getDefaultPrompts", () => ({ + research: getDefaultSystemPromptTemplate("research"), + plan: getDefaultSystemPromptTemplate("plan"), + implement: getDefaultSystemPromptTemplate("implement"), + })); + // Dialogs ipcMain.handle("dialog:selectDirectory", async () => { const result = await dialog.showOpenDialog(mainWindow, { -- cgit v1.2.3