aboutsummaryrefslogtreecommitdiffstats
path: root/src/main/ipc/handlers.ts
diff options
context:
space:
mode:
authorbndw <ben@bdw.to>2026-02-28 21:08:40 -0800
committerbndw <ben@bdw.to>2026-02-28 21:08:40 -0800
commit04c63d4ef601876186e5d7fab980d76575c494ec (patch)
tree2620784e148957ae2ee3af0327c2b128983577e7 /src/main/ipc/handlers.ts
parent0da42e4fa414ab3268d4f71896455097239f8590 (diff)
feat: **1. `src/main/db/schema.ts`** — add `settings` table … (+10 more)
- ✅ **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 `<SettingsPage>`; pass `onOpenSettings` to Header
Diffstat (limited to 'src/main/ipc/handlers.ts')
-rw-r--r--src/main/ipc/handlers.ts20
1 files changed, 20 insertions, 0 deletions
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";
2import * as projects from "../db/projects"; 2import * as projects from "../db/projects";
3import * as sessions from "../db/sessions"; 3import * as sessions from "../db/sessions";
4import * as claude from "../claude"; 4import * as claude from "../claude";
5import * as settingsDb from "../db/settings";
5import { createSessionBranch, ensureGitIgnore } from "../git"; 6import { createSessionBranch, ensureGitIgnore } from "../git";
6import type { UserPermissionMode } from "../claude/phases"; 7import type { UserPermissionMode } from "../claude/phases";
8import { getDefaultSystemPromptTemplate } from "../claude/phases";
7 9
8export function registerIpcHandlers(mainWindow: BrowserWindow): void { 10export function registerIpcHandlers(mainWindow: BrowserWindow): void {
9 // Projects 11 // Projects
@@ -155,6 +157,24 @@ export function registerIpcHandlers(mainWindow: BrowserWindow): void {
155 claude.writeClaudeMd(projectPath, content); 157 claude.writeClaudeMd(projectPath, content);
156 }); 158 });
157 159
160 // Settings
161 ipcMain.handle("settings:get", (_, keys: string[]) =>
162 settingsDb.getSettings(keys)
163 );
164 ipcMain.handle("settings:set", (_, key: string, value: string) =>
165 settingsDb.setSetting(key, value)
166 );
167 ipcMain.handle("settings:delete", (_, key: string) =>
168 settingsDb.deleteSetting(key)
169 );
170
171 // Returns default prompt text (with {{artifactDir}} placeholder) for all phases
172 ipcMain.handle("settings:getDefaultPrompts", () => ({
173 research: getDefaultSystemPromptTemplate("research"),
174 plan: getDefaultSystemPromptTemplate("plan"),
175 implement: getDefaultSystemPromptTemplate("implement"),
176 }));
177
158 // Dialogs 178 // Dialogs
159 ipcMain.handle("dialog:selectDirectory", async () => { 179 ipcMain.handle("dialog:selectDirectory", async () => {
160 const result = await dialog.showOpenDialog(mainWindow, { 180 const result = await dialog.showOpenDialog(mainWindow, {