DAON Agent System
Electron + Python 기반 멀티 에이전트 IDE — 로컬 백엔드 서버, 웹 UI, 다중 AI 에이전트를 결합한 데스크톱 개발 환경.
docs/ARTIFACTS_AND_BUILD.md
(server.exe · electron · 포터블 · 설치본 바로가기가 어디에 있고 어떻게 쓰이는지 한 눈에 정리)
Electron + Python 기반 멀티 에이전트 IDE — 로컬 백엔드 서버, 웹 UI, 다중 AI 에이전트를 결합한 데스크톱 개발 환경.
docs/ARTIFACTS_AND_BUILD.md
(server.exe · electron · 포터블 · 설치본 바로가기가 어디에 있고 어떻게 쓰이는지 한 눈에 정리)
역할 기반 에이전트들의 대화형 협업 및 자율 오케스트레이션 파이프라인.
멀티 에이전트 DAG 오케스트레이터 (플래너 통해 체인 내장 및 동적 분기 처리).
SQLite 기반 harnessJobStore로 작업 계보(Lineage) 영구화 및 크래시 자동 복구.
터미널, 파일, 브라우저, 코드 실행, 이미지/영상 생성, 웹 검색, 메모리, 위임(delegation) 등.
skills/ 디렉토리의 카테고리별 마크다운 에이전트 스킬 주입.
OpenAI, Anthropic, OpenRouter, xAI, DeepSeek, Ollama, LM Studio 등 원클릭 전환.
TabManager를 통한 다중 웹 콘텐츠 뷰 및 독립적 상태 격리.
Model Context Protocol 서버 연동 및 툴 레지스트리 자동 바인딩.
┌────────────────────────────────────────────────────────────────────────┐ │ Electron Main Process │ │ (electron/main.js - 진입점) │ └───────┬───────────────────────────────┬────────────────────────────────┘ │ spawn │ loadURL ▼ ▼ ┌───────────────────────────┐ ┌────────────────────────────────────────┐ │ server.exe (Port 9090) │ │ Electron Renderer (UI) │ │ Python HTTP Server │ │ │ │ │ │ ┌──────────────────────────────────┐ │ │ ┌─────────────────────┐ │ │ │ ServerSupervisor / TabManager │ │ │ │ router.py (29개 라우트)│ │ │ │ WindowManager / TrayManager │ │ │ └──────────┬──────────┘ │ │ │ IpcHandlers / HeaderNormalizer │ │ │ │ │ │ │ TempCleaner / Logger │ │ │ ┌──────────▼──────────┐ │ │ └──────────────────────────────────┘ │ │ │ streaming.py │ │ │ │ │ │ │ streaming_tools.py │ │ │ ▼ │ │ │ streaming_prompts.py│ │ │ ┌──────────────────────────────────┐ │ │ └──────────┬──────────┘ │ │ │ Static Web UI (Monaco / Chat) │ │ │ ▼ │ │ │ static/index.html │ │ │ ┌─────────────────────┐ │ │ └──────────────────────────────────┘ │ │ │ dynamic / │ │ └────────────────────────────────────────┘ │ │ job_store.py(SQLite)│ │ │ └─────────────────────┘ │ └─────────────┬─────────────┘ │ spawn (optional) ▼ ┌───────────────────────────┐ │ TTS Server (tts_server.py)│ └───────────────────────────┘
server.py는 HTTP 서버를 즉시 바인딩하고, 루틴 프로파일러/Whisper 로딩 등 무거운 작업은 백그라운드 스레드에서 수행합니다. 이를 통해 Electron이 웹소켓 및 REST 응답을 즉시 인지하여 UI 지연 없는 쾌속 로딩을 지원합니다.
| 계층 | 구조 및 역할 |
|---|---|
| Electron | main.js는 진입점 역할만 하고, 실제 기능은 electron/src/ 모듈 8종으로 분리 |
| 라우팅 | 210줄 라우터 api/routes/ 29개 모듈 + 0개 하위 디스패처 체제 |
| 스트리밍 | 스트리밍 로직 streaming.py에서 StreamEmitter, streaming_tools, streaming_prompts 추출 |
| 프론트엔드 | static/modules/panels.js → static/modules/panels/ 8개 서브패널 모듈 |
| 영속성 | 작업 계보를 SQLite(harnessJobStore)에 저장, 크래시 자동 복구 |
daon-agent-system/ ├── electron/ # Electron 메인 프로세스 │ ├── main.js # 진입점 (단일 인스턴스 락, spawn) │ ├── preload.js # 프리로드 스크립트 │ ├── restart_orchestrator.js # 재시작 오케스트레이터 (패치드/클린) │ ├── self_update.js # 자가 업데이트 │ ├── splash.html # 스플래시 화면 │ └── src/ # 기능 모듈 8종 │ ├── ServerSupervisor.js # 서버 고니/복구 │ ├── TabManager.js # 웹 콘텐츠 관리 │ ├── WindowManager.js # 창 관리 │ ├── TrayManager.js # 트레이 관리 │ ├── IpcHandlers.js # IPC 라우팅 │ ├── HeaderNormalizer.js # 헤더 정규화 │ ├── TempCleaner.js # 임시 파일 정리 │ └── Logger.js # 로깅 ├── server.py # Python 백엔드 서버 (HTTP, port 9090) ├── tts_server.py # TTS 전용 서버 ├── api/ # API 모듈 (실제 호출: /api/) │ └── routes/ # HTTP 라우트 29개 모듈 (0개 디스패처) │ ├── chat_routes.py │ ├── dynamic_routes.py # 다이나믹 하네스 │ ├── mcp_routes.py │ └── mobile_routes.py # 모바일 작업실 ├── hermes-agent/ # Hermes 에이전트 프레임워크 ├── skills/ # 에이전트 스킬 (카테고리별 폴더) ├── static/ # 웹 UI 번들 & Monaco 에디터 ├── tests/ # 회귀 테스트 스위트 ├── config.yaml # 서버 설정 ├── daon-server.spec # PyInstaller 스펙 └── package.json # Electron 빌드 설정
npm install
.env 파일에 LLM API 키 등을 바인딩합니다.
npm start
ELECTRON_RUN_AS_NODE=1을 주입하므로 터미널에서 직접 Electron 실행 시 먼저 set ELECTRON_RUN_AS_NODE= 로 해제해야 합니다.
python server.py --no-browser --port 9090
python -m PyInstaller daon-server.spec --noconfirm
➔ dist/server.exe 생성
# Portable (디렉토리) npx electron-builder --win --dir # NSIS 인스톨러 npx electron-builder --win nsis
Phase 2(라우팅)-3(Electron)-4(프론트엔드)-5(영속성) 회귀 테스트를 한 번에 연속 실행합니다.
config.yaml
CORE PARAMETERS
| 항목 | 설명 | 기본값 |
|---|---|---|
| server.host | 바인딩 호스트 | 127.0.0.1 |
| server.port | 서버 포트 | 9090 |
| model.default | 기본 모델 | "" (동적 선택) |
| limits.max_file_bytes | 최대 파일 읽기 크기 | 200000 |
| limits.max_upload_bytes | 최대 업로드 크기 | 20971520 (20MB) |
| toolsets.default | 기본 도구 세트 | browser, file, terminal, code_execution 등 |
| 카테고리 | 용도 및 오케스트레이션 범위 |
|---|---|
| AI | AI 모델/API 연동 및 프롬프트 체인 |
| Automation | 자동화 워크플로우 및 백그라운드 태스크 |
| Browser | 브라우저 제어/크롤링 (Headless Chromium) |
| Coding | 개발 코드 리뷰 및 동적 인터프리터 실행 |
| Design | 디자인 시스템 (UI 토큰 검증, Glassmorphism) |
| System | 시스템 운영/자가 성찰 (self-reflection, security 등) |
data/ 디렉토리: 사용자별 설정·토큰을 포함하므로 .gitignore로 배포에서 제외됩니다.
nul 파일: Windows 예약어 이름으로 일반 삭제가 불가하여 특수 예외 처리되어 있습니다.
ELECTRON_RUN_AS_NODE: VSCode 터미널 실행 시 반드시 사전에 환경변수 unbind 필요.