{"repo": "binbinyu99-crypto/wuxing-flywheel-open", "files": {".env.example": {"09915bee21ec1aba0f33caacdcf22799723b64fe": {"t": 1785604351.4341292, "n": 601, "h": "729b87f6425eb6f3", "c": "# 五行飞轮 LLM 配置\n# 至少配置一个提供商\n\n# DeepSeek (推荐)\nDEEPSEEK_API_KEY=sk-your-deepseek-key\nDEEPSEEK_BASE_URL=https://api.deepseek.com/v1\n\n# OpenAI / GPT\nOPENAI_API_KEY=sk-your-openai-key\nOPENAI_BASE_URL=https://api.openai.com/v1\n\n# Anthropic / Claude\nANTHROPIC_API_KEY=sk-your-anthropic-key\n\n# Kimi / Moonshot\nKIMI_API_KEY=sk-your-kimi-key\nKIMI_BASE_URL=https://api.moonshot.cn/v1\n\n# PostgreSQL (可选,默认使用SQLite)\nPG_HOST=localhost\nPG_PORT=5432\nPG_DATABASE=skycetus\nPG_USER=skycetus\nPG_PASSWORD=your-password\n\n# 飞轮API\nFLYWHEEL_PORT=8100\nFLYWHEEL_TOKEN=your-api-token\n\n# 飞书发布 (可选)\nFEISHU_APP_ID=\nFEISHU_APP_SECRET=\n"}}, "flywheel_api.py": {"28ffd4c842edf97ef287eb244271b3248c61e56a": {"t": 1785604352.9518452, "n": 2890, "h": "b5b7a8618bf1c2f2", "c": "\"\"\"\n五行飞轮 API 服务\nFastAPI 入口\n\n启动: uvicorn flywheel_api:app --host 0.0.0.0 --port 8100\n\"\"\"\n\nimport os\nimport json\nimport asyncio\nfrom datetime import datetime\nfrom typing import Optional\n\nfrom fastapi import FastAPI, HTTPException, Header\nfrom fastapi.middleware.cors import CORSMiddleware\nfrom pydantic import BaseModel\n\nfrom dotenv import load_dotenv\nload_dotenv()\n\nfrom engine.engine_core import run_flywheel\n\napp = FastAPI(\n title=\"SkyCetus Wuxing Flywheel\",\n description=\"🐋 天鲸之城·五行飞轮 — 16-Agent 认知对抗分析系统\",\n version=\"1.0.0-open\",\n)\n\napp.add_middleware(\n CORSMiddleware,\n allow_origins=[\"*\"],\n allow_methods=[\"*\"],\n allow_headers=[\"*\"],\n)\n\n# 存储运行结果(生产环境建议用PostgreSQL)\n_results = {}\n_progress = {}\n\n\nclass AnalyzeRequest(BaseModel):\n topic: str\n depth: str = \"deep\" # \"quick\" (1 round) or \"deep\" (3 rounds)\n max_rounds: Optional[int] = None\n\n\nclass AnalyzeResponse(BaseModel):\n run_id: str\n status: str\n message: str\n\n\n@app.get(\"/health\")\nasync def health():\n return {\n \"status\": \"healthy\",\n \"version\": \"1.0.0-open\",\n \"engine\": \"wuxing-flywheel\",\n \"agents\": 16,\n \"timestamp\": datetime.now().isoformat(),\n }\n\n\n@app.post(\"/analyze\", response_model=AnalyzeResponse)\nasync def analyze(req: AnalyzeRequest):\n \"\"\"提交分析任务\"\"\"\n max_rounds = req.max_rounds or (1 if req.depth == \"quick\" else 3)\n\n # 后台运行飞轮\n async def _run():\n def on_progress(msg):\n _progress[result[\"run_id\"]] = msg\n\n try:\n result_data = await run_flywheel(\n topic=req.topic,\n max_rounds=max_rounds,\n on_progress=on_progress,\n )\n _results[result_data[\"run_id\"]] = result_data\n except Exception as e:\n _results[result[\"run_id\"]] = {\"status\": \"error\", \"error\": str(e)}\n\n # 创建一个占位\n import uuid\n run_id = str(uuid.uuid4())[:12]\n result = {\"run_id\": run_id}\n _progress[run_id] = \"queued\"\n\n asyncio.create_task(_run())\n\n return AnalyzeResponse(\n run_id=run_id,\n status=\"accepted\",\n message=f\"Analysis started: {req.topic} ({req.depth} mode, max {max_rounds} rounds)\",\n )\n\n\n@app.get(\"/result/{run_id}\")\nasync def get_result(run_id: str):\n \"\"\"获取分析结果\"\"\"\n if run_id in _results:\n return _results[run_id]\n elif run_id in _progress:\n return {\"run_id\": run_id, \"status\": \"running\", \"progress\": _progress[run_id]}\n else:\n raise HTTPException(status_code=404, detail=\"Run not found\")\n\n\n@app.get(\"/progress/{run_id}\")\nasync def get_progress(run_id: str):\n \"\"\"获取运行进度\"\"\"\n return {\n \"run_id\": run_id,\n \"progress\": _progress.get(run_id, \"unknown\"),\n \"completed\": run_id in _results,\n }\n\n\nif __name__ == \"__main__\":\n import uvicorn\n port = int(os.getenv(\"FLYWHEEL_PORT\", \"8100\"))\n uvicorn.run(app, host=\"0.0.0.0\", port=port)\n"}}}}