typescript-strict-mode
TypeScript strict type checking guidelines for SEPilot Desktop. Use when creating types, writing functions, or refactoring code. Ensures all code has explicit types, avoids 'any', and passes type checking with strict mode enabled.
SKILL.md
| Name | typescript-strict-mode |
| Description | TypeScript strict type checking guidelines for SEPilot Desktop. Use when creating types, writing functions, or refactoring code. Ensures all code has explicit types, avoids 'any', and passes type checking with strict mode enabled. |
SEPilot Desktop
<div align="center">The All-in-One AI Workspace
Thinking, Coding, Editor, Browser, Visionμ νλλ‘ ν΅ν©ν κΆκ·Ήμ λ°μ€ν¬ν± AI μν¬μ€νμ΄μ€
<p> <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-5.4-blue" alt="TypeScript"></a> <a href="https://nextjs.org/"><img src="https://img.shields.io/badge/Next.js-14.0-black" alt="Next.js"></a> <a href="https://www.electronjs.org/"><img src="https://img.shields.io/badge/Electron-31.0-47848F" alt="Electron"></a> </p> <p> <a href="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/ci.yml"><img src="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/ci.yml/badge.svg" alt="CI"></a> <a href="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/release.yml"><img src="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/release.yml/badge.svg" alt="Release"></a> <a href="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/deploy-pages.yml"><img src="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/deploy-pages.yml/badge.svg" alt="Deploy Pages"></a> <br/> <a href="https://codecov.io/gh/jhl-labs/sepilot_desktop"><img src="https://codecov.io/gh/jhl-labs/sepilot_desktop/branch/main/graph/badge.svg?token=RTDC27F34B" alt="codecov"></a> <a href="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/codeql.yml"><img src="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/codeql.yml/badge.svg" alt="CodeQL"></a> <a href="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/security-scan.yml"><img src="https://github.com/jhl-labs/sepilot_desktop/actions/workflows/security-scan.yml/badge.svg" alt="Security Scan"></a> </p> <p align="center"> <a href="https://codecov.io/gh/jhl-labs/sepilot_desktop"> <img src="https://codecov.io/gh/jhl-labs/sepilot_desktop/graphs/tree.svg?token=RTDC27F34B&width=600&height=120" alt="Codecov Tree" height="120"> </a> <br> <br> <a href="https://codecov.io/gh/jhl-labs/sepilot_desktop"> <img src="https://codecov.io/gh/jhl-labs/sepilot_desktop/graphs/sunburst.svg?token=RTDC27F34B&width=600&height=220" alt="Codecov Sunburst" height="220"> </a> </p> </div><a name="english"></a>
English
π Overview
SEPilot Desktop is not just a chatbot. It is an integrated open-source desktop application that combines Thinking, Coding, Editor, Browser, and Vision into a seamless workflow. Experience the familiarity of ChatGPT with the power of a professional workspace.
β¨ Key Features
π¬ Native Chat Experience
Familiarity of ChatGPT, flexibility beyond.
- No Learning Curve: Provides the familiar interface you already know.
- Model Hot-swap: Switch between GPT-4o, Claude 3.5, and local Ollama models with a single click.
- Perfect Rendering: Beautiful Markdown, LaTeX support, and real-time streaming.
- Secure: Chat history is safely stored in a local database.
π§ Depth of Thought (Thinking Models)
Choose AI thinking process matching problem complexity.
- Sequential Thinking: Step-by-step reasoning where AI self-verifies logical gaps before moving forward.
- Tree of Thought: Generates multiple solution possibilities simultaneously (Branching) to find the optimal path.
- Deep Thinking (Graph): Combines Sequential and Tree of Thought. Analyzes problems from 4 distinct perspectives (Analytical, Practical, Critical, Creative).
π¨βπ» Autonomous Coding Agent (Beta)
Experimental autonomous coding support.
- Think -> Action -> Observe: Repeats the cycle of thinking, file I/O, and result analysis.
- Full Control: Can create/edit/delete files and execute terminal commands.
- Auto-debugging: Automatically analyzes error logs and attempts to fix issues.
π Full-featured Editor & Terminal
Power of VS Code, but lighter.
- Monaco Editor: Built-in VS Code core with syntax highlighting, minimap, and multi-cursor support.
- Integrated Terminal: Run
npm install,git commit, or python scripts directly within the app. - AI Context Menu: Drag text to access Notion-style AI tools (Refactor, Translate, Fix Typos, etc.).
ποΈ Vision Browser Agent
Understands as it sees, moves like a human.
- Hybrid Control: Combines semantic DOM analysis with Vision (Set-of-Mark) to interact with complex web pages.
- Automation: Supports over 27 browser actions including click, scroll, type, and navigation.
π Knowledge Base (RAG)
Turn your documents into AI's knowledge.
- Local RAG: Uses local SQLite-vec vector DB. Drag & drop Markdown/Text files to build a secure knowledge base.
- Team Docs: Link GitHub repositories to auto-sync team documentation and code snippets.
π¨ Vision & Visualization
- Vision Analysis: Paste images for instant analysis by Vision models (e.g., "Analyze this error log").
- Image Generation: Integrate with Nano Banana and ComfyUI for complex image generation workflows.
- Mermaid & Plotly: Generate diagrams from text and visualize CSV/Excel data with interactive charts.
π Super Productivity
- Quick Input: Call SEPilot instantly with a global shortcut without leaving your current app.
- Quick Search: Ripgrep-powered search finds files and content in milliseconds.
ποΈ Tech Stack
- Frontend: Next.js 14 (App Router), React 18, Tailwind CSS, shadcn/ui
- Desktop: Electron 31, Context Bridge IPC, better-sqlite3
- AI Core: LangGraph (Custom Implementation), OpenAI Compatible API, MCP (Model Context Protocol)
- DevOps: TypeScript 5.4, ESLint, Prettier, electron-builder
π Project Structure
sepilot_desktop/
βββ app/ # Next.js App Router (Frontend entry point)
βββ components/ # React UI components
βββ electron/ # Electron Main Process (Backend)
βββ lib/ # Shared libraries (core business logic)
βββ hooks/ # Global React custom hooks
βββ types/ # TypeScript type definitions
βββ resources/extensions/ # Extension source code (8 extensions)
βββ extensions/ # Built .sepx package files (production)
βββ locales/ # i18n resources (ko, en, zh)
βββ public/ # Static assets
βββ assets/ # Build assets (app icons)
βββ scripts/ # Build & dev scripts
βββ tests/ # Unit / integration tests
βββ e2e_tests/ # E2E tests (Playwright)
βββ docs/ # Project documentation
βββ release_notes/ # Version release notes
βββ builtin-skills/ # Built-in skill definitions
βββ deepreview/ # DeepReview materials
app/ β Next.js App Router
Frontend entry point based on Next.js App Router. Defines page routing and layouts.
app/
βββ layout.tsx # Root layout (Providers, global config)
βββ page.tsx # Main chat page
βββ globals.css # Global CSS styles
βββ api/chat/stream/ # Streaming chat API route
βββ notification/ # Notification popup page
βββ quick-input/ # Quick input popup page
components/ β React UI Components
All React components organized by feature domain.
components/
βββ ui/ # shadcn/ui base components (Button, Dialog, Input, etc.)
βββ chat/ # Chat UI (ChatArea, InputBox, MessageBubble, ToolApproval)
βββ layout/ # Layout (MainLayout, Sidebar, ChatHistory, WikiTree)
βββ settings/ # Settings panel (LLM, MCP, Extension, Network, 20+ tabs)
βββ markdown/ # Markdown rendering (code highlighting, LaTeX)
βββ rag/ # RAG document management UI
βββ mcp/ # MCP server management UI
βββ skills/ # Skills management UI
βββ persona/ # Persona management UI
βββ gallery/ # Image gallery
βββ providers/ # React Context Providers (Theme, I18n)
βββ theme/ # Theme components
electron/ β Electron Main Process
Electron backend process with IPC handlers, services, and utilities.
electron/
βββ main.ts # App entry (BrowserWindow, protocol, service init)
βββ preload.ts # Preload script (exposes window.electronAPI)
βββ ipc/
β βββ index.ts # IPC handler registration hub
β βββ handlers/ # IPC handlers (35 files)
β βββ llm.ts # LLM streaming / chat
β βββ langgraph.ts # LangGraph agent execution
β βββ mcp.ts # MCP server management & tool calls
β βββ chat.ts # Conversation save / load / delete
β βββ file.ts # File system operations
β βββ browser-view.ts # BrowserView tab management
β βββ terminal.ts # Terminal sessions (PTY)
β βββ vectordb.ts # Vector DB operations
β βββ extension-*.ts # Extension APIs (handlers, fs, llm, mcp, vectordb)
β βββ ... # Others (auth, config, scheduler, skills, etc.)
βββ services/ # Backend services (15 files)
β βββ database.ts # SQLite database management
β βββ vectordb.ts # Vector DB service
β βββ pty-manager.ts # PTY terminal management
β βββ scheduler.ts # Task scheduler
β βββ ... # Others (logger, token-manager, webhook, etc.)
βββ agents/ # Electron-side agents
βββ utils/ # Utilities (paths, update-checker)
lib/ β Shared Libraries
Core business logic shared between frontend and backend.
lib/
βββ langgraph/ # LangGraph agent system
β βββ base/ # Base graph classes (BaseGraph, ThinkingGraph)
β βββ graphs/ # Graph implementations (15: chat, agent, coding-agent, rag, etc.)
β βββ nodes/ # Graph nodes (generate, retrieve, tools)
β βββ factory/ # GraphFactory + GraphRegistry
β βββ prompts/ # System prompts
βββ llm/ # LLM client
β βββ base.ts # BaseLLMProvider (abstract class)
β βββ client.ts # LLMClient singleton
β βββ providers/ # LLM providers (OpenAI-compatible, Ollama)
βββ mcp/ # MCP (Model Context Protocol)
β βββ client.ts # MCP client (JSON-RPC 2.0)
β βββ server-manager.ts # MCP server lifecycle management
β βββ tools/ # MCP tools (Google Search, Browser, etc.)
βββ extensions/ # Extension system (18 files)
β βββ loader.ts # Renderer environment loader
β βββ loader-main.ts # Main Process loader
β βββ registry.ts # Extension registry
β βββ context-factory.ts # Runtime context creation
βββ extension-sdk/ # Extension SDK (@sepilot/extension-sdk)
β βββ src/ # Types, hooks, IPC helpers, runtime API, UI
βββ store/ # Zustand global state
β βββ chat-store.ts # Core state (conversations, messages, mode, extensions)
β βββ extension-slices.ts # Dynamic extension store slices
βββ hooks/ # Library-level React hooks
βββ vectordb/ # Vector DB (embeddings, indexing, adapters)
βββ auth/ # Authentication (GitHub OAuth)
βββ config/ # Configuration (encryption, sync, migration)
βββ http/ # HTTP client (proxy / SSL support)
βββ skills/ # Skills management (manager, validator, loader)
βββ documents/ # Document processing (PDF, Word, Excel)
βββ github/ # GitHub integration
βββ imagegen/ # Image generation
βββ comfyui/ # ComfyUI integration
βββ i18n/ # Internationalization (i18next, ko/en/zh)
βββ utils/ # Common utilities (logger, token-counter, error-handler)
hooks/ β Global React Custom Hooks
General-purpose React custom hooks used across the entire app.
| File | Description |
|---|---|
use-confirm-dialog.ts | Confirmation dialog hook |
use-file-clipboard.ts | File clipboard hook |
use-file-system.ts | File system access hook |
use-resize-observer.ts | Resize detection hook |
use-theme-persistence.ts | Theme persistence hook |
types/ β TypeScript Type Definitions
Project-wide TypeScript types and interfaces.
| File | Description |
|---|---|
index.ts | Core types (Message, Conversation, LLMConfig, etc.) |
electron.d.ts | window.electronAPI type declarations |
ipc-channels.ts | IPC channel name constants |
persona.ts | Persona types |
skill.ts | Skill types |
scheduler.ts | Scheduler types |
wiki-tree.ts | Wiki tree types |
resources/extensions/ β Extension Source Code
8 extensions, each structured as an independent project.
| Extension | Description |
|---|---|
editor/ | Code editor (Monaco Editor) |
browser/ | Web browser (BrowserView tabs) |
terminal/ | Terminal (xterm.js + PTY) |
architect/ | Architecture diagrams |
presentation/ | Presentation creation |
github-actions/ | GitHub Actions management |
github-pr-review/ | GitHub PR review |
github-project/ | GitHub Project management |
Other Directories
| Directory | Description |
|---|---|
extensions/ | Built .sepx packages for production deployment |
locales/ | i18n translation files (ko.json, en.json, zh.json) |
public/ | Static assets (favicon, Monaco files, sql-wasm binaries) |
assets/ | Build assets (app icon) |
scripts/ | Build & dev scripts (Extension bundler, SDK build, Monaco copy, etc.) |
tests/ | Unit / integration tests (Jest + React Testing Library) |
e2e_tests/ | E2E tests (Playwright) |
docs/ | Architecture docs, dev guides, Extension docs |
release_notes/ | Version release notes (v0.5.0 ~ v0.9.1) |
builtin-skills/ | Built-in AI skill definitions |
deepreview/ | DeepReview training materials & workshops |
π¦ Installation
Download the latest installer from Releases.
π οΈ Development Setup
For developers: See SETUP.md for detailed development environment setup instructions.
Quick start:
# Clone both repositories
git clone <sepilot_desktop-repo> sepilot_desktop
git clone <sepilot-extensions-repo> sepilot-extensions
# Install and run
cd sepilot_desktop
pnpm install
pnpm run dev
Note: The main app requires the sepilot-extensions directory at the same level for Extension source code.
Optional: Terminal Features (Windows)
Terminal features require native node modules. If you encounter build errors during pnpm install:
Option 1: Install Visual Studio Build Tools
- Download Build Tools for Visual Studio 2022
- Install with "Desktop development with C++" workload
- Run
pnpm run rebuild:node-pty
Option 2: Continue without terminal features
- The app works perfectly without terminal features
- You can enable them later when needed
π§ͺ Development & Testing
Running Tests
Unit Tests:
pnpm run test # Run all unit tests
pnpm run test:frontend # Frontend tests only
pnpm run test:backend # Backend tests only
pnpm run test:coverage # With coverage report
E2E Tests:
E2E tests require a display server. For headless environments (e.g., CI/CD):
# Install Xvfb (Ubuntu/Debian)
sudo apt-get install xvfb
# Install Xvfb (Fedora/RHEL)
sudo dnf install xorg-x11-server-Xvfb
# Run E2E tests
pnpm run test:e2e
For GUI environments (macOS, Windows, Linux Desktop), tests will run directly without Xvfb.
Test Coverage
View Coverage Reports:
We use Codecov for comprehensive test coverage tracking. Visit the dashboard to see:
- Overall project coverage with interactive sunburst and tree visualizations
- Component-specific coverage (Chat, LangGraph, MCP, RAG, Electron IPC)
- Coverage trends over time
- Pull request impact analysis
Local Coverage Reports:
# Generate coverage reports
pnpm run test:coverage # All tests with coverage
pnpm run test:coverage:frontend # Frontend only
pnpm run test:coverage:backend # Backend only
# View HTML report (after running tests)
open coverage/lcov-report/index.html # macOS
start coverage/lcov-report/index.html # Windows
xdg-open coverage/lcov-report/index.html # Linux
Coverage Targets:
| Component | Target | Current |
|---|---|---|
| Overall Project | 55% | |
| Frontend (UI) | 50% | - |
| Backend (Core) | 55% | - |
| Chat System | 60% | - |
| LangGraph Agent | 65% | - |
| MCP Integration | 60% | - |
| Electron IPC | 70% | - |
Automated Coverage Checks:
- β PR Comments: Every pull request receives detailed coverage analysis
- β Status Checks: PRs must maintain coverage within threshold (Β±2-5%)
- β Component Tracking: Individual components tracked separately
- β Bundle Analysis: JavaScript bundle size monitoring
- β Test Results: Test pass/fail tracking integrated with coverage
<a name="korean"></a>
νκ΅μ΄
π κ°μ
SEPilot Desktopμ λ¨μν μ±λ΄μ΄ μλλλ€. Thinking, Coding, Editor, Browser, Visionμ΄ μλ²½νκ² ν΅ν©λ μ€νμμ€ λ°μ€ν¬ν± μ ν리μΌμ΄μ μ λλ€. ChatGPTμ κ°μ μ΅μν μ¬μ©μ±μ μ λ¬Έμ μΈ μν¬μ€νμ΄μ€μ κ°λ ₯ν¨μ λνμ΅λλ€.
β¨ μ£Όμ κΈ°λ₯
π¬ λ€μ΄ν°λΈ μ±ν κ²½ν (Native Chat Experience)
ChatGPTμ κ°μ νΈμν¨, κ·Έ μ΄μμ μ μ°ν¨.
- μ΅μν UI: μλ‘μ΄ λꡬλ₯Ό λ°°μΈ νμ μμ΄ λ°λ‘ μ¬μ©ν μ μμ΅λλ€.
- λͺ¨λΈ ν«μ€μ: GPT-4o, Claude 3.5, Ollama λ‘컬 λͺ¨λΈ λ±μ ν΄λ¦ ν λ²μΌλ‘ μ νν©λλ€.
- μλ²½ν λ λλ§: GitHub μ€νμΌμ λ§ν¬λ€μ΄ λ λλ§κ³Ό μμ(LaTeX) μ§μ.
- 보μ: λͺ¨λ λν λ΄μ©μ λ‘컬 λ°μ΄ν°λ² μ΄μ€μ μμ νκ² μ μ₯λ©λλ€.
π§ μ¬κ³ λͺ¨λΈ (Depth of Thought)
λ¬Έμ μ 볡μ‘λμ λ§μΆ° AIμ μ¬κ³ λ°©μμ μ ννμΈμ.
- Sequential Thinking: λ¨κ³λ³(Step-by-Step)λ‘ λ Όλ¦¬λ₯Ό μ κ°νλ©° μ€μ€λ‘ νμ μ κ²μ¦ν©λλ€.
- Tree of Thought: μ¬λ¬ ν΄κ²° κ²½λ‘λ₯Ό λμμ νμ(Branching)νμ¬ μ΅μ μ ν΄λ₯Ό λμΆν©λλ€. λΈλ μΈμ€ν λ°μ κ°λ ₯ν©λλ€.
- Deep Thinking (Graph): 4κ°μ§ κ΄μ (λΆμμ , μ€μ©μ , λΉνμ , μ°½μμ )μΌλ‘ λ¬Έμ λ₯Ό μ 체μ μΌλ‘ λΆμνκ³ κ²μ¦ν©λλ€.
π¨βπ» μμ¨ μ½λ© μμ΄μ νΈ (Coding Agent)
μ€νμ μΈ μμ¨ μ½λ© μ§μ.
- Think -> Action -> Observe: μκ°νκ³ , νμΌμ μννκ³ , κ²°κ³Όλ₯Ό νμΈνλ μ£ΌκΈ°λ₯Ό λ°λ³΅ν©λλ€.
- μμ ν μ μ΄: νμΌ μμ±/μμ /μμ κΆνκ³Ό ν°λ―Έλ λͺ λ Ήμ΄ μ€ν λ₯λ ₯μ κ°μ§λλ€.
- μλ λλ²κΉ : μλ¬ λ°μ μ λ‘κ·Έλ₯Ό λΆμνμ¬ μ€μ€λ‘ μ½λλ₯Ό μμ (Self-correction)ν©λλ€.
π ν νΌμ² μλν° & ν°λ―Έλ
VS Codeμ κ°λ ₯ν¨μ κ·Έλλ‘, λ κ°λ³κ².
- Monaco Editor: VS Codeμ ν΅μ¬ μμ§μ νμ¬νμ¬ κ΅¬λ¬Έ κ°μ‘°, λ―Έλλ§΅, λ©ν° 컀μ λ±μ μ§μν©λλ€.
- λ΄μ₯ ν°λ―Έλ: μ± λ΄μμ λ°λ‘
npm install,git commitλ±μ μ€νν μ μμ΅λλ€. - AI 컨ν μ€νΈ λ©λ΄: ν μ€νΈλ₯Ό λλκ·Ένλ©΄ Notion μ€νμΌμ AI λ©λ΄(리ν©ν λ§, μ£Όμ μμ± λ±)κ° λνλ©λλ€.
ποΈ λΉμ λΈλΌμ°μ μμ΄μ νΈ (Vision Browser Agent)
보μ΄λ λλ‘ μ΄ν΄νκ³ , μ¬λμ²λΌ μμ§μ λλ€.
- νμ΄λΈλ¦¬λ μ μ΄: DOM λΆμκ³Ό Vision AI(Set-of-Mark)λ₯Ό κ²°ν©νμ¬ λ³΅μ‘ν μΉ νμ΄μ§λ μ ννκ² μ μ΄ν©λλ€.
- λΈλΌμ°μ μλν: ν΄λ¦, μ€ν¬λ‘€, νμ΄ν λ± 27κ° μ΄μμ λΈλΌμ°μ μ‘μ μ μ§μν©λλ€.
π μ§μ κΈ°λ° (RAG)
λΉμ μ λ¬Έμλ₯Ό AIμ μ§μμΌλ‘.
- λ‘컬 RAG: λ‘컬 SQLite-vec λ²‘ν° DBλ₯Ό μ¬μ©ν©λλ€. λ§ν¬λ€μ΄/ν μ€νΈ νμΌμ λλκ·Ένμ¬ μμ ν κ°μΈ μ§μ μ μ₯μλ₯Ό ꡬμΆνμΈμ.
- ν λ¬Έμ: GitHub μ μ₯μλ₯Ό μ°κ²°νμ¬ νμ μν€λ μ½λλ₯Ό μλμΌλ‘ λκΈ°ννκ³ κ³΅μ ν μ μμ΅λλ€.
π¨ λΉμ & μκ°ν
- λΉμ λΆμ: μ΄λ―Έμ§λ μλ¬ μ€ν¬λ¦°μ·μ λΆμ¬λ£μΌλ©΄ Qwen2-VL λͺ¨λΈμ΄ μ¦μ λΆμν©λλ€.
- μ΄λ―Έμ§ μμ±: ComfyUI, Nano Bananaμ μ°λνμ¬ λ³΅μ‘ν λ Έλ κΈ°λ° μ΄λ―Έμ§ μμ± μν¬νλ‘μ°λ₯Ό μ μ΄ν©λλ€.
- Mermaid & Plotly: ν μ€νΈλ‘ λ€μ΄μ΄κ·Έλ¨μ μμ²νκ±°λ, μμ /CSV λ°μ΄ν°λ₯Ό μΈν°λν°λΈ μ°¨νΈλ‘ μκ°νν©λλ€.
π μ΄μμ°μ± (Super Productivity)
- Quick Input: λ¨μΆν€ νλλ‘ μ΄λμλ SEPilotμ νΈμΆνμ¬ λΉ λ₯΄κ² μ§λ¬ΈνμΈμ.
- Quick Search: Ripgrep μμ§μ νμ¬νμ¬ μλ§ κ°μ νμΌμ 0.1μ΄ λ§μ κ²μν©λλ€.
- Quick Search: Ripgrep μμ§μ νμ¬νμ¬ μλ§ κ°μ νμΌμ 0.1μ΄ λ§μ κ²μν©λλ€.
ποΈ κΈ°μ μ€ν
- Frontend: Next.js 14 (App Router), React 18, Tailwind CSS, shadcn/ui
- Desktop: Electron 31, Context Bridge IPC, better-sqlite3
- AI Core: LangGraph (Custom Implementation), OpenAI Compatible API, MCP (Model Context Protocol)
- DevOps: TypeScript 5.4, ESLint, Prettier, electron-builder
π νλ‘μ νΈ κ΅¬μ‘°
sepilot_desktop/
βββ app/ # Next.js App Router (νλ‘ νΈμλ μ§μ
μ )
βββ components/ # React UI μ»΄ν¬λνΈ
βββ electron/ # Electron Main Process (λ°±μλ)
βββ lib/ # 곡μ λΌμ΄λΈλ¬λ¦¬ (ν΅μ¬ λΉμ¦λμ€ λ‘μ§)
βββ hooks/ # μ μ React 컀μ€ν
ν
βββ types/ # TypeScript νμ
μ μ
βββ resources/extensions/ # Extension μμ€ μ½λ (8κ°)
βββ extensions/ # λΉλλ .sepx ν¨ν€μ§ νμΌ (νλ‘λμ
μ©)
βββ locales/ # λ€κ΅μ΄ 리μμ€ (ko, en, zh)
βββ public/ # μ μ μμ°
βββ assets/ # λΉλ μμ° (μ± μμ΄μ½)
βββ scripts/ # λΉλ λ° κ°λ° μ€ν¬λ¦½νΈ
βββ tests/ # λ¨μ / ν΅ν© ν
μ€νΈ
βββ e2e_tests/ # E2E ν
μ€νΈ (Playwright)
βββ docs/ # νλ‘μ νΈ λ¬Έμ
βββ release_notes/ # λ²μ λ³ λ¦΄λ¦¬μ€ λ
ΈνΈ
βββ builtin-skills/ # λ΄μ₯ μ€ν¬ μ μ
βββ deepreview/ # DeepReview κ΅μ‘ μλ£
app/ β Next.js App Router
Next.js App Router κΈ°λ° νλ‘ νΈμλ μ§μ μ μ λλ€. νμ΄μ§ λΌμ°ν κ³Ό λ μ΄μμμ μ μν©λλ€.
app/
βββ layout.tsx # Root λ μ΄μμ (Provider, κΈλ‘λ² μ€μ )
βββ page.tsx # λ©μΈ μ±ν
νμ΄μ§
βββ globals.css # κΈλ‘λ² CSS μ€νμΌ
βββ api/chat/stream/ # μ€νΈλ¦¬λ° μ±ν
API Route
βββ notification/ # μλ¦Ό νμ
νμ΄μ§
βββ quick-input/ # λΉ λ₯Έ μ
λ ₯ νμ
νμ΄μ§
components/ β React UI μ»΄ν¬λνΈ
λͺ¨λ React μ»΄ν¬λνΈκ° κΈ°λ₯λ³λ‘ λΆλ₯λμ΄ μμ΅λλ€.
components/
βββ ui/ # shadcn/ui κΈ°λ³Έ μ»΄ν¬λνΈ (Button, Dialog, Input λ±)
βββ chat/ # μ±ν
UI (ChatArea, InputBox, MessageBubble, ToolApproval)
βββ layout/ # λ μ΄μμ (MainLayout, Sidebar, ChatHistory, WikiTree)
βββ settings/ # μ€μ ν¨λ (LLM, MCP, Extension, Network λ± 20+ ν)
βββ markdown/ # Markdown λ λλ§ (μ½λ νμ΄λΌμ΄ν
, LaTeX)
βββ rag/ # RAG λ¬Έμ κ΄λ¦¬ UI
βββ mcp/ # MCP μλ² κ΄λ¦¬ UI
βββ skills/ # μ€ν¬ κ΄λ¦¬ UI
βββ persona/ # νλ₯΄μλ κ΄λ¦¬ UI
βββ gallery/ # μ΄λ―Έμ§ κ°€λ¬λ¦¬
βββ providers/ # React Context Provider (Theme, I18n)
βββ theme/ # ν
λ§ κ΄λ ¨ μ»΄ν¬λνΈ
electron/ β Electron Main Process
Electron λ°±μλ νλ‘μΈμ€μ λλ€. IPC νΈλ€λ¬, μλΉμ€, μ νΈλ¦¬ν°λ‘ ꡬμ±λ©λλ€.
electron/
βββ main.ts # μ± μ§μ
μ (BrowserWindow, νλ‘ν μ½ λ±λ‘, μλΉμ€ μ΄κΈ°ν)
βββ preload.ts # Preload μ€ν¬λ¦½νΈ (window.electronAPI λ
ΈμΆ)
βββ ipc/
β βββ index.ts # IPC νΈλ€λ¬ λ±λ‘ μ΄κ΄
β βββ handlers/ # IPC νΈλ€λ¬ (35κ° νμΌ)
β βββ llm.ts # LLM μ€νΈλ¦¬λ°/μ±ν
β βββ langgraph.ts # LangGraph μμ΄μ νΈ μ€ν
β βββ mcp.ts # MCP μλ² κ΄λ¦¬ λ° λꡬ νΈμΆ
β βββ chat.ts # λν μ μ₯/λ‘λ/μμ
β βββ file.ts # νμΌ μμ€ν
μμ
β βββ browser-view.ts # BrowserView ν κ΄λ¦¬
β βββ terminal.ts # ν°λ―Έλ μΈμ
(PTY)
β βββ vectordb.ts # λ²‘ν° DB μμ
β βββ extension-*.ts # Extension μ μ© API (handlers, fs, llm, mcp, vectordb)
β βββ ... # κΈ°ν (auth, config, scheduler, skills λ±)
βββ services/ # λ°±μλ μλΉμ€ (15κ° νμΌ)
β βββ database.ts # SQLite λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬
β βββ vectordb.ts # λ²‘ν° DB μλΉμ€
β βββ pty-manager.ts # PTY ν°λ―Έλ κ΄λ¦¬
β βββ scheduler.ts # μμ
μ€μΌμ€λ¬
β βββ ... # κΈ°ν (logger, token-manager, webhook λ±)
βββ agents/ # Electron μΈ‘ μμ΄μ νΈ
βββ utils/ # μ νΈλ¦¬ν° (paths, update-checker)
lib/ β 곡μ λΌμ΄λΈλ¬λ¦¬
νλ‘ νΈμλμ λ°±μλμμ 곡μ νλ ν΅μ¬ λΉμ¦λμ€ λ‘μ§μ λλ€.
lib/
βββ langgraph/ # LangGraph μμ΄μ νΈ μμ€ν
β βββ base/ # κΈ°λ³Έ κ·Έλν ν΄λμ€ (BaseGraph, ThinkingGraph)
β βββ graphs/ # κ·Έλν ꡬν체 (15κ°: chat, agent, coding-agent, rag λ±)
β βββ nodes/ # κ·Έλν λ
Έλ (generate, retrieve, tools)
β βββ factory/ # GraphFactory + GraphRegistry
β βββ prompts/ # μμ€ν
ν둬ννΈ
βββ llm/ # LLM ν΄λΌμ΄μΈνΈ
β βββ base.ts # BaseLLMProvider (μΆμ ν΄λμ€)
β βββ client.ts # LLMClient μ±κΈν€
β βββ providers/ # LLM μ 곡μ (OpenAI νΈν, Ollama)
βββ mcp/ # MCP (Model Context Protocol)
β βββ client.ts # MCP ν΄λΌμ΄μΈνΈ (JSON-RPC 2.0)
β βββ server-manager.ts # MCP μλ² μλͺ
μ£ΌκΈ° κ΄λ¦¬
β βββ tools/ # MCP λꡬ (Google Search, Browser λ±)
βββ extensions/ # Extension μμ€ν
(18κ° νμΌ)
β βββ loader.ts # Renderer νκ²½ λ‘λ
β βββ loader-main.ts # Main Process λ‘λ
β βββ registry.ts # Extension λ μ§μ€νΈλ¦¬
β βββ context-factory.ts # λ°νμ 컨ν
μ€νΈ μμ±
βββ extension-sdk/ # Extension SDK (@sepilot/extension-sdk)
β βββ src/ # νμ
, ν
, IPC ν¬νΌ, λ°νμ API, UI
βββ store/ # Zustand μ μ μν
β βββ chat-store.ts # ν΅μ¬ μν (λν, λ©μμ§, λͺ¨λ, Extension μ¬λΌμ΄μ€)
β βββ extension-slices.ts # λμ Extension Store μ¬λΌμ΄μ€
βββ hooks/ # λΌμ΄λΈλ¬λ¦¬ λ 벨 React ν
βββ vectordb/ # λ²‘ν° DB (μλ² λ©, μΈλ±μ±, μ΄λν°)
βββ auth/ # μΈμ¦ (GitHub OAuth)
βββ config/ # μ€μ κ΄λ¦¬ (μνΈν, λκΈ°ν, λ§μ΄κ·Έλ μ΄μ
)
βββ http/ # HTTP ν΄λΌμ΄μΈνΈ (νλ‘μ/SSL μ§μ)
βββ skills/ # μ€ν¬ κ΄λ¦¬ (manager, validator, loader)
βββ documents/ # λ¬Έμ μ²λ¦¬ (PDF, Word, Excel)
βββ github/ # GitHub ν΅ν©
βββ imagegen/ # μ΄λ―Έμ§ μμ±
βββ comfyui/ # ComfyUI ν΅ν©
βββ i18n/ # κ΅μ ν (i18next, ν/μ/μ€)
βββ utils/ # κ³΅ν΅ μ νΈλ¦¬ν° (logger, token-counter, error-handler)
hooks/ β μ μ React 컀μ€ν
ν
μ± μ 체μμ μ¬μ©λλ λ²μ© React 컀μ€ν ν μ λλ€.
| νμΌ | μ€λͺ |
|---|---|
use-confirm-dialog.ts | νμΈ λ€μ΄μΌλ‘κ·Έ ν |
use-file-clipboard.ts | νμΌ ν΄λ¦½λ³΄λ ν |
use-file-system.ts | νμΌ μμ€ν μ κ·Ό ν |
use-resize-observer.ts | 리μ¬μ΄μ¦ κ°μ§ ν |
use-theme-persistence.ts | ν λ§ μμν ν |
types/ β TypeScript νμ
μ μ
νλ‘μ νΈ μ μμμ μ¬μ©λλ TypeScript νμ κ³Ό μΈν°νμ΄μ€μ λλ€.
| νμΌ | μ€λͺ |
|---|---|
index.ts | ν΅μ¬ νμ (Message, Conversation, LLMConfig λ±) |
electron.d.ts | window.electronAPI νμ
μ μΈ |
ipc-channels.ts | IPC μ±λλͺ μμ |
persona.ts | νλ₯΄μλ νμ |
skill.ts | μ€ν¬ νμ |
scheduler.ts | μ€μΌμ€λ¬ νμ |
wiki-tree.ts | Wiki νΈλ¦¬ νμ |
resources/extensions/ β Extension μμ€ μ½λ
8κ°μ Extensionμ΄ κ°κ° λ 립μ μΈ νλ‘μ νΈλ‘ ꡬμ±λμ΄ μμ΅λλ€.
| Extension | μ€λͺ |
|---|---|
editor/ | μ½λ μλν° (Monaco Editor κΈ°λ°) |
browser/ | μΉ λΈλΌμ°μ (BrowserView ν κ΄λ¦¬) |
terminal/ | ν°λ―Έλ (xterm.js + PTY) |
architect/ | μν€ν μ² λ€μ΄μ΄κ·Έλ¨ |
presentation/ | νλ μ ν μ΄μ μμ± |
github-actions/ | GitHub Actions κ΄λ¦¬ |
github-pr-review/ | GitHub PR 리뷰 |
github-project/ | GitHub Project κ΄λ¦¬ |
κΈ°ν λλ ν 리
| λλ ν 리 | μ€λͺ |
|---|---|
extensions/ | νλ‘λμ
λ°°ν¬μ© λΉλλ .sepx ν¨ν€μ§ |
locales/ | λ€κ΅μ΄ λ²μ νμΌ (ko.json, en.json, zh.json) |
public/ | μ μ μμ° (favicon, Monaco νμΌ, sql-wasm λ°μ΄λ리) |
assets/ | λΉλ μμ° (μ± μμ΄μ½) |
scripts/ | λΉλ/κ°λ° μ€ν¬λ¦½νΈ (Extension λ²λ€λ¬, SDK λΉλ, Monaco λ³΅μ¬ λ±) |
tests/ | λ¨μ/ν΅ν© ν μ€νΈ (Jest + React Testing Library) |
e2e_tests/ | E2E ν μ€νΈ (Playwright) |
docs/ | μν€ν μ² λ¬Έμ, κ°λ° κ°μ΄λ, Extension λ¬Έμ |
release_notes/ | λ²μ λ³ λ¦΄λ¦¬μ€ λ ΈνΈ (v0.5.0 ~ v0.9.1) |
builtin-skills/ | AI μμ΄μ νΈ λ΄μ₯ μ€ν¬ μ μ |
deepreview/ | DeepReview κ΅μ‘ μλ£ λ° μν¬μ΅ |
π¦ μ€μΉ
Releases νμ΄μ§μμ μ΅μ μ€μΉ νμΌμ λ€μ΄λ‘λνμΈμ.
π οΈ κ°λ° νκ²½ μ€μ
κ°λ°μμ©: μμΈν κ°λ° νκ²½ μ€μ μ SETUP.mdλ₯Ό μ°Έμ‘°νμΈμ.
λΉ λ₯Έ μμ:
# λ μ μ₯μ λͺ¨λ ν΄λ‘
git clone <sepilot_desktop-repo> sepilot_desktop
git clone <sepilot-extensions-repo> sepilot-extensions
# μ€μΉ λ° μ€ν
cd sepilot_desktop
pnpm install
pnpm run dev
μ€μ: λ©μΈ μ±μ Extension μμ€μ½λλ₯Ό μν΄ κ°μ λ 벨μ sepilot-extensions λλ ν λ¦¬κ° νμν©λλ€.
π§ͺ κ°λ° & ν μ€νΈ
ν μ€νΈ μ€ν
λ¨μ ν μ€νΈ:
pnpm run test # λͺ¨λ λ¨μ ν
μ€νΈ μ€ν
pnpm run test:frontend # νλ‘ νΈμλ ν
μ€νΈλ§
pnpm run test:backend # λ°±μλ ν
μ€νΈλ§
pnpm run test:coverage # 컀λ²λ¦¬μ§ 리ν¬νΈ ν¬ν¨
E2E ν μ€νΈ:
E2E ν μ€νΈλ λμ€νλ μ΄ μλ²κ° νμν©λλ€. ν€λλ¦¬μ€ νκ²½(CI/CD)μμλ:
# Xvfb μ€μΉ (Ubuntu/Debian)
sudo apt-get install xvfb
# Xvfb μ€μΉ (Fedora/RHEL)
sudo dnf install xorg-x11-server-Xvfb
# E2E ν
μ€νΈ μ€ν
pnpm run test:e2e
GUI νκ²½(macOS, Windows, Linux λ°μ€ν¬ν±)μμλ Xvfb μμ΄ λ°λ‘ μ€νλ©λλ€.
ν μ€νΈ 컀λ²λ¦¬μ§
컀λ²λ¦¬μ§ 리ν¬νΈ νμΈ:
Codecovλ₯Ό μ¬μ©νμ¬ ν¬κ΄μ μΈ ν μ€νΈ 컀λ²λ¦¬μ§λ₯Ό μΆμ ν©λλ€. λμ보λμμ λ€μμ νμΈν μ μμ΅λλ€:
- λνν μ λ²μ€νΈ λ° νΈλ¦¬ μκ°νλ₯Ό ν΅ν μ 체 νλ‘μ νΈ μ»€λ²λ¦¬μ§
- μ»΄ν¬λνΈλ³ 컀λ²λ¦¬μ§ (Chat, LangGraph, MCP, RAG, Electron IPC)
- μκ°λ³ 컀λ²λ¦¬μ§ μΆμ΄
- Pull Request μν₯ λΆμ
λ‘컬 컀λ²λ¦¬μ§ 리ν¬νΈ:
# 컀λ²λ¦¬μ§ 리ν¬νΈ μμ±
pnpm run test:coverage # λͺ¨λ ν
μ€νΈ + 컀λ²λ¦¬μ§
pnpm run test:coverage:frontend # νλ‘ νΈμλλ§
pnpm run test:coverage:backend # λ°±μλλ§
# HTML 리ν¬νΈ 보기 (ν
μ€νΈ μ€ν ν)
open coverage/lcov-report/index.html # macOS
start coverage/lcov-report/index.html # Windows
xdg-open coverage/lcov-report/index.html # Linux
컀λ²λ¦¬μ§ λͺ©ν:
| μ»΄ν¬λνΈ | λͺ©ν | νμ¬ |
|---|---|---|
| μ 체 νλ‘μ νΈ | 55% | |
| νλ‘ νΈμλ (UI) | 50% | - |
| λ°±μλ (Core) | 55% | - |
| Chat μμ€ν | 60% | - |
| LangGraph Agent | 65% | - |
| MCP ν΅ν© | 60% | - |
| Electron IPC | 70% | - |
μλ 컀λ²λ¦¬μ§ 체ν¬:
- β PR μ½λ©νΈ: λͺ¨λ Pull Requestμ μμΈν 컀λ²λ¦¬μ§ λΆμ μ 곡
- β Status Checks: PRμ μκ³κ°(Β±2-5%) λ΄μμ 컀λ²λ¦¬μ§ μ μ§ νμ
- β μ»΄ν¬λνΈ μΆμ : κ°λ³ μ»΄ν¬λνΈλ₯Ό λ³λλ‘ μΆμ
- β λ²λ€ λΆμ: JavaScript λ²λ€ ν¬κΈ° λͺ¨λν°λ§
- β ν μ€νΈ κ²°κ³Ό: ν μ€νΈ ν΅κ³Ό/μ€ν¨ μΆμ μ΄ μ»€λ²λ¦¬μ§μ ν΅ν©
π License
This project is licensed under a custom license. See the LICENSE file for details.