feat: Factory V3 → Main 分批搬运(新旧并存) | 测试时间:2026-06-25 23:17 – 2026-06-26 01:00
feat/factory-v3-migration| 方案 | 路由 | 创建会话 | 智能体开发 | 应用可访问 | 发布到 OS |
|---|---|---|---|---|---|
| vibe-coding-v2 | /studio/vibe-coding |
✅ 正常 | ✅ 完成 | ✅ :25006 | ✅ 已上线 |
| factory-v2 (ship-attack) | /ship-attack |
✅ 正常 | ✅ 完成 | ⚠️ 沙盒内 5000 | ✅ 已上线 |
| factory-v3 (app-dev) | /studio/app-dev |
✅ 正常 | ✅ 完成 | ✅ :21006 + :25004 | ✅ 已上线 |
localhost:8020/studio/vibe-coding ✅/sol/vibe-coding-v2/sess/... ✅blade-2026-0625-1519-kecn)✅blade deploy 执行成功,应用出现在"已上线项目"列表,端口 25004 ✅{"message":"Welcome to FastAPI Backend"},前端页面未 serve。原因是 blade-app.yaml 的 start 命令只启动了后端,没有配置前端静态文件服务。这是智能体生成的 blade-app.yaml 配置不完善,不是 PR #1005 引入的回退。/ship-attack → 三栏布局正常加载(成果表 / 成果详情 / 过程展示)✅blade-2026-0625-1520-d3a0)✅/studio/app-dev → 全新工作区界面正常加载(项目列表、搜索、排序)✅/p/1/chat/... ✅blade-user-1-default-2026-0625-1522-9z7b)✅blade-user-1-default-2026-0625-1522-9z7b # factory-v3 沙盒 (21006-21008) blade-2026-0625-1520-d3a0-default-f165df # factory-v2 沙盒 (21003-21005) blade-2026-0625-1519-kecn-default-b9586d # vibe-coding 沙盒 (21000-21002) blade-deploy-2026-0625-1519-kecn-73f6c2 # vibe-coding 发布容器 (25004) blade-os # Blade OS (80) healthy skill-registry # 技能注册中心 (8010) healthy blade-deploy-2026-0622-* # 历史部署 (25001-25003) 均正常
✅ PR #1005 未引入功能回退
三个软件开发方案(vibe-coding-v2、factory-v2、factory-v3)的核心流程全部正常:
⚠️ 已知问题(非回退,已修复)
症状:blade deploy 成功后,访问应用 URL (25004) 返回 {"message":"Welcome to FastAPI Backend"},前端页面不可见。
根因:模板 coding_templates/*/backend/app.py 没有 StaticFiles mount。开发阶段靠 Vite dev server 独立 serve 前端,但部署阶段只运行后端进程,frontend/dist/ 构建产物无人 serve。
对比:历史成功部署(如态势推演系统 25003)是因为智能体在开发过程中手动添加了 StaticFiles mount 代码,但这不可靠。
修复方案:在模板 backend/app.py 中加入自动检测逻辑:
_FRONTEND_DIST = Path(__file__).resolve().parent.parent / "frontend" / "dist"
if _FRONTEND_DIST.is_dir():
# 部署模式:serve 前端构建产物
app.mount("/assets", StaticFiles(directory=_FRONTEND_DIST / "assets"), name="assets")
@app.get("/{full_path:path}")
async def serve_frontend(full_path: str):
return FileResponse(_FRONTEND_DIST / "index.html")
else:
# 开发模式:前端由 Vite dev server 独立提供
@app.get("/")
async def root():
return {"message": "Welcome to FastAPI Backend"}
修改文件:
coding_templates/vibe-coding-v2/react-fastapi/backend/app.pycoding_templates/basic-app/backend/app.py症状:创建 Factory-v3 (app-dev) 项目后,智能体没有自动初始化(不创建 Gitea 仓库、不显示项目信息),对话区空白。
根因:host/src/blade_agent/host/_chat_service.py 的 ChatService.__call__() 在 PR 搬运时丢失了 display_message 参数,导致 agent_board.py 的 _run_bootstrap() 调用时抛出 TypeError: ChatService.__call__() got an unexpected keyword argument 'display_message',bootstrap 静默失败。
修复:在 _chat_service.py 的 __call__ 方法中补回 display_message: Any | None = None 参数及其传递。
验证:修复后创建新项目,bootstrap 消息正确显示(项目ID、名称、描述、文件夹、仓库状态),与 124 服务器上 public-factory-v3 分支的行为一致。Gitea 仓库 dev/app-3 成功创建。
设计要点:
dist/ 不存在时完全无影响npm run build 后自动切换到生产模式/api/*、/docs、/health 等已注册路由优先匹配index.html