docs(README): 更新项目说明文档,完善架构与启动指南

- 调整 CLAUDE.md 内容,增加使用指导和架构概览
- 补充微服务启动说明及单服务启动命令
- 明确 Gateway 服务器四阶段启动流程和职责划分
- 细化后端目录结构说明,补充主要文件职责描述
- 新增系统分层结构图,优化整体架构理解
- 更新 .gitignore,添加 runs 目录忽略规则
- 同步 .omc 相关状态文件,更新项目状态跟踪信息
This commit is contained in:
2026-03-24 17:19:31 +08:00
parent da6d642aaa
commit 16bb3c4211
20 changed files with 556 additions and 563 deletions

View File

@@ -1,6 +1,6 @@
{
"version": "1.0.0",
"lastScanned": 1773938154948,
"lastScanned": 1774313111650,
"projectRoot": "/Users/cillin/workspeace/evotraders",
"techStack": {
"languages": [
@@ -11,14 +11,6 @@
"markers": [
"pyproject.toml"
]
},
{
"name": "C/C++",
"version": null,
"confidence": "high",
"markers": [
"Makefile"
]
}
],
"frameworks": [
@@ -32,8 +24,8 @@
"runtime": null
},
"build": {
"buildCommand": "make build",
"testCommand": "make test",
"buildCommand": null,
"testCommand": "pytest",
"lintCommand": "ruff check",
"devCommand": null,
"scripts": {}
@@ -58,24 +50,13 @@
},
"customNotes": [],
"directoryMap": {
"agent-service": {
"path": "agent-service",
"purpose": null,
"fileCount": 2,
"lastAccessed": 1773938154941,
"keyFiles": [
"Dockerfile",
"requirements.txt"
]
},
"backend": {
"path": "backend",
"purpose": null,
"fileCount": 5,
"lastAccessed": 1773938154941,
"fileCount": 4,
"lastAccessed": 1774313111639,
"keyFiles": [
"__init__.py",
"app.py",
"cli.py",
"gateway_server.py",
"main.py"
@@ -85,37 +66,41 @@
"path": "backtest",
"purpose": null,
"fileCount": 0,
"lastAccessed": 1773938154941,
"lastAccessed": 1774313111640,
"keyFiles": []
},
"data": {
"path": "data",
"purpose": "Data files",
"fileCount": 1,
"lastAccessed": 1773938154941,
"fileCount": 3,
"lastAccessed": 1774313111640,
"keyFiles": [
"market_research.db"
"market_research.db",
"market_research.db-shm",
"market_research.db-wal"
]
},
"deploy": {
"path": "deploy",
"purpose": null,
"fileCount": 0,
"lastAccessed": 1773938154942,
"lastAccessed": 1774313111640,
"keyFiles": []
},
"docs": {
"path": "docs",
"purpose": "Documentation",
"fileCount": 0,
"lastAccessed": 1773938154942,
"keyFiles": []
"fileCount": 1,
"lastAccessed": 1774313111641,
"keyFiles": [
"compat-removal-plan.md"
]
},
"evotraders.egg-info": {
"path": "evotraders.egg-info",
"purpose": null,
"fileCount": 6,
"lastAccessed": 1773938154942,
"lastAccessed": 1774313111641,
"keyFiles": [
"PKG-INFO",
"SOURCES.txt",
@@ -128,7 +113,7 @@
"path": "frontend",
"purpose": null,
"fileCount": 13,
"lastAccessed": 1773938154942,
"lastAccessed": 1774313111641,
"keyFiles": [
"README.md",
"components.json",
@@ -141,51 +126,41 @@
"path": "live",
"purpose": null,
"fileCount": 0,
"lastAccessed": 1773938154943,
"lastAccessed": 1774313111642,
"keyFiles": []
},
"logs": {
"path": "logs",
"purpose": null,
"fileCount": 7,
"lastAccessed": 1773938154943,
"fileCount": 6,
"lastAccessed": 1774313111642,
"keyFiles": [
"2026-03-16_00-48-03.log",
"2026-03-18_23-17-29.log",
"2026-03-18_23-17-30.2026-03-18_23-17-30_000801.log.zip",
"2026-03-18_23-17-30.log",
"2026-03-19_00-18-04.log"
]
},
"news-service": {
"path": "news-service",
"purpose": null,
"fileCount": 3,
"lastAccessed": 1773938154943,
"keyFiles": [
"Dockerfile",
"requirements.txt"
"2026-03-19_00-18-04.log",
"2026-03-19_00-34-21.log"
]
},
"reference": {
"path": "reference",
"purpose": null,
"fileCount": 0,
"lastAccessed": 1773938154943,
"lastAccessed": 1774313111643,
"keyFiles": []
},
"runs": {
"path": "runs",
"purpose": null,
"fileCount": 0,
"lastAccessed": 1773938154944,
"lastAccessed": 1774313111643,
"keyFiles": []
},
"scripts": {
"path": "scripts",
"purpose": "Build/utility scripts",
"fileCount": 1,
"lastAccessed": 1773938154944,
"lastAccessed": 1774313111644,
"keyFiles": [
"run_prod.sh"
]
@@ -194,7 +169,7 @@
"path": "services",
"purpose": "Business logic services",
"fileCount": 1,
"lastAccessed": 1773938154944,
"lastAccessed": 1774313111644,
"keyFiles": [
"README.md"
]
@@ -203,43 +178,21 @@
"path": "shared",
"purpose": null,
"fileCount": 0,
"lastAccessed": 1773938154944,
"lastAccessed": 1774313111644,
"keyFiles": []
},
"trading-service": {
"path": "trading-service",
"purpose": null,
"fileCount": 4,
"lastAccessed": 1773938154944,
"keyFiles": [
"Dockerfile",
"README.md",
"requirements.txt"
]
},
"workspaces": {
"path": "workspaces",
"purpose": null,
"fileCount": 0,
"lastAccessed": 1773938154944,
"lastAccessed": 1774313111645,
"keyFiles": []
},
"agent-service/src": {
"path": "agent-service/src",
"purpose": "Source code",
"fileCount": 5,
"lastAccessed": 1773938154944,
"keyFiles": [
"__init__.py",
"config.py",
"main.py"
]
},
"backend/api": {
"path": "backend/api",
"purpose": "API routes",
"fileCount": 5,
"lastAccessed": 1773938154944,
"lastAccessed": 1774313111645,
"keyFiles": [
"__init__.py",
"agents.py",
@@ -250,7 +203,7 @@
"path": "backend/config",
"purpose": "Configuration files",
"fileCount": 6,
"lastAccessed": 1773938154944,
"lastAccessed": 1774313111646,
"keyFiles": [
"__init__.py",
"agent_profiles.yaml",
@@ -261,7 +214,7 @@
"path": "backend/data",
"purpose": "Data files",
"fileCount": 13,
"lastAccessed": 1773938154944,
"lastAccessed": 1774313111647,
"keyFiles": [
"__init__.py",
"cache.py",
@@ -272,7 +225,7 @@
"path": "docs/assets",
"purpose": "Static assets",
"fileCount": 5,
"lastAccessed": 1773938154944,
"lastAccessed": 1774313111647,
"keyFiles": [
"dashboard.jpg",
"evotraders_demo.gif",
@@ -283,7 +236,7 @@
"path": "frontend/dist",
"purpose": "Distribution/build output",
"fileCount": 2,
"lastAccessed": 1773938154945,
"lastAccessed": 1774313111647,
"keyFiles": [
"index.html",
"trading_logo.png"
@@ -293,331 +246,261 @@
"path": "frontend/node_modules",
"purpose": "Dependencies",
"fileCount": 1,
"lastAccessed": 1773938154947,
"lastAccessed": 1774313111650,
"keyFiles": []
},
"news-service/src": {
"path": "news-service/src",
"purpose": "Source code",
"fileCount": 3,
"lastAccessed": 1773938154948,
"keyFiles": [
"__init__.py",
"config.py",
"main.py"
]
},
"trading-service/src": {
"path": "trading-service/src",
"purpose": "Source code",
"fileCount": 8,
"lastAccessed": 1773938154948,
"keyFiles": [
"__init__.py",
"config.py",
"main.py"
]
}
},
"hotPaths": [
{
"path": "backend/agents/factory.py",
"accessCount": 17,
"lastAccessed": 1773939950376,
"path": "CLAUDE.md",
"accessCount": 15,
"lastAccessed": 1774342728155,
"type": "directory"
},
{
"path": "frontend/src/App.jsx",
"accessCount": 10,
"lastAccessed": 1774339397617,
"type": "file"
},
{
"path": "backend",
"accessCount": 16,
"lastAccessed": 1773940042371,
"type": "directory"
"path": "frontend/src/hooks/useWebsocketSessionSync.js",
"accessCount": 4,
"lastAccessed": 1774313470024,
"type": "file"
},
{
"path": "",
"accessCount": 13,
"lastAccessed": 1773939899611,
"accessCount": 4,
"lastAccessed": 1774339108220,
"type": "directory"
},
{
"path": "backend/main.py",
"accessCount": 7,
"lastAccessed": 1773939993951,
"type": "file"
},
{
"path": "backend/gateway_server.py",
"accessCount": 7,
"lastAccessed": 1773940004402,
"type": "file"
},
{
"path": "backend/services/news/main.py",
"accessCount": 5,
"lastAccessed": 1773938385662,
"type": "file"
},
{
"path": "backend/core/pipeline.py",
"accessCount": 5,
"lastAccessed": 1773940024933,
"type": "file"
},
{
"path": "backend/services/news/enrich/news_enricher.py",
"accessCount": 4,
"lastAccessed": 1773938508417,
"type": "file"
},
{
"path": "start-dev.sh",
"accessCount": 4,
"lastAccessed": 1773939259381,
"type": "file"
},
{
"path": "services/README.md",
"accessCount": 4,
"lastAccessed": 1773939281935,
"type": "file"
},
{
"path": "backend/app.py",
"accessCount": 4,
"lastAccessed": 1773939648215,
"type": "file"
},
{
"path": "backend/services/news/routes/news.py",
"accessCount": 3,
"lastAccessed": 1773938438928,
"type": "file"
},
{
"path": "backend/services/news",
"accessCount": 3,
"lastAccessed": 1773938468730,
"type": "directory"
},
{
"path": "frontend/src/config/constants.js",
"accessCount": 3,
"lastAccessed": 1773939204395,
"type": "file"
},
{
"path": "backend/services/gateway.py",
"accessCount": 3,
"lastAccessed": 1773939672930,
"lastAccessed": 1774339389171,
"type": "file"
},
{
"path": "backend/core/__init__.py",
"path": "backend/main.py",
"accessCount": 3,
"lastAccessed": 1773939963627,
"lastAccessed": 1774342613364,
"type": "file"
},
{
"path": "backend/services/trading/main.py",
"path": "frontend/src/store/runtimeStore.js",
"accessCount": 2,
"lastAccessed": 1773938360736,
"lastAccessed": 1774317990919,
"type": "file"
},
{
"path": "backend/services/agents/main.py",
"path": "frontend/src/services/websocket.js",
"accessCount": 2,
"lastAccessed": 1773938361040,
"lastAccessed": 1774318009819,
"type": "file"
},
{
"path": "backend/services/trading/data/__init__.py",
"path": "backend/core/pipeline_runner.py",
"accessCount": 2,
"lastAccessed": 1773938402496,
"lastAccessed": 1774339367538,
"type": "file"
},
{
"path": "backend/services/news/explain/__init__.py",
"path": "backend/runtime/manager.py",
"accessCount": 2,
"lastAccessed": 1773938460019,
"lastAccessed": 1774339367572,
"type": "file"
},
{
"path": "backend/services/news/enrich/__init__.py",
"accessCount": 2,
"lastAccessed": 1773938465216,
"type": "file"
},
{
"path": "backend/services/news/explain/range_explainer.py",
"accessCount": 2,
"lastAccessed": 1773938481152,
"type": "file"
},
{
"path": "backend/services/news/enrich/llm_enricher.py",
"accessCount": 2,
"lastAccessed": 1773938499885,
"type": "file"
},
{
"path": "CLAUDE.md",
"accessCount": 2,
"lastAccessed": 1773939273598,
"type": "file"
},
{
"path": "backend/agents/__init__.py",
"accessCount": 2,
"lastAccessed": 1773939883015,
"type": "file"
},
{
"path": "backend/agents/agent_core.py",
"accessCount": 2,
"lastAccessed": 1773939886997,
"type": "file"
},
{
"path": "Makefile",
"path": "frontend/src/store/marketStore.js",
"accessCount": 1,
"lastAccessed": 1773938226307,
"lastAccessed": 1774313140483,
"type": "file"
},
{
"path": "docker-compose.yml",
"path": "frontend/src/hooks/useFeedProcessor.js",
"accessCount": 1,
"lastAccessed": 1773938226360,
"lastAccessed": 1774313148279,
"type": "file"
},
{
"path": "backend/services/news/shared/trading_client.py",
"path": "frontend/src/components/Header.jsx",
"accessCount": 1,
"lastAccessed": 1773938370618,
"lastAccessed": 1774313156696,
"type": "file"
},
{
"path": "backend/services/agents",
"path": "frontend/src/components/TraderView.jsx",
"accessCount": 1,
"lastAccessed": 1773938397772,
"type": "directory"
},
{
"path": "backend/services/trading",
"accessCount": 1,
"lastAccessed": 1773938397823,
"type": "directory"
},
{
"path": "backend/services",
"accessCount": 1,
"lastAccessed": 1773938405541,
"type": "directory"
},
{
"path": "backend/services/news/config.py",
"accessCount": 1,
"lastAccessed": 1773938638664,
"lastAccessed": 1774313156753,
"type": "file"
},
{
"path": "shared/client/news_client.py",
"path": "frontend/src/store/uiStore.js",
"accessCount": 1,
"lastAccessed": 1773938638715,
"lastAccessed": 1774313187460,
"type": "file"
},
{
"path": "frontend/src/store/portfolioStore.js",
"accessCount": 1,
"lastAccessed": 1774313187511,
"type": "file"
},
{
"path": "frontend/src/store/agentStore.js",
"accessCount": 1,
"lastAccessed": 1774313187573,
"type": "file"
},
{
"path": "frontend/src/hooks/useWebSocketConnection.js",
"accessCount": 1,
"lastAccessed": 1774313279414,
"type": "file"
},
{
"path": "frontend/src/hooks/useStockDataRequests.js",
"accessCount": 1,
"lastAccessed": 1774313319716,
"type": "file"
},
{
"path": "frontend/src/hooks/useAgentDataRequests.js",
"accessCount": 1,
"lastAccessed": 1774313347455,
"type": "file"
},
{
"path": "frontend/src/components/AppShell.jsx",
"accessCount": 1,
"lastAccessed": 1774313396331,
"type": "file"
},
{
"path": "start-dev.sh",
"accessCount": 1,
"lastAccessed": 1774317979859,
"type": "file"
},
{
"path": "backend/apps/agent_service.py",
"accessCount": 1,
"lastAccessed": 1774317984348,
"type": "file"
},
{
"path": "shared/client/trading_client.py",
"accessCount": 1,
"lastAccessed": 1773938638770,
"lastAccessed": 1774317984365,
"type": "file"
},
{
"path": "backend/api",
"path": "backend/apps/trading_service.py",
"accessCount": 1,
"lastAccessed": 1773938669143,
"type": "directory"
},
{
"path": "frontend",
"accessCount": 1,
"lastAccessed": 1773938669195,
"type": "directory"
},
{
"path": ".env.example",
"accessCount": 1,
"lastAccessed": 1773938849397,
"type": "file"
},
{
"path": "frontend/src/services/websocket.js",
"accessCount": 1,
"lastAccessed": 1773938849448,
"type": "file"
},
{
"path": "frontend/src/services/runtimeApi.js",
"accessCount": 1,
"lastAccessed": 1773938849500,
"type": "file"
},
{
"path": "backend/services/agents/routes/websocket.py",
"accessCount": 1,
"lastAccessed": 1773939001692,
"type": "file"
},
{
"path": "backend/services/agents/routes/agents.py",
"accessCount": 1,
"lastAccessed": 1773939016291,
"type": "file"
},
{
"path": "backend/services/agents/routes/run.py",
"accessCount": 1,
"lastAccessed": 1773939016343,
"type": "file"
},
{
"path": "backend/__init__.py",
"accessCount": 1,
"lastAccessed": 1773939648323,
"type": "file"
},
{
"path": "backend/api/__init__.py",
"accessCount": 1,
"lastAccessed": 1773939658650,
"type": "file"
},
{
"path": "backend/runtime/__init__.py",
"accessCount": 1,
"lastAccessed": 1773939658687,
"type": "file"
},
{
"path": "backend/agents/base/evo_agent.py",
"accessCount": 1,
"lastAccessed": 1773939664916,
"type": "file"
},
{
"path": "backend/agents/analyst.py",
"accessCount": 1,
"lastAccessed": 1773939664967,
"type": "file"
},
{
"path": "backend/agents/base/hooks.py",
"accessCount": 1,
"lastAccessed": 1773939672727,
"lastAccessed": 1774317984408,
"type": "file"
},
{
"path": "pyproject.toml",
"accessCount": 1,
"lastAccessed": 1773939672778,
"lastAccessed": 1774317990970,
"type": "file"
},
{
"path": "backend/agents/factory.py",
"accessCount": 1,
"lastAccessed": 1774318009867,
"type": "file"
},
{
"path": "backend/config/constants.py",
"accessCount": 1,
"lastAccessed": 1774318009922,
"type": "file"
},
{
"path": "backend/api/__init__.py",
"accessCount": 1,
"lastAccessed": 1774318009973,
"type": "file"
},
{
"path": "README.md",
"accessCount": 1,
"lastAccessed": 1774339107381,
"type": "file"
},
{
"path": "backend/runtime/registry.py",
"accessCount": 1,
"lastAccessed": 1774339380024,
"type": "file"
},
{
"path": "backend/runtime/session.py",
"accessCount": 1,
"lastAccessed": 1774339380084,
"type": "file"
},
{
"path": "backend/runtime/context.py",
"accessCount": 1,
"lastAccessed": 1774339380120,
"type": "file"
},
{
"path": "backend/runtime/agent_runtime.py",
"accessCount": 1,
"lastAccessed": 1774339380185,
"type": "file"
},
{
"path": "backend/process/supervisor.py",
"accessCount": 1,
"lastAccessed": 1774339389110,
"type": "file"
},
{
"path": "backend/core/pipeline.py",
"accessCount": 1,
"lastAccessed": 1774339389187,
"type": "file"
},
{
"path": "backend/process/models.py",
"accessCount": 1,
"lastAccessed": 1774339397557,
"type": "file"
},
{
"path": "backend/process/registry.py",
"accessCount": 1,
"lastAccessed": 1774339397577,
"type": "file"
},
{
"path": "backend/config/env_config.py",
"accessCount": 1,
"lastAccessed": 1774342678236,
"type": "file"
},
{
"path": "backend/config/data_config.py",
"accessCount": 1,
"lastAccessed": 1774342678253,
"type": "file"
},
{
"path": "frontend/env.template",
"accessCount": 1,
"lastAccessed": 1774342678290,
"type": "file"
},
{
"path": "env.template",
"accessCount": 1,
"lastAccessed": 1774342678310,
"type": "file"
}
],

View File

@@ -1,6 +1,6 @@
{
"timestamp": "2026-03-19T16:36:52.471Z",
"timestamp": "2026-03-24T07:58:12.123Z",
"backgroundTasks": [],
"sessionStartTimestamp": "2026-03-19T16:36:42.224Z",
"sessionId": "ef02339a-1eec-4c7a-95ac-c8cfa0b5067d"
"sessionStartTimestamp": "2026-03-24T07:58:09.417Z",
"sessionId": "fda34772-7bd2-402e-86b2-d656296416f3"
}

View File

@@ -1 +1 @@
{"session_id":"ef02339a-1eec-4c7a-95ac-c8cfa0b5067d","transcript_path":"/Users/cillin/.claude/projects/-Users-cillin-workspeace-evotraders/ef02339a-1eec-4c7a-95ac-c8cfa0b5067d.jsonl","cwd":"/Users/cillin/workspeace/evotraders","model":{"id":"MiniMax-M2.7-highspeed","display_name":"MiniMax-M2.7-highspeed"},"workspace":{"current_dir":"/Users/cillin/workspeace/evotraders","project_dir":"/Users/cillin/workspeace/evotraders","added_dirs":[]},"version":"2.1.78","output_style":{"name":"default"},"cost":{"total_cost_usd":17.458779250000003,"total_duration_ms":1866224,"total_api_duration_ms":1188013,"total_lines_added":257,"total_lines_removed":290},"context_window":{"total_input_tokens":195204,"total_output_tokens":48917,"context_window_size":200000,"current_usage":{"input_tokens":481,"output_tokens":0,"cache_creation_input_tokens":149,"cache_read_input_tokens":163286},"used_percentage":82,"remaining_percentage":18},"exceeds_200k_tokens":false}
{"session_id":"fda34772-7bd2-402e-86b2-d656296416f3","transcript_path":"/Users/cillin/.claude/projects/-Users-cillin-workspeace-evotraders/fda34772-7bd2-402e-86b2-d656296416f3.jsonl","cwd":"/Users/cillin/workspeace/evotraders","model":{"id":"MiniMax-M2.7-highspeed","display_name":"MiniMax-M2.7-highspeed"},"workspace":{"current_dir":"/Users/cillin/workspeace/evotraders","project_dir":"/Users/cillin/workspeace/evotraders","added_dirs":[]},"version":"2.1.78","output_style":{"name":"default"},"cost":{"total_cost_usd":36.63980749999998,"total_duration_ms":69778027,"total_api_duration_ms":2925118,"total_lines_added":3056,"total_lines_removed":4537},"context_window":{"total_input_tokens":910503,"total_output_tokens":145207,"context_window_size":200000,"current_usage":{"input_tokens":507,"output_tokens":247,"cache_creation_input_tokens":4132,"cache_read_input_tokens":96553},"used_percentage":51,"remaining_percentage":49},"exceeds_200k_tokens":false}

View File

@@ -1,3 +1,3 @@
{
"lastSentAt": "2026-03-19T17:02:32.170Z"
"lastSentAt": "2026-03-24T08:58:57.965Z"
}

View File

@@ -1,17 +1,26 @@
{
"agents": [
{
"agent_id": "a8305a91e192b2196",
"agent_id": "abeaf609b74a2b7ee",
"agent_type": "Explore",
"started_at": "2026-03-19T17:00:33.284Z",
"started_at": "2026-03-24T08:01:40.015Z",
"parent_mode": "none",
"status": "completed",
"completed_at": "2026-03-19T17:02:19.439Z",
"duration_ms": 106155
"completed_at": "2026-03-24T08:02:31.822Z",
"duration_ms": 51807
},
{
"agent_id": "afb6750eaae72bc72",
"agent_type": "Explore",
"started_at": "2026-03-24T08:56:21.471Z",
"parent_mode": "none",
"status": "completed",
"completed_at": "2026-03-24T08:57:27.856Z",
"duration_ms": 66385
}
],
"total_spawned": 1,
"total_completed": 1,
"total_spawned": 2,
"total_completed": 2,
"total_failed": 0,
"last_updated": "2026-03-19T17:02:39.175Z"
"last_updated": "2026-03-24T08:59:06.380Z"
}