diff options
| author | bndw <ben@bdw.to> | 2026-02-28 21:08:40 -0800 |
|---|---|---|
| committer | bndw <ben@bdw.to> | 2026-02-28 21:08:40 -0800 |
| commit | 04c63d4ef601876186e5d7fab980d76575c494ec (patch) | |
| tree | 2620784e148957ae2ee3af0327c2b128983577e7 /src/main/ipc | |
| parent | 0da42e4fa414ab3268d4f71896455097239f8590 (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')
| -rw-r--r-- | src/main/ipc/handlers.ts | 20 |
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"; | |||
| 2 | import * as projects from "../db/projects"; | 2 | import * as projects from "../db/projects"; |
| 3 | import * as sessions from "../db/sessions"; | 3 | import * as sessions from "../db/sessions"; |
| 4 | import * as claude from "../claude"; | 4 | import * as claude from "../claude"; |
| 5 | import * as settingsDb from "../db/settings"; | ||
| 5 | import { createSessionBranch, ensureGitIgnore } from "../git"; | 6 | import { createSessionBranch, ensureGitIgnore } from "../git"; |
| 6 | import type { UserPermissionMode } from "../claude/phases"; | 7 | import type { UserPermissionMode } from "../claude/phases"; |
| 8 | import { getDefaultSystemPromptTemplate } from "../claude/phases"; | ||
| 7 | 9 | ||
| 8 | export function registerIpcHandlers(mainWindow: BrowserWindow): void { | 10 | export 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, { |
