Built-in design generation now runs as an agentic MCP tool-loop (reusing the agent-rs BuiltInProvider), gated behind OPENPENCIL_DESIGN_AGENT_LOOP / the Settings experimental toggle; the orchestrator stays the default. - design-agent system prompt + in-process design toolset (parity-locked with the MCP surface) + flag-gated Intent::Design routing - spawn_agents execution as sequential sub-loops + live creation-mode badges (per-agent glow + 'N/M designing...' header) - new MCP tools: get_guidelines, ToolSearch, get_screenshot, get_editor_state, export_nodes, spawn_agents; style-guide local audit - #27 AI panel restyle: rounded tool cards + green check-rings, gray user bubbles, model-pill bottom toolbar, header, empty-state pills, the PARALLEL AGENTS (agent_team_size) 1x-6x chip dropdown - multi-chat tabs: ChatSessions model (Deref-to-active) + tab row UI (switch / close / + / Cmd+T) with each run bound to its tab Large checkpoint commit spanning the working tree (Rust shell crates).
2.1 KiB
2.1 KiB
Desktop App
Electron desktop app for macOS, Windows, and Linux.
Files
main.ts— Main process: window creation, Nitro server fork, preferences,.opfile association handling (open-fileevent on macOS, CLI args + single-instance lock on Windows/Linux)ipc-handlers.ts— IPC handler setup: native file dialogs (dialog:openFile,dialog:saveFile,dialog:saveToPath), theme sync for title bar overlay, renderer preferences (replaces origin-scoped localStorage), auto-updater IPCpreload.ts— Context bridge for renderer <-> main IPC (file dialogs, menu actions, updater state,onOpenFile/readFilefor file association)app-menu.ts— Native application menu configuration (File, Edit, View, Help)auto-updater.ts— Auto-updater: checks GitHub Releases on startup and periodicallyconstants.ts— Electron-specific constants (port, window dimensions, platform padding)logger.ts— Main process loggingdev.ts— Dev workflow: starts Vite -> waits for port 3000 -> compiles MCP -> compiles Electron -> launches Electron
Build Flow
BUILD_TARGET=electron bun run build
-> bun run electron:compile (esbuild electron/ to out/desktop/)
-> bun run mcp:compile
-> npx electron-builder --config apps/desktop/electron-builder.yml
electron-builder.yml— Packaging config: macOS (dmg/zip), Windows (nsis/portable), Linux (AppImage/deb),.opfile associationbuild/— Platform icons (.icns, .ico, .png)- In production, Nitro server is forked as a child process on a random port; Electron loads
http://127.0.0.1:{port}/editor
File Association
.op files are registered as OpenPencil documents via fileAssociations in electron-builder.yml:
- macOS:
open-fileapp event handles double-click/drag - Windows/Linux:
requestSingleInstanceLock+second-instanceevent forwards CLI args to existing window
Auto-updater
Checks GitHub Releases on startup and every hour. update-ready-banner.tsx (in web app) shows download progress and "Restart & Install" prompt.