aboutsummaryrefslogtreecommitdiffstats
path: root/dist/main/ipc
diff options
context:
space:
mode:
authorClawd <ai@clawd.bot>2026-02-28 15:26:02 -0800
committerClawd <ai@clawd.bot>2026-02-28 15:26:02 -0800
commit519d6b850e07a0387511a8f024dc394250b1a241 (patch)
tree5ee0a1bbbd7410f93a770e8129c88e29b5a5e5fb /dist/main/ipc
parentbebbffa890c38f12f04b6fafad4c5c5e46e051a8 (diff)
Clear artifacts when creating new session
Each new session now starts with empty research.md and plan.md files, preventing stale content from previous sessions appearing.
Diffstat (limited to 'dist/main/ipc')
-rw-r--r--dist/main/ipc/handlers.js116
1 files changed, 116 insertions, 0 deletions
diff --git a/dist/main/ipc/handlers.js b/dist/main/ipc/handlers.js
new file mode 100644
index 0000000..c452cee
--- /dev/null
+++ b/dist/main/ipc/handlers.js
@@ -0,0 +1,116 @@
1"use strict";
2var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3 if (k2 === undefined) k2 = k;
4 var desc = Object.getOwnPropertyDescriptor(m, k);
5 if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6 desc = { enumerable: true, get: function() { return m[k]; } };
7 }
8 Object.defineProperty(o, k2, desc);
9}) : (function(o, m, k, k2) {
10 if (k2 === undefined) k2 = k;
11 o[k2] = m[k];
12}));
13var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14 Object.defineProperty(o, "default", { enumerable: true, value: v });
15}) : function(o, v) {
16 o["default"] = v;
17});
18var __importStar = (this && this.__importStar) || (function () {
19 var ownKeys = function(o) {
20 ownKeys = Object.getOwnPropertyNames || function (o) {
21 var ar = [];
22 for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23 return ar;
24 };
25 return ownKeys(o);
26 };
27 return function (mod) {
28 if (mod && mod.__esModule) return mod;
29 var result = {};
30 if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31 __setModuleDefault(result, mod);
32 return result;
33 };
34})();
35Object.defineProperty(exports, "__esModule", { value: true });
36exports.registerIpcHandlers = registerIpcHandlers;
37const electron_1 = require("electron");
38const projects = __importStar(require("../db/projects"));
39const sessions = __importStar(require("../db/sessions"));
40const claude = __importStar(require("../claude"));
41function registerIpcHandlers(mainWindow) {
42 // Projects
43 electron_1.ipcMain.handle("projects:list", () => projects.listProjects());
44 electron_1.ipcMain.handle("projects:create", (_, name, path) => projects.createProject(name, path));
45 electron_1.ipcMain.handle("projects:delete", (_, id) => projects.deleteProject(id));
46 // Sessions
47 electron_1.ipcMain.handle("sessions:list", (_, projectId) => sessions.listSessions(projectId));
48 electron_1.ipcMain.handle("sessions:create", (_, projectId, name) => sessions.createSession(projectId, name));
49 electron_1.ipcMain.handle("sessions:delete", (_, id) => sessions.deleteSession(id));
50 electron_1.ipcMain.handle("sessions:get", (_, id) => sessions.getSession(id));
51 // Messages
52 electron_1.ipcMain.handle("messages:list", (_, sessionId) => sessions.listMessages(sessionId));
53 // Chat
54 electron_1.ipcMain.handle("chat:send", async (_, sessionId, message) => {
55 const session = sessions.getSession(sessionId);
56 if (!session)
57 throw new Error("Session not found");
58 // Store user message
59 sessions.addMessage(sessionId, "user", message);
60 await claude.sendMessage({
61 session,
62 message,
63 onMessage: (msg) => {
64 // Forward all messages to renderer
65 mainWindow.webContents.send("claude:message", sessionId, msg);
66 // Store assistant text messages
67 if (msg.type === "assistant") {
68 const content = msg.message.content
69 .filter((c) => c.type === "text" && c.text)
70 .map((c) => c.text)
71 .join("\n");
72 if (content) {
73 sessions.addMessage(sessionId, "assistant", content);
74 }
75 }
76 },
77 });
78 });
79 electron_1.ipcMain.handle("chat:interrupt", (_, sessionId) => {
80 claude.interruptSession(sessionId);
81 });
82 // Workflow
83 electron_1.ipcMain.handle("workflow:review", async (_, sessionId) => {
84 const session = sessions.getSession(sessionId);
85 if (!session)
86 throw new Error("Session not found");
87 await claude.triggerReview(session, (msg) => {
88 mainWindow.webContents.send("claude:message", sessionId, msg);
89 });
90 });
91 electron_1.ipcMain.handle("workflow:advance", (_, sessionId) => {
92 const session = sessions.getSession(sessionId);
93 if (!session)
94 throw new Error("Session not found");
95 return claude.advancePhase(session);
96 });
97 electron_1.ipcMain.handle("workflow:setPermissionMode", (_, sessionId, mode) => {
98 sessions.updateSession(sessionId, {
99 permission_mode: mode,
100 });
101 });
102 // Artifacts
103 electron_1.ipcMain.handle("artifact:read", (_, projectPath, filename) => {
104 return claude.readArtifact(projectPath, filename);
105 });
106 electron_1.ipcMain.handle("artifact:write", (_, projectPath, filename, content) => {
107 claude.writeArtifact(projectPath, filename, content);
108 });
109 // Dialogs
110 electron_1.ipcMain.handle("dialog:selectDirectory", async () => {
111 const result = await electron_1.dialog.showOpenDialog(mainWindow, {
112 properties: ["openDirectory"],
113 });
114 return result.canceled ? null : result.filePaths[0];
115 });
116}