Skip to content

Latest commit

Β 

History

History
527 lines (441 loc) Β· 24.9 KB

File metadata and controls

527 lines (441 loc) Β· 24.9 KB

XGEN 3.0 β€” μ§„ν–‰ ν˜„ν™©

μ™„λ£Œ 사항

Phase 1: 기반 (MVP) βœ…

ν•­λͺ© 파일 μƒνƒœ
ν”„λ‘œμ νŠΈ ꡬ쑰 pyproject.toml, Dockerfile, 디렉토리 ꡬ쑰 βœ…
@tool λ°μ½”λ ˆμ΄ν„° src/tools/decorator.py βœ…
Tool Registry src/tools/registry.py βœ…
Agent Core λ§ˆμŠ€ν„° 루프 src/core/agent.py βœ…
λŒ€ν™” μ»¨ν…μŠ€νŠΈ src/core/context.py βœ…
LLM ν΄λΌμ΄μ–ΈνŠΈ src/core/model_client.py (OpenAI ν˜Έν™˜) βœ…
Built-in 도ꡬ src/tools/builtin/http.py, db.py, file.py βœ…
CLI cli.py (serve, import, run, tools, connect) βœ…
Trace/Log src/trace/collector.py, exporter.py βœ…
State Store src/store/state.py (PostgreSQL Checkpointer) βœ…
Agent Store src/store/agent_store.py (Agent μ •μ˜ CRUD) βœ…
μ‹€ν–‰ 이λ ₯ src/store/history.py βœ…

Phase 2: AI 개발 + μƒŒλ“œλ°•μŠ€ βœ…

ν•­λͺ© 파일 μƒνƒœ
Docker Sandbox src/sandbox/docker.py (격리싀행, νƒ€μž„μ•„μ›ƒ, λ¦¬μ†ŒμŠ€μ œν•œ) βœ…
Sandbox @tool src/sandbox/runner.py (execute_code, execute_code_with_test) βœ…
AI 도ꡬ 생성 src/tools/generator.py (LLM β†’ μ½”λ“œμƒμ„± β†’ μƒŒλ“œλ°•μŠ€ν…ŒμŠ€νŠΈ β†’ 등둝) βœ…
Human-in-the-Loop src/core/approval.py (승인 λŒ€κΈ° β†’ 승인/거절 β†’ 재개) βœ…
μ‹€νŒ¨ 재개 src/core/agent.py (State Store 연동, resume=True) βœ…
λ©€ν‹°ν„΄ μ»¨ν…μŠ€νŠΈ μ €μž₯ Agent β†’ State Store μžλ™ 체크포인트 βœ…

Phase 3: ν”Œλž«νΌ 톡합 βœ…

ν•­λͺ© 파일 μƒνƒœ
MCP ν΄λΌμ΄μ–ΈνŠΈ src/mcp/client.py (SSE + STDIO) βœ…
MCP β†’ @tool λΈŒλ¦Ώμ§€ src/mcp/bridge.py βœ…
graph-tool-call src/tools/graph_tool.py β€” μ‹€μ œ νŒ¨ν‚€μ§€(0.13.1) 연동 βœ…
Agent Core 연동 _resolve_tools_schema() β€” 도ꡬ 15개+ μ‹œ μžλ™ 검색 λͺ¨λ“œ βœ…
MCP API /api/mcp/connect, /api/mcp/servers βœ…
graph-tool API /api/tools/search, /api/tools/ingest, /api/tools/graph/stats βœ…

Phase 4: 운영 고도화 βœ…

ν•­λͺ© 파일 μƒνƒœ
μ„€μ • 관리 src/core/config.py (ν™˜κ²½λ³€μˆ˜ 기반) βœ…
κΆŒν•œ 관리 src/core/permissions.py (ADMIN/DEVELOPER/USER/VIEWER) βœ…
Agent 버전 관리 src/store/versioning.py βœ…
트리거 src/core/triggers.py (Webhook + μŠ€μΌ€μ€„) βœ…

xgen-workflow API ν˜Έν™˜ βœ…

ν•­λͺ© λ‚΄μš© μƒνƒœ
μš”μ²­ λͺ¨λΈ WorkflowRequest β€” xgen-workflow와 동일 ν•„λ“œ βœ…
SSE 이벀트 포맷 log, tool, data, end, error β€” κΈ°μ‘΄ ν”„λ‘ νŠΈμ—”λ“œ ν˜Έν™˜ βœ…
Deploy 응닡 {success, content, citations, error} + Envelope 포맷 βœ…
API 경둜 /api/workflow/* 전체 경둜 μœ μ§€ βœ…
input_data λ³€ν™˜ str/dict/list/None β†’ μžλ™ λ©”μ‹œμ§€ λ³€ν™˜ βœ…

graph-tool-call 연동 βœ… (μ‹ κ·œ)

ν•­λͺ© λ‚΄μš© μƒνƒœ
νŒ¨ν‚€μ§€ graph-tool-call 0.13.1 μ„€μΉ˜ 및 pyproject.toml μΆ”κ°€ βœ…
GraphToolManager ToolGraph λž˜ν•‘ β€” ingest_from_registry, ingest_openapi, ingest_mcp_tools βœ…
Agent Core 연동 _resolve_tools_schema() β€” 도ꡬ 15개+ μ‹œ μžλ™ graph 검색 βœ…
호좜 이λ ₯ record_call() β€” history-aware retrieval βœ…

xgen-infra 배포 μ„€μ • βœ… (μ‹ κ·œ)

파일 μž‘μ—… μƒνƒœ
dockerfiles/xgen-agent/Dockerfile 생성 (Chromium 제거, κ²½λŸ‰) βœ…
dockerfiles/xgen-agent/Dockerfile.local 생성 (Jenkins 둜컬 λΉŒλ“œμš©) βœ…
k3s/helm-chart/values/xgen-agent.yaml 생성 (ν™˜κ²½λ³€μˆ˜, λ¦¬μ†ŒμŠ€ μ„€μ •) βœ…
k3s/jenkins/config/services.yaml xgen-agent μΆ”κ°€ βœ…
k3s/argocd/projects/xgen.yaml dev/prd에 xgen-agent μΆ”κ°€ βœ…
k3s/argocd/projects/xgen-son.yaml dev/prd에 xgen-agent μΆ”κ°€ βœ…
compose/full-stack/docker-compose.yml xgen-agent μ„œλΉ„μŠ€ μΆ”κ°€ (포트 8010) βœ…
compose/full-stack/docker-compose.dev.yml xgen-agent profile μΆ”κ°€ βœ…

xgen2.0 레포 클둠 βœ… (μ‹ κ·œ)

repos/
β”œβ”€β”€ xgen-infra/            ← λΉŒλ“œ/배포 μ„€μ • (μˆ˜μ •λ¨)
β”œβ”€β”€ xgen-workflow/         ← ꡐ체 λŒ€μƒ (참고용)
β”œβ”€β”€ xgen-core/             ← μœ μ§€ (xgen-agentκ°€ 호좜)
β”œβ”€β”€ xgen-frontend/         ← ν”„λ‘ νŠΈμ—”λ“œ 연동 λŒ€μƒ
β”œβ”€β”€ xgen-model/            ← LLM μΆ”λ‘ 
β”œβ”€β”€ xgen-mcp-station/      ← Phase 3μ—μ„œ 흑수
β”œβ”€β”€ xgen-documents/        ← μœ μ§€
└── xgen-backend-gateway/  ← μœ μ§€

μ‹€μ „ 검증 βœ…

ν…ŒμŠ€νŠΈ ν™˜κ²½ κ²°κ³Ό
GPT-4o-mini λ‹¨μˆœ λŒ€ν™” 둜컬 Python βœ…
도ꡬ μžλ™ 선택 (get_time, calculate) 둜컬 Python βœ…
file_read 도ꡬ (pyproject.toml) Docker 단독 βœ…
db_query 도ꡬ (PostgreSQL) Docker 단독 βœ…
http_request 도ꡬ (httpbin.org) Docker 단독 βœ…
Agent μ €μž₯/λͺ©λ‘ (DB CRUD) Docker 단독 βœ…
ν’€μŠ€νƒ compose DB 연동 compose (PostgreSQL + Redis + xgen-agent) βœ…
ν’€μŠ€νƒ compose LLM λŒ€ν™” compose (GPT-4o-mini + 도ꡬ 7개) βœ…
ν’€μŠ€νƒ compose Agent CRUD compose (μ €μž₯/λͺ©λ‘/λ‘œλ“œ) βœ…
Swagger UI http://localhost:8010/docs βœ…

ν…ŒμŠ€νŠΈ μ½”λ“œ ν˜„ν™©

116개 ν…ŒμŠ€νŠΈ μ „λΆ€ 톡과 (2.27초)

ν…ŒμŠ€νŠΈ 파일 개수 λŒ€μƒ
test_api.py 21 API μ—”λ“œν¬μΈνŠΈ (CRUD, deploy, trace, schedule λ“±)
test_graph_tool.py 20 graph-tool-call 연동 (μ‹€μ œ νŒ¨ν‚€μ§€)
test_sse_adapter.py 11 SSE 이벀트 포맷 ν˜Έν™˜
test_models.py 9 WorkflowRequest μž…λ ₯ λ³€ν™˜
test_context.py 8 λŒ€ν™” μ»¨ν…μŠ€νŠΈ
test_generator.py 6 AI 도ꡬ 생성기
test_permissions.py 6 κΆŒν•œ 관리
test_triggers.py 6 트리거
test_model_client.py 5 LLM 응닡 νŒŒμ‹±
test_mcp.py 5 MCP ν΄λΌμ΄μ–ΈνŠΈ/λΈŒλ¦Ώμ§€
test_trace.py 5 Trace μˆ˜μ§‘κΈ°
test_approval.py 4 Human-in-the-Loop
test_sandbox.py 4 Docker μƒŒλ“œλ°•μŠ€
test_tools.py 4 @tool + Registry
test_config.py 2 ν™˜κ²½λ³€μˆ˜ μ„€μ •

ν˜Έν™˜ API μ—”λ“œν¬μΈνŠΈ 전체 λͺ©λ‘

GET  /health
POST /api/workflow/execute/based_id/stream          ← 핡심 SSE μ‹€ν–‰
POST /api/workflow/execute/based_id/stream/deploy    ← Deploy SSE (둜그 미전솑)
POST /api/workflow/execute/deploy/stream             ← Deploy (json/stream 선택)
POST /api/workflow/execute/deploy/result             ← Java Envelope 응닡
GET  /api/workflow/execute/status                    ← μ‹€ν–‰ μƒνƒœ λͺ©λ‘
GET  /api/workflow/execute/status/{id}               ← μ‹€ν–‰ μƒνƒœ 쑰회
POST /api/workflow/execute/cleanup                   ← μ™„λ£Œ 정리
GET  /api/workflow/list                              ← μ›Œν¬ν”Œλ‘œμš° λͺ©λ‘
POST /api/workflow/save                              ← μ›Œν¬ν”Œλ‘œμš° μ €μž₯
GET  /api/workflow/load/{workflow_id}                ← μ›Œν¬ν”Œλ‘œμš° λ‘œλ“œ
DELETE /api/workflow/delete/{workflow_id}            ← μ›Œν¬ν”Œλ‘œμš° μ‚­μ œ
POST /api/workflow/rename/workflow                   ← 이름 λ³€κ²½
POST /api/workflow/check/workflow                    ← 쑴재 확인
GET  /api/workflow/version/list                      ← 버전 λͺ©λ‘
GET  /api/workflow/version/data                      ← 버전 데이터
GET  /api/workflow/deploy/load/{user_id}/{wf_id}    ← Deploy λ‘œλ“œ
POST /api/workflow/deploy/toggle/{workflow_id}       ← 배포 ν† κΈ€
GET  /api/workflow/deploy/status/{workflow_id}       ← 배포 μƒνƒœ
GET  /api/workflow/deploy/list                       ← 배포 λͺ©λ‘
GET  /api/workflow/trace/list                        ← 트레이슀 λͺ©λ‘
GET  /api/workflow/trace/detail/{trace_id}           ← 트레이슀 상세
GET  /api/workflow/trace/by-interaction/{id}         ← μΈν„°λž™μ…˜λ³„ 트레이슀
POST /api/workflow/schedule/sessions                 ← μŠ€μΌ€μ€„ 생성
GET  /api/workflow/schedule/sessions                 ← μŠ€μΌ€μ€„ λͺ©λ‘
GET  /api/workflow/schedule/status                   ← μŠ€μΌ€μ€„ μƒνƒœ
GET  /api/workflow/performance                       ← μ„±λŠ₯ 톡계
POST /api/agent/run                                  ← xgen3.0 μ „μš© (non-streaming)
GET  /api/tools/list                                 ← 도ꡬ λͺ©λ‘
POST /api/tools/generate                             ← AI 도ꡬ 생성
POST /api/tools/search                               ← graph-tool-call 검색
POST /api/tools/ingest                               ← graph-tool-call μ†ŒμŠ€ μΆ”κ°€
GET  /api/tools/graph/stats                          ← κ·Έλž˜ν”„ 톡계
POST /api/mcp/connect                                ← MCP μ„œλ²„ μ—°κ²°
DELETE /api/mcp/disconnect/{name}                    ← MCP μ—°κ²° ν•΄μ œ
GET  /api/mcp/servers                                ← MCP μ„œλ²„ λͺ©λ‘
POST /api/approval/action                            ← 승인/거절 처리
GET  /api/approval/pending                           ← λŒ€κΈ° 승인 λͺ©λ‘
GET  /api/sessions                                   ← μ„Έμ…˜ λͺ©λ‘
DELETE /api/sessions/{session_id}                    ← μ„Έμ…˜ μ‚­μ œ
GET  /api/history                                    ← μ‹€ν–‰ 이λ ₯

ν’€μŠ€νƒ end-to-end ν…ŒμŠ€νŠΈ ν˜„ν™©

μ„œλΉ„μŠ€ 기동 μƒνƒœ

μ„œλΉ„μŠ€ 포트 μƒνƒœ
PostgreSQL 5432 βœ… healthy
Redis 6379 βœ… healthy
xgen-core 8001 βœ… healthy (DB + Redis)
xgen-agent 8010 βœ… ok (도ꡬ 7개, DB Store 3개)
xgen-frontend 3000 βœ… Ready (Next.js 15.5.7 Turbopack)
xgen-backend-gateway 8000 βœ… running

ν”„λ‘ νŠΈμ—”λ“œ 접속

  • URL: http://localhost:3000
  • 둜그인: admin@xgen.local / admin1234
  • 둜그인 성곡 확인 βœ…

compose μ‹€ν–‰ 방법

cd repos/xgen-infra/compose/full-stack

# .env μ„€μ •
cp .env.dev .env
# GITLAB_TOKEN, MODEL_API_KEY μ„€μ •

# 인프라 + core + agent + frontend 기동
docker compose -f docker-compose.dev.yml up -d --build postgresql redis
docker compose -f docker-compose.dev.yml up -d --build git-cloner xgen-core
docker compose -f docker-compose.dev.yml --profile agent up -d --build xgen-agent
docker compose -f docker-compose.dev.yml --profile frontend up -d --build xgen-frontend

xgen3.0 μ „μš© ν”„λ‘ νŠΈμ—”λ“œ μž¬κ΅¬μ„± βœ… (μ‹ κ·œ)

κΈ°μ‘΄ xgen-frontend(μΊ”λ²„μŠ€ 에디터 쀑심)λ₯Ό xgen3.0 철학에 맞게 λŒ€ν™” 쀑심 UI둜 μ™„μ „ μž¬μ„€κ³„. κΈ°μ‘΄ λ””μžμΈ μ‹œμŠ€ν…œ(색상, 타이포, μŠ€νŽ˜μ΄μ‹±, SCSS νŒ¨ν„΄)을 κ³„μŠΉν•˜λ˜ ꡬ쑰λ₯Ό 근본적으둜 λ³€κ²½.

ν•­λͺ© 파일 μƒνƒœ
ν”„λ‘œμ νŠΈ μ„€μ • frontend/package.json, next.config.ts, tsconfig.json βœ…
λ””μžμΈ μ‹œμŠ€ν…œ frontend/src/app/_common/_variables.scss, globals.css βœ…
곡톡 νƒ€μž… frontend/src/app/_common/types/index.ts (Agent, Message, Trace, SSE) βœ…
API ν΄λΌμ΄μ–ΈνŠΈ frontend/src/app/_common/api/ (client, config, agentAPI β€” SSE 슀트리밍 포함) βœ…
루트 λ ˆμ΄μ•„μ›ƒ + μ‚¬μ΄λ“œλ°” frontend/src/app/layout.tsx, Sidebar/ (λŒ€ν™”/μ—μ΄μ „νŠΈ/트레이슀/μ„€μ •) βœ…
λŒ€μ‹œλ³΄λ“œ (/) frontend/src/app/page.tsx (Agent λͺ©λ‘, 톡계, λΉ λ₯Έ λŒ€ν™” μ‹œμž‘) βœ…
λŒ€ν™” UI (/chat/[agentId]) frontend/src/app/chat/[agentId]/page.tsx β€” 핡심 νŽ˜μ΄μ§€ βœ…
Trace λ·°μ–΄ (/trace/[traceId]) frontend/src/app/trace/[traceId]/page.tsx (읽기 μ „μš© Flow Viewer) βœ…
Agent 상세 (/agents/[agentId]) frontend/src/app/agents/[agentId]/page.tsx (κ°œμš”/도ꡬ/이λ ₯ νƒ­) βœ…
ChatMessage μ»΄ν¬λ„ŒνŠΈ ChatMessage/ (Think블둝, ToolCall, μŠΉμΈμš”μ²­, 볡사) βœ…
TraceTimeline μ»΄ν¬λ„ŒνŠΈ TraceTimeline/ (μ‹€ν–‰ 흐름 νƒ€μž„λΌμΈ) βœ…

κΈ°μ‘΄ λŒ€λΉ„ 핡심 λ³€κ²½:

κΈ°μ‘΄ xgen-frontend μƒˆ frontend/
μΊ”λ²„μŠ€ 에디터가 메인 (/canvas, ReactFlow λ“œλž˜κ·Έμ•€λ“œλ‘­) λŒ€ν™” UIκ°€ 메인 (/chat/[agentId])
229개 SCSS λͺ¨λ“ˆ, 61KB ChatInterface.tsx 12개 SCSS λͺ¨λ“ˆλ‘œ κ²½λŸ‰ν™”
LangChain λ…Έλ“œ μ‹œμŠ€ν…œ @tool 기반 도ꡬ ν‘œμ‹œ
LocalStorage μƒνƒœκ΄€λ¦¬ μ„œλ²„ State Store 연동
λΉ„μ£Όμ–Ό 에디터 (μˆ˜μ •μš©) 읽기 μ „μš© Trace λ·°μ–΄λ§Œ ("μˆ˜μ •μ€ λŒ€ν™”λ‘œ")

λŒ€ν™” UI 핡심 κΈ°λŠ₯:

  • SSE 슀트리밍: Think β†’ Act β†’ Observe κ³Όμ • μ‹€μ‹œκ°„ ν‘œμ‹œ
  • Think 블둝: 접이식 μΆ”λ‘  κ³Όμ •
  • Tool Call: 도ꡬ 호좜 νŒŒλΌλ―Έν„°/κ²°κ³Ό μ‹€μ‹œκ°„ ν‘œμ‹œ
  • Human-in-the-Loop: 승인/κ±°λΆ€ λ²„νŠΌμ΄ λŒ€ν™” 흐름 μ•ˆμ— μžμ—°μŠ€λŸ½κ²Œ λ“±μž₯
  • Trace 링크: ν—€λ”μ—μ„œ 읽기 μ „μš© Flow Viewer둜 μ¦‰μ‹œ 이동

금일 μ§„ν–‰ 사항 (2026-03-16)

독립 Docker λΉŒλ“œ βœ…

  • xgen-infra 의쑴 제거, docker-compose.yml 단독 λΉŒλ“œ 체계 ꡬ좕
  • docker compose up -d --build ν•œ 방으둜 postgres + xgen-agent + xgen-agent-frontend 기동
  • frontend Dockerfile 생성, μ†ŒμŠ€ λ³Όλ₯¨ 마운트 (ν•«λ¦¬λ‘œλ“œ)
  • .env 파일둜 API ν‚€ 뢄리

ν”„λ‘ νŠΈμ—”λ“œ β†’ xgen-agent SSE 연동 βœ…

  • SSE 이벀트 포맷 λ§€ν•‘ (xgen-workflow ν˜Έν™˜ β†’ xgen3.0 ν”„λ‘ νŠΈμ—”λ“œ)
  • Next.js rewrite SSE 버퍼링 문제 ν•΄κ²° (λΈŒλΌμš°μ € β†’ λ°±μ—”λ“œ 직접 μš”μ²­)
  • CORS μ„€μ • μΆ”κ°€
  • WorkflowRequest.interaction_id null ν—ˆμš© μˆ˜μ •
  • λŒ€ν™” UIμ—μ„œ LLM 응닡 + 도ꡬ 호좜 SSE 슀트리밍 확인

xgen-core / xgen-documents @tool λž˜ν•‘ βœ…

  • src/tools/builtin/xgen_core.py β€” DB 8개 + Config 4개 + Auth 1개 = 13개 도ꡬ
  • src/tools/builtin/xgen_documents.py β€” RAG 3개 + Embedding 3개 + λ¬Έμ„œμ²˜λ¦¬ 3개 = 9개 도ꡬ
  • 총 도ꡬ 29개 (7 빌트인 + 13 xgen-core + 9 xgen-documents)
  • 15개 초과둜 graph-tool-call μžλ™ 검색 λͺ¨λ“œ λ™μž‘ 확인
  • LLM이 "μ£Όλ¬Έ μ‘°νšŒν•΄μ€˜" β†’ core_db_find μžλ™ 선택 확인

ν”„λ‘ νŠΈμ—”λ“œ 버그 μˆ˜μ • βœ…

  • listAgents() API 응닡 ν˜•νƒœ λ§€ν•‘ ({agents:[]} β†’ λ°°μ—΄)
  • AgentSummary ν•„λ“œ λ³€ν™˜ (toolsβ†’tool_count, status κΈ°λ³Έκ°’)
  • <a> 쀑첩 μ—λŸ¬ μˆ˜μ • (agents νŽ˜μ΄μ§€)
  • stats.totalTools NaN μˆ˜μ •
  • μ„€μ • νŽ˜μ΄μ§€ (/settings) μ‹ κ·œ 생성 β€” μ„œλΉ„μŠ€ μƒνƒœ, 도ꡬ λͺ©λ‘, MCP, ν™˜κ²½μ •λ³΄

κ΄€μ°° κ°€λŠ₯μ„± β€” Trace / μ‹€ν–‰ 이λ ₯ UI βœ…

ν•­λͺ© λ‚΄μš© μƒνƒœ
Trace λͺ©λ‘ νŽ˜μ΄μ§€ /trace β€” μΉ΄λ“œν˜• λͺ©λ‘, νŽ˜μ΄μ§€λ„€μ΄μ…˜, step λ°°μ§€ βœ…
Trace 상세 νŽ˜μ΄μ§€ /trace/[traceId] β€” μ‹€μ œ 데이터 μ—°κ²° (데λͺ¨ 폴백 제거) βœ…
μ‹€ν–‰ 이λ ₯ νŽ˜μ΄μ§€ /history β€” ν…Œμ΄λΈ”ν˜•, μ—μ΄μ „νŠΈ ν•„ν„°, Trace 링크 βœ…
Sidebar 메뉴 "μ‹€ν–‰ 이λ ₯" μΆ”κ°€ (FiClock μ•„μ΄μ½˜) βœ…
API URL μˆ˜μ • listTraces, getTrace 잘λͺ»λœ URL β†’ μ‹€μ œ λ°±μ—”λ“œ 경둜 μ—°κ²° βœ…
Trace step 기둝 Agent Coreμ—μ„œ Think/Tool/Response step을 trace에 μžλ™ 기둝 βœ…
μ‹€ν–‰ 이λ ₯ μžλ™ 기둝 SSE μ‹€ν–‰ μ™„λ£Œ μ‹œ history_store.record() 호좜 μΆ”κ°€ βœ…
λ°±μ—”λ“œβ†’ν”„λ‘ νŠΈ ν•„λ“œ 보정 normalizeTrace() β€” start_timeβ†’timestamp, duration_msβ†’total_duration_ms βœ…

Mode A: μ—μ΄μ „νŠΈ 없이 λ°”λ‘œ λŒ€ν™” βœ…

plan.md의 핡심 λΉ„μ „ κ΅¬ν˜„ β€” "ν•˜λ‚˜μ˜ λŒ€ν™”μ°½μ—μ„œ AIκ°€ 직접 agentλ₯Ό κ°œλ°œΒ·μ‹€ν–‰"

ν•­λͺ© λ‚΄μš© μƒνƒœ
μ—μ΄μ „νŠΈ 관리 도ꡬ src/tools/builtin/agent_mgmt.py β€” create/list/get/update/delete_agent + list_available_tools (6개) βœ…
graph-tool-call 항상 ν™œμ„± μž„κ³„κ°’ 15 β†’ 0 λ³€κ²½, 도ꡬ 수 λ¬΄κ΄€ν•˜κ²Œ 항상 검색 λͺ¨λ“œ βœ…
메타 μ—μ΄μ „νŠΈ λΆˆν•„μš” 별도 ν”„λ‘¬ν”„νŠΈ 없이 graph searchκ°€ create_agent λ“± μžλ™ 탐색 βœ…
/chat λ°”λ‘œ λŒ€ν™” μ—μ΄μ „νŠΈ 선택 없이 default둜 μ¦‰μ‹œ λŒ€ν™” μ‹œμž‘ βœ…
λŒ€ν™” 이λ ₯ ν‘œμ‹œ /chat μ›°μ»΄ 화면에 졜근 λŒ€ν™” 5건 + λΉ λ₯Έ ν”„λ‘¬ν”„νŠΈ 4개 βœ…
DB μ—μ΄μ „νŠΈ λ‘œλ“œ _create_agentμ—μ„œ agent_store.load() β†’ system_prompt/model/approval μžλ™ 적용 βœ…
총 도ꡬ 40개 κΈ°μ‘΄ 34 + μ—μ΄μ „νŠΈ 관리 6개 βœ…

λ™μž‘ 흐름:

μ‚¬μš©μž: "μ£Όλ¬Έ 쑰회 μ—μ΄μ „νŠΈ λ§Œλ“€μ–΄μ€˜"
  β†’ graph-tool-call이 create_agent 도ꡬ 검색
  β†’ LLM이 list_available_tools β†’ create_agent μˆœμ„œλ‘œ 호좜
  β†’ DB에 μ—μ΄μ „νŠΈ μ •μ˜ μ €μž₯
  β†’ μ‚¬μš©μžμ—κ²Œ κ²°κ³Ό 보고

Docker Sandbox 볡ꡬ βœ…

ν•­λͺ© λ‚΄μš© μƒνƒœ
docker.sock 마운트 docker-compose.yml에 /var/run/docker.sock λ³Όλ₯¨ μΆ”κ°€ βœ…
Docker CLI μ„€μΉ˜ Dockerfile에 Docker CLI μ„€μΉ˜ 슀크립트 μΆ”κ°€ βœ…
stdin 방식 μ‹€ν–‰ 파일 마운트 λŒ€μ‹  stdin으둜 μ½”λ“œ 전달 (μ»¨ν…Œμ΄λ„ˆ 경둜 곡유 문제 ν•΄κ²°) βœ…
λ³΄μ•ˆ ν”Œλž˜κ·Έ ν˜Έν™˜ --no-new-privileges β†’ --security-opt no-new-privileges βœ…
execute_code 검증 print(sum(range(1,11))) β†’ stdout: "55", exit_code: 0, 328ms βœ…
execute_code_with_test 검증 add(1,2)==3 β†’ tests_passed: true, 409ms βœ…

Human-in-the-Loop e2e 검증 βœ…

ν•­λͺ© λ‚΄μš© μƒνƒœ
_active_agents 등둝 SSE μ‹€ν–‰ μ‹œ agent 등둝, μ™„λ£Œ μ‹œ 제거 βœ…
ν”„λ‘ νŠΈ API μˆ˜μ • /api/workflow/approval β†’ /api/approval/action, request_id + action μŠ€ν‚€λ§ˆ βœ…
SSE approval 이벀트 log 이벀트의 approval ν•„λ“œ 감지 β†’ approval_required λ³€ν™˜ βœ…
ApprovalRequest.request_id νƒ€μž… + SSE ν•Έλ“€λŸ¬ + ChatMessage 콜백 전체 μ—°κ²° βœ…

e2e ν…ŒμŠ€νŠΈ κ²°κ³Ό:

1. SSE μ‹œμž‘ β†’ approval_required (request_id: apr_617ebd75)
2. GET /api/approval/pending β†’ pending 1건
3. POST /api/approval/action β†’ approve 성곡
4. 승인 ν›„ db_query μ‹€ν–‰ β†’ SELECT 1 β†’ rows: [{?column?: 1}]
5. LLM 응닡 β†’ "κ²°κ³Όκ°€ μ„±κ³΅μ μœΌλ‘œ λ°˜ν™˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€"

μ—μ΄μ „νŠΈ 생성 ν›„ μ „ν™˜ βœ…

ν•­λͺ© λ‚΄μš© μƒνƒœ
ChatMessage 링크 create_agent 성곡 μ‹œ "μ—μ΄μ „νŠΈμ™€ λŒ€ν™”ν•˜κΈ°" 링크 μžλ™ ν‘œμ‹œ βœ…
링크 이동 /chat/{agentName}으둜 μ¦‰μ‹œ 이동 κ°€λŠ₯ βœ…

금일 μ§„ν–‰ 사항 (2026-03-17)

create_tool ↔ ToolGenerator e2e μ—°κ²° βœ…

plan.md Mode A 핡심 λΉ„μ „ "AIκ°€ μ½”λ“œ 생성 β†’ μƒŒλ“œλ°•μŠ€ ν…ŒμŠ€νŠΈ β†’ 등둝" μ™„μ„±.

ν•­λͺ© λ‚΄μš© μƒνƒœ
ToolGenerator μ£Όμž… app.py startupμ—μ„œ ModelClient + ToolGenerator μ΄ˆκΈ°ν™” β†’ set_tool_generator() βœ…
create_tool μ‹€μ—°κ²° create_tool 호좜 β†’ ToolGenerator.generate() μ‹€ν–‰ (κΈ°μ‘΄ "pending" λ°˜ν™˜ 제거) βœ…
μ½”λ“œ+ν…ŒμŠ€νŠΈ λ™μ‹œ 생성 LLM ν”„λ‘¬ν”„νŠΈμ— python + test 블둝 2개 좜λ ₯ μš”κ΅¬, _extract_code_and_test() νŒŒμ‹± βœ…
문법 검증 μƒŒλ“œλ°•μŠ€μ—μ„œ @tool λͺ¨ν‚Ή + μ½”λ“œ λ‘œλ“œ β†’ SYNTAX_OK 확인 βœ…
κΈ°λŠ₯ ν…ŒμŠ€νŠΈ μƒŒλ“œλ°•μŠ€μ—μ„œ μ½”λ“œ+ν…ŒμŠ€νŠΈ ν•¨κ»˜ μ‹€ν–‰ β†’ ALL_TESTS_PASSED assert 검증 βœ…
파일 μ €μž₯ + Registry 등둝 tools/{name}.py μ €μž₯ β†’ load_from_file() β†’ graph-tool-call ingest βœ…
μ „ 단계 λ‘œκΉ… [ToolGenerator] μ ‘λ‘μ‚¬λ‘œ μƒμ„±β†’κ²€μ¦β†’ν…ŒμŠ€νŠΈβ†’μ €μž₯→등둝 μ „ κ³Όμ • INFO/ERROR 둜그 βœ…

e2e 검증 κ²°κ³Ό:

μ‚¬μš©μž: "ν”Όλ³΄λ‚˜μΉ˜ μˆ˜μ—΄μ˜ n번째 값을 κ΅¬ν•˜λŠ” 도ꡬλ₯Ό λ§Œλ“€μ–΄μ€˜"
  β†’ LLM이 μ½”λ“œ(532자) + ν…ŒμŠ€νŠΈ(591자) 생성
  β†’ 문법 검증 톡과 βœ“
  β†’ κΈ°λŠ₯ ν…ŒμŠ€νŠΈ: fibonacci(0)=0, fibonacci(1)=1, fibonacci(5)=5, fibonacci(10)=55 β†’ ALL_TESTS_PASSED βœ“
  β†’ tools/fibonacci.py μ €μž₯ β†’ Registry 등둝
  β†’ 이후 "fibonacci(10) κ΅¬ν•΄μ€˜" β†’ {"fibonacci": 55} μ¦‰μ‹œ μ‹€ν–‰

graph-tool-call κ³ κΈ‰ κΈ°λŠ₯ 적용 βœ…

κΈ°λŠ₯ λ‚΄μš© μƒνƒœ
auto_organize() startup μ‹œ 41개 도ꡬ μžλ™ λΆ„λ₯˜ β†’ 16개 도메인, 36개 μΉ΄ν…Œκ³ λ¦¬ βœ…
validate_tool_call() Agent Coreμ—μ„œ 도ꡬ 이름 μ˜€νƒ€ fuzzy matching μžλ™ ꡐ정 βœ…
analyze() API GET /api/tools/graph/analyze β€” 쀑볡/좩돌/κ³ μ•„/μΉ΄ν…Œκ³ λ¦¬ 리포트 βœ…
find_duplicates() API GET /api/tools/graph/duplicates β€” 5단계 νŒŒμ΄ν”„λΌμΈ 쀑볡 탐지 βœ…
GraphToolManager startup μ΄ˆκΈ°ν™” app.pyμ—μ„œ λ°”λ‘œ μ΄ˆκΈ°ν™” β†’ app.state.graph_tool_manager 등둝 βœ…

ν”„λ‘ νŠΈμ—”λ“œ API ν”„λ‘μ‹œ μˆ˜μ • βœ…

ν•­λͺ© λ‚΄μš© μƒνƒœ
REST/SSE 뢄리 BASE_URL=''(ν”„λ‘μ‹œ) + STREAM_URL=hostname:8010(직접) βœ…
next.config.ts /api/history, /api/approval/*, /api/sessions/* rewrite μΆ”κ°€ βœ…
NEXT_PUBLIC_BACKEND_URL 제거 Turbopack μ»΄νŒŒμΌνƒ€μž„ 인라인 문제 ν•΄κ²° βœ…

λŒ€ν™” 이λ ₯ μœ μ§€ (μ„Έμ…˜ 볡원) βœ…

ν•­λͺ© λ‚΄μš© μƒνƒœ
chatSession.ts μ‹ κ·œ sessionStorage에 sessionId + messages μ €μž₯/볡원 βœ…
historyToMessages() λ°±μ—”λ“œ HistoryEntry β†’ Message[] λ³€ν™˜ (도ꡬ 호좜 포함) βœ…
/chat 볡원 νŽ˜μ΄μ§€ 마운트 β†’ sessionStorage β†’ fallback: λ°±μ—”λ“œ history API βœ…
/chat/[agentId] 볡원 agentId별 독립 μ„Έμ…˜ 관리 βœ…
Hydration μ—λŸ¬ μˆ˜μ • SSR/CSR HTML 뢈일치 β†’ useEffectμ—μ„œλ§Œ 볡원 βœ…

기타 μˆ˜μ •

ν•­λͺ© λ‚΄μš© μƒνƒœ
test_graph_tool.py threshold=0 변경에 맞게 ν…ŒμŠ€νŠΈ μˆ˜μ • (κΈ°μ‘΄ 2개 μ‹€νŒ¨ ν•΄μ†Œ) βœ…
총 ν…ŒμŠ€νŠΈ 132 passed, 0 failed (0.98s) βœ…

λ‹€μŒ μ§„ν–‰ μˆœμ„œ

Step 1: MCP Station 흑수 ν…ŒμŠ€νŠΈ

  • xgen-mcp-station이 ν•˜λŠ” 역할을 xgen-agent λ‚΄μž₯ MCP ν΄λΌμ΄μ–ΈνŠΈλ‘œ λŒ€μ²΄ κ°€λŠ₯ν•œμ§€ 확인

Step 2: API 경둜 λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ (선택)

  • /api/workflow/* β†’ /api/agent/* 점진적 μ „ν™˜

Step 3: graph-tool-call μΆ”κ°€ κΈ°λŠ₯

  • enable_embedding() β€” 의미 검색 (ν‚€μ›Œλ“œ 미슀 ν•΄κ²°)
  • enhanced/full 검색 λͺ¨λ“œ β€” 볡합 쿼리 λΆ„ν•΄

ν”„λ‘œμ νŠΈ 파일 ꡬ쑰

xgen3.0/
β”œβ”€β”€ pyproject.toml
β”œβ”€β”€ Dockerfile
β”œβ”€β”€ docker-compose.yml           ← 단독 μ‹€ν–‰μš©
β”œβ”€β”€ cli.py
β”œβ”€β”€ plan.md
β”œβ”€β”€ PROGRESS.md                  ← 이 파일
β”œβ”€β”€ agents/
β”‚   └── customer-support.yaml
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ api/
β”‚   β”‚   β”œβ”€β”€ app.py
β”‚   β”‚   β”œβ”€β”€ routes.py
β”‚   β”‚   β”œβ”€β”€ models.py
β”‚   β”‚   └── sse_adapter.py
β”‚   β”œβ”€β”€ core/
β”‚   β”‚   β”œβ”€β”€ agent.py             ← graph-tool-call 연동 포함
β”‚   β”‚   β”œβ”€β”€ approval.py
β”‚   β”‚   β”œβ”€β”€ config.py
β”‚   β”‚   β”œβ”€β”€ context.py
β”‚   β”‚   β”œβ”€β”€ model_client.py
β”‚   β”‚   β”œβ”€β”€ permissions.py
β”‚   β”‚   β”œβ”€β”€ planner.py
β”‚   β”‚   └── triggers.py
β”‚   β”œβ”€β”€ tools/
β”‚   β”‚   β”œβ”€β”€ decorator.py
β”‚   β”‚   β”œβ”€β”€ registry.py
β”‚   β”‚   β”œβ”€β”€ generator.py
β”‚   β”‚   β”œβ”€β”€ graph_tool.py        ← μ‹€μ œ graph-tool-call νŒ¨ν‚€μ§€ λž˜ν•‘ (항상 ν™œμ„±)
β”‚   β”‚   └── builtin/ (http, db, file, xgen_core, xgen_documents, xgen_utils, agent_mgmt)
β”‚   β”œβ”€β”€ sandbox/
β”‚   β”‚   β”œβ”€β”€ docker.py
β”‚   β”‚   └── runner.py
β”‚   β”œβ”€β”€ mcp/
β”‚   β”‚   β”œβ”€β”€ client.py
β”‚   β”‚   └── bridge.py
β”‚   β”œβ”€β”€ store/
β”‚   β”‚   β”œβ”€β”€ state.py
β”‚   β”‚   β”œβ”€β”€ agent_store.py
β”‚   β”‚   β”œβ”€β”€ history.py
β”‚   β”‚   └── versioning.py
β”‚   └── trace/
β”‚       β”œβ”€β”€ collector.py
β”‚       └── exporter.py
β”œβ”€β”€ frontend/                    ← xgen3.0 μ „μš© ν”„λ‘ νŠΈμ—”λ“œ (λŒ€ν™” 쀑심)
β”‚   β”œβ”€β”€ package.json             (Next.js 15 + React 19)
β”‚   β”œβ”€β”€ next.config.ts           (/api/workflow/* ν”„λ‘μ‹œ)
β”‚   └── src/app/
β”‚       β”œβ”€β”€ layout.tsx           (Sidebar + Content)
β”‚       β”œβ”€β”€ page.tsx             (/ λŒ€μ‹œλ³΄λ“œ)
β”‚       β”œβ”€β”€ chat/               (β˜… λ°”λ‘œ λŒ€ν™” μ‹œμž‘ β€” default μ—μ΄μ „νŠΈ)
β”‚       β”œβ”€β”€ chat/[agentId]/     (νŠΉμ • μ—μ΄μ „νŠΈ λŒ€ν™” UI)
β”‚       β”œβ”€β”€ trace/              (Trace λͺ©λ‘)
β”‚       β”œβ”€β”€ trace/[traceId]/    (Trace 상세 β€” μ‹€ν–‰ 흐름 νƒ€μž„λΌμΈ)
β”‚       β”œβ”€β”€ history/            (μ‹€ν–‰ 이λ ₯ β€” ν…Œμ΄λΈ”ν˜•)
β”‚       β”œβ”€β”€ agents/[agentId]/   (Agent 상세)
β”‚       └── _common/            (λ””μžμΈ μ‹œμŠ€ν…œ, API, μ»΄ν¬λ„ŒνŠΈ)
β”œβ”€β”€ repos/                       ← xgen2.0 클둠 (둜컬 μ‹€ν—˜μš©)
β”‚   β”œβ”€β”€ xgen-infra/              ← 배포 μ„€μ • μˆ˜μ •λ¨
β”‚   β”œβ”€β”€ xgen-workflow/
β”‚   β”œβ”€β”€ xgen-core/
β”‚   β”œβ”€β”€ xgen-frontend/
β”‚   β”œβ”€β”€ xgen-model/
β”‚   β”œβ”€β”€ xgen-mcp-station/
β”‚   β”œβ”€β”€ xgen-documents/
β”‚   └── xgen-backend-gateway/
β”œβ”€β”€ tests/ (16개 파일, 116개 ν…ŒμŠ€νŠΈ)
└── tools/                       (μ»€μŠ€ν…€ 도ꡬ 디렉토리)

ν™˜κ²½ 정보

ν•­λͺ© κ°’
Python 3.12.10 (둜컬), 3.14-slim (Docker)
Docker 29.2.1
LLM GPT-4o-mini (OpenAI API)
DB PostgreSQL 15.4-alpine
graph-tool-call 0.13.1
ν’€μŠ€νƒ compose repos/xgen-infra/compose/full-stack/docker-compose.dev.yml
xgen-agent 포트 8010 (compose), 8000 (단독)
Swagger UI http://localhost:8010/docs