packages/server已完成从 Node.js / TypeScript 到 Python / FastAPI 的迁移。 v1.1 · 2026-03-16(按当前仓库真实状态收口)
-
packages/server运行时已切换为 Python - 前端继续沿用原有
/api、SSE 与/ws/terminal协议 - SQLite、任务 workspace、终端会话恢复、记忆系统、用量聚合与本地路径打开能力均已迁移
- 后端自动化测试已切换到
pytest + FastAPI TestClient - 原 TypeScript 服务端不再是默认实现路径
- 没有借迁移重写前端状态架构
- 没有改变任务、Provider、记忆系统的业务语义
- 没有让 Agent Runtime 取代终端体系;两者当前并存
flowchart TD
App[app.py / FastAPI] --> DB[db.py / SQLite]
App --> Task[task_service.py]
App --> Chat[task_agent_chat.py]
App --> Terminal[terminal.py]
App --> Memory[memories.py]
App --> Usage[usage_adapters.py]
Chat --> Runtime[agent_runtime/*]
Runtime --> LLM[llm.py]
Terminal --> PTY[Python PTY Sessions]
当前关键模块:
| 模块 | 作用 |
|---|---|
app.py |
主应用装配、HTTP 路由、legacy SSE、/ws/terminal |
db.py |
SQLite 初始化、兼容迁移、默认 Provider seed |
task_service.py |
任务领域逻辑、文档生成、状态流转、会话绑定 |
task_agent_chat.py |
Agent Chat thread / run API |
agent_runtime/* |
结构化 run、消息存储、工具注册与执行 |
terminal.py |
WebSocket 终端、PTY 生命周期、attach/list/close/recover |
llm.py |
多 Provider 协议适配,含 Anthropic / OpenAI Responses / Chat Completions |
memories.py |
用户记忆、Agent 记忆与 system message 注入 |
- 默认数据库文件:
~/.wudao/wudao.db - 主要表:
providerstaskstask_agent_runstask_agent_messages
| 路径 | 作用 |
|---|---|
~/.wudao/workspace/<taskId>/ |
任务 workspace |
~/.wudao/profile/ |
头像、用户记忆、Agent 记忆 |
迁移后的后端继续保留以下前端依赖接口:
GET/POST/PUT/PATCH/DELETE /api/*POST /api/tasks/{task_id}/chat的 SSE 文本流GET /api/tasks/{task_id}/agent-chat/threadPOST /api/tasks/{task_id}/agent-chat/runsWebSocket /ws/terminal
兼容重点:
- 任务、设置、记忆、用量、头像、本地路径打开接口保持在
/api - 终端仍走 WebSocket,不要求前端切到轮询或新协议
- legacy chat 与 Agent Chat 同时存在,便于迁移期平滑兼容
当前服务端测试基线:
- 执行命令:
pnpm --filter server test - 实际入口:
TZ=Asia/Shanghai uv run --project . pytest - Route / WebSocket 测试:
FastAPI TestClient - 外部依赖:通过 monkeypatch / mock 隔离
测试覆盖重点:
- Provider CRUD
- Task CRUD、排序、分页、状态流转
- 任务解析、legacy chat、文档生成
- Agent Chat thread / run / 工具链
- 本地记忆接口
- 终端 list / create / attach / close / resize 关键协议
- PTY 自动化覆盖已补齐,但
create / resume仍需结合本机真实 CLI 做真机回归 - 多 Provider 网关兼容仍会持续变化,
llm.py需要跟随上游 API 行为迭代 - Agent Runtime 当前只有最小可用工具链,审批、恢复和 web search 仍在后续路线图中
满足以下条件时,可认为 Python 重构已经与代码保持一致:
pnpm dev会通过scripts/dev.sh同时拉起前端和 Python 后端。pnpm --filter server test默认走uv + pytest,而不是 Node 测试栈。- 后端真实代码路径位于
packages/server/src/*.py与packages/server/tests/。 - 当前数据库、workspace、记忆目录约定都落在
~/.wudao/下,而不是包目录内部。