"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.registerIpcHandlers = registerIpcHandlers; const electron_1 = require("electron"); const projects = __importStar(require("../db/projects")); const sessions = __importStar(require("../db/sessions")); const claude = __importStar(require("../claude")); function registerIpcHandlers(mainWindow) { // Projects electron_1.ipcMain.handle("projects:list", () => projects.listProjects()); electron_1.ipcMain.handle("projects:create", (_, name, path) => projects.createProject(name, path)); electron_1.ipcMain.handle("projects:delete", (_, id) => projects.deleteProject(id)); // Sessions electron_1.ipcMain.handle("sessions:list", (_, projectId) => sessions.listSessions(projectId)); electron_1.ipcMain.handle("sessions:create", (_, projectId, name) => sessions.createSession(projectId, name)); electron_1.ipcMain.handle("sessions:delete", (_, id) => sessions.deleteSession(id)); electron_1.ipcMain.handle("sessions:get", (_, id) => sessions.getSession(id)); // Messages electron_1.ipcMain.handle("messages:list", (_, sessionId) => sessions.listMessages(sessionId)); // Chat electron_1.ipcMain.handle("chat:send", async (_, sessionId, message) => { const session = sessions.getSession(sessionId); if (!session) throw new Error("Session not found"); // Store user message sessions.addMessage(sessionId, "user", message); await claude.sendMessage({ session, message, onMessage: (msg) => { // Forward all messages to renderer mainWindow.webContents.send("claude:message", sessionId, msg); // Store assistant text messages if (msg.type === "assistant") { const content = msg.message.content .filter((c) => c.type === "text" && c.text) .map((c) => c.text) .join("\n"); if (content) { sessions.addMessage(sessionId, "assistant", content); } } }, }); }); electron_1.ipcMain.handle("chat:interrupt", (_, sessionId) => { claude.interruptSession(sessionId); }); // Workflow electron_1.ipcMain.handle("workflow:review", async (_, sessionId) => { const session = sessions.getSession(sessionId); if (!session) throw new Error("Session not found"); await claude.triggerReview(session, (msg) => { mainWindow.webContents.send("claude:message", sessionId, msg); }); }); electron_1.ipcMain.handle("workflow:advance", (_, sessionId) => { const session = sessions.getSession(sessionId); if (!session) throw new Error("Session not found"); return claude.advancePhase(session); }); electron_1.ipcMain.handle("workflow:setPermissionMode", (_, sessionId, mode) => { sessions.updateSession(sessionId, { permission_mode: mode, }); }); // Artifacts electron_1.ipcMain.handle("artifact:read", (_, projectPath, filename) => { return claude.readArtifact(projectPath, filename); }); electron_1.ipcMain.handle("artifact:write", (_, projectPath, filename, content) => { claude.writeArtifact(projectPath, filename, content); }); // Dialogs electron_1.ipcMain.handle("dialog:selectDirectory", async () => { const result = await electron_1.dialog.showOpenDialog(mainWindow, { properties: ["openDirectory"], }); return result.canceled ? null : result.filePaths[0]; }); }