本文档基于 路线图.md 需求规划,将 v2.0.0 拆解为 4 个阶段、14 个开发周次的可执行开发计划。v2.0.0 整合了未落地的 v1.2.0 全部需求,向"分布式服务网格 + 市场平台化 + 平台级控制台"演进。
| 层级 | 技术 | 版本 | 选型理由 |
|---|---|---|---|
| Web 框架 | FastAPI | 0.110+ | 高性能、类型安全 |
| ORM | SQLAlchemy | 2.0+ | 异步支持完善 |
| 迁移工具 | Alembic | 1.13+ | 版本化迁移,替代 create_all |
| 数据库 | PostgreSQL | 17+ | 生产级关系型数据库 |
| 缓存/消息 | Redis | 7+ | 锁、状态共享、pub/sub、节点间 RPC |
| 认证 | PyJWT + bcrypt | - | JWT + 密码哈希 |
| 前端框架 | Vue 3 | 3.4+ | 渐进式、生态成熟 |
| UI 组件库 | Element Plus | 2.6+ | 暗黑模式、组件丰富 |
| 状态管理 | Pinia | 2.1+ | Vue 官方推荐 |
| 构建工具 | Vite | 5+ | 快速构建 |
| 容器化 | Docker / Compose | - | 一键部署 |
| 阶段 | 周次 | 核心目标 | 对应 roadmap |
|---|---|---|---|
| Phase 1 平台基座 | 第 1-4 周 | 用户/RBAC/AI 客户端/租户基础 + 前端去 AI 味 | 2.1 / 2.2 / 2.3 / 2.6(部分) |
| Phase 2 分布式与市场核心 | 第 5-8 周 | 分布式服务网格 + 市场平台化 | 2.4 / 2.5 / 2.6(集群页) |
| Phase 3 治理与可观测 | 第 9-11 周 | 租户治理 + 安全合规 + 可观测 | 2.3(扩展) / 2.7 / 2.8 |
| Phase 4 生态与增强 | 第 12-14 周 | SDK/CLI + AI 能力增强 + 文档 | 2.9 / 2.10 |
- Pythonic、异步优先:所有 IO 用 async/await,await 必设超时
- 向后兼容:默认租户无感升级,config.yaml api_keys 作初始管理员引导
- 渐进式分布式:单节点模式默认关闭集群特性,多节点按需启用
- 测试先行:新增功能单测覆盖率 ≥ 80%,分布式场景集成测试 ≥ 10 个
目标:落地 v1.2.0 全部基础需求,完成前端去 AI 味重构,建立用户/权限/客户端/租户数据底座。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 引入 Alembic | 替代 create_all,建立迁移基线 |
alembic.ini + migrations/env.py + 迁移 0001 |
✅ |
| 新增表:users / roles / api_keys / tenants | 见 roadmap 2.1.4 数据模型 | 迁移 0001 + models/database.py ORM |
✅ |
| 密码登录 | bcrypt 哈希;POST /api/v1/auth/login |
api/auth.py 密码登录 + core/security.py bcrypt |
✅ |
| 用户 CRUD API | backend/app/api/users.py 新增 |
5+ 端点(含 API Key 管理、改密)+ 单测 | ✅ |
| 初始管理员引导 | 启动时若 users 表为空,从 config.yaml api_keys 写入默认 admin | user_repository.bootstrap_admin_user + lifespan 调用 |
✅ |
关键文件:
backend/app/models/database.py:新增 User/Role/ApiKey 模型backend/app/db/base.py:接入 Alembicbackend/app/api/auth.py:新增密码登录端点backend/app/api/users.py(新增)backend/app/core/auth.py:ROLE_PERMISSIONS从硬编码 dict 迁移到 DB(保留内置三角色种子)
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 权限点定义 | service:read/write, config:admin, audit:read, market:install, cluster:admin 等 | app/core/permissions.py(15 个细粒度权限点 + 内置角色矩阵) |
✅ |
| 角色 CRUD | 自定义角色 + 权限点分配 | backend/app/api/roles.py(新增) |
✅ |
| 认证数据源迁移 | API Key 校验从 config.yaml 迁移到 DB;config 仅作引导 | core/auth.py DB 优先 + 配置回退 |
✅ |
| JWT 黑名单 | Redis jwt:blacklist:{jti} 实现 Token 吊销 |
core/auth.py revoke_jwt/is_jwt_revoked + 内存回退 |
✅ |
| 登录审计 | login_logs 表 + 登录/登出/失败记录 | 迁移 0002 + api/login_logs.py + 仓储层 |
✅ |
| 登录限流 | 5 分钟 5 次失败锁定 | api/auth.py _check_login_lockout(DB NOW() 时间窗口) |
✅ |
测试:343 个测试全部通过(含 test_roles_rbac.py / test_users_api.py / test_auth_rbac.py 集成测试)。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 新增表:ai_clients / tenants | 见 roadmap 2.2.2 数据模型 | 迁移 0003 + models/database.py ORM(AIClientDB / TenantDB) |
✅ |
| AI 客户端 CRUD | 独立 Token 生成 + 加密存储 + 吊销 | backend/app/api/ai_clients.py(新增)+ 仓储层 |
✅ |
| 客户端接入校验 | 网关连接时校验 client token + 状态 + IP 白名单 + 并发连接数 | gateway/server.py _validate_ai_client |
✅ |
| 默认租户 | 所有业务表增加 tenant_id(默认 default);单租户无感 | 迁移 0003 + 仓储层过滤 | ✅ |
| 租户上下文 | 请求级 tenant_id 注入(JWT/API Key 携带) | core/tenant_context.py + middleware + 仓储层改造 |
✅ |
测试:26 个 AI 客户端集成测试全部通过(CRUD / 网关校验 / IP 白名单 / 租户隔离);全套 369 测试通过。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 设计 token 重构 | 删除 --glow-*;中性色阶(Zinc)+ 单一强调色(Indigo);删 32px 网格背景 |
styles/variables.css 重写 |
✅ |
| 主题系统 | 深色/浅色 + 系统跟随 + localStorage | composables/useTheme.ts + ThemeToggle.vue |
✅ |
| 布局系统 | 侧边栏可折叠 + 响应式断点 + 分组导航 + 面包屑 | AppSidebar.vue + AppTopbar.vue + App.vue 重构 |
✅ |
| 交互三态组件 | SkeletonLoader / EmptyState / ErrorState | 3 个通用组件 | ✅ |
| 用户管理页 | 列表(搜索/筛选/分页)+ 新增/编辑弹窗 + 删除 | views/Users.vue |
✅ |
| 客户端管理页 | 列表 + 新增/编辑弹窗(生成 Token)+ Token 重置 | views/AIClients.vue |
✅ |
| 登录日志页 | 登录审计列表(搜索/筛选/分页) | views/LoginLogs.vue |
✅ |
| Pinia stores | user store / client store | stores/users.ts + stores/clients.ts |
✅ |
| API 扩展 | 用户/AI 客户端/登录日志/角色 API | api/index.ts + types/index.ts 扩展 |
✅ |
| 路由注册 | 新增 /users /ai-clients /login-logs 路由 | router/index.ts 更新 |
✅ |
| 去发光清理 | 移除 6 个现有页面的 --glow-* 引用与网格背景 |
Services/ServiceDetail/Metrics/ToolTester/Marketplace/Login/Configs | ✅ |
构建验证:npm run build 通过,vue-tsc 类型检查无错误。
| 验收项 | 标准 |
|---|---|
| 数据库迁移 | Alembic 迁移可从 v1.1.0 状态平滑升级;users/roles/api_keys/ai_clients/tenants/login_logs 表存在 |
| 密码登录 | 用户名密码登录成功签发 JWT;错误密码 401;5 次失败锁定 |
| 权限校验 | read 角色无法执行写操作;自定义角色按权限点生效 |
| 认证兼容 | 旧 config.yaml api_keys 首次启动写入 DB 后可用 |
| AI 客户端 | 创建客户端生成独立 Token;禁用客户端拒绝 WebSocket 连接 |
| 租户隔离 | 业务表含 tenant_id;不同租户数据互不可见 |
| 前端去 AI 味 | 无 --glow-* 外发光、无高饱和霓虹色、无网格背景 |
| 前端三态 | 骨架屏/空状态/错误占位齐全;侧边栏可折叠;深浅主题可切换 |
| 端到端 | 管理员登录 → 创建用户 → 分配角色 → 创建 AI 客户端 → 客户端连接网关成功 |
| 测试覆盖 | 新增后端单测 ≥ 80% |
目标:解决跨节点资源不共享的根本问题,建立可发布、可联邦同步的市场平台。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 节点注册表 | Redis cluster:nodes:{node_id} + 心跳 cluster:heartbeat:{node_id}(TTL 15s) |
app/core/cluster/node_registry.py NodeRegistry 模块 |
✅ |
| 节点心跳 | 后台任务 5s 上报;超时标记离线 | 心跳协程 + 清理协程 | ✅ |
| 节点状态机 | online / offline / draining | drain/recover 状态管理逻辑 | ✅ |
| 节点标签 | 支持自定义标签用于调度 | config.py ClusterSettings + 注册逻辑 |
✅ |
| 集群 API | backend/app/api/cluster.py(新增):节点列表/详情/排水/恢复/统计 |
5 端点 + 22 单测 + 18 集成测试 | ✅ |
关键文件:
backend/app/core/cluster/node_registry.py:NodeInfo 数据类 + NodeRegistry(注册/心跳/清理/列表/详情/排水/恢复)backend/app/core/cluster/__init__.py:模块公共接口导出backend/app/api/cluster.py:集群管理 API(节点列表/详情/排水/恢复/统计)backend/app/main.py:lifespan 集成 node_registry 启动/停止backend/app/config.py:新增 ClusterSettings(enabled/node_id/labels)backend/app/models/schemas.py:NodeResponse / NodeListResponse / ClusterStatsResponsebackend/configs/config.example.yaml:新增 cluster 配置段示例
测试:22 个单元测试 + 18 个集成测试全部通过;全套 409 测试通过。覆盖内存模式/Redis 模式/状态机/心跳过期降级/权限校验/错误处理。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 服务归属注册表 | Redis service:owner:{service_id} → {node_id, replicas, status} |
cluster/service_placement.py ServicePlacement 模块 |
✅ |
| RemoteMCPTransport | 新增 transport 类型,与 stdio 并列 | process_manager.call_remote_service + handle_rpc_request |
✅ |
| 节点间 RPC | Redis pub/sub 请求-应答(node_rpc:req/resp)+ 超时重试 |
cluster/rpc_channel.py RpcChannel 模块 |
✅ |
| 路由表升级 | route_with_node() 返回 (service_id, node_id, is_local);本地优先 stdio,远端走 RPC |
router.py RoutingDecision + route_with_node(route() 向后兼容保留) |
✅ |
| 故障转移 | 节点离线 → 触发该节点服务放置清理 | cluster/scheduler.py _check_offline_nodes 协程 |
✅ |
| 多副本负载均衡 | 轮询/最少连接/优先本地选择节点 | Scheduler.select_node 三策略 |
✅ |
关键文件:
backend/app/core/cluster/service_placement.py(新增):PlacementInfo 数据类 + ServicePlacement(register/get/remove/update_status/list/remove_for_node,Redis Hash + 内存回退)backend/app/core/cluster/rpc_channel.py(新增):RpcChannel(set_handler/send_request/_handle_request,Redis pub/sub 请求-应答 + 超时 + 内存模式降级)backend/app/core/cluster/scheduler.py(新增):Scheduler(_failover_loop/_check_offline_nodes/select_node,故障转移 + 轮询/最少连接/优先本地)backend/app/core/cluster/__init__.py:导出 service_placement / rpc_channel / schedulerbackend/app/core/router.py:新增 RoutingDecision 数据类 +route_with_node()(本地进程优先 → 放置信息查询 → 默认本地)backend/app/core/process_manager.py:start_service注册放置;stop_service移除放置;新增handle_rpc_request/call_remote_servicebackend/app/api/tools.py:call_tool使用 route_with_node 分支本地 stdio / 远程 RPCbackend/app/gateway/server.py:_call_tool同步支持跨节点调用backend/app/main.py:lifespan 启动/停止 rpc_channel(set_node_id + set_handler=process_manager.handle_rpc_request)与 scheduler
测试:26 个单元测试全部通过(TestServicePlacement 9 / TestRpcChannel 5 / TestScheduler 6 / TestRouteWithNode 6);全套 435 测试通过。覆盖内存模式/Redis 模式/请求处理/故障转移检测/本地-远程-无放置路由决策/向后兼容。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 新增表:market_packages / market_versions / market_installs / market_reviews | 见 roadmap 2.4.8 | migrations/versions/0004_market_tables.py + models/database.py 4 个 ORM 模型 |
✅ |
.mcpkg 打包格式 |
zip(manifest + config + resources + README) | core/market_repo.py create_mcpkg / extract_mcpkg |
✅ |
| 本地市场仓库 | ./marketplace/packages/{id}/{version}/ 目录结构 |
core/market_repo.py save_package_to_repo / remove_package_from_repo |
✅ |
| 本地市场 CRUD API | 上传/下架/版本管理/列表/检索 | api/market.py(新增,8 个端点) |
✅ |
| 服务生命周期 | install/upgrade/uninstall/rollback + 热加载 | core/market_repo.py install_package / uninstall_package / rollback_package |
✅ |
| 依赖解析 | manifest 依赖图 + 自动拉取 + 循环检测 | core/market_repo.py DependencyResolver(拓扑排序 + 循环检测 + 缺失依赖) |
✅ |
关键文件:
backend/migrations/versions/0004_market_tables.py(新增):4 张市场表迁移脚本(market_packages / market_versions / market_installs / market_reviews)backend/app/models/database.py:新增 4 个 ORM 模型(MarketPackageDB / MarketVersionDB / MarketInstallDB / MarketReviewDB)backend/app/models/schemas.py:新增 8 个市场 Schema(ManifestSchema / MarketVersionResponse / MarketPackageResponse / MarketPackagePage / MarketInstallResponse / InstallResult / MarketReviewCreate / MarketReviewResponse)backend/app/core/market_repo.py(新增):市场仓库管理器.mcpkg打包/解包(create_mcpkg / extract_mcpkg,zip 格式:manifest.yaml + config.yaml + README.md + resources/)- 本地仓库目录管理(save_package_to_repo / remove_package_from_repo,
{repo_dir}/{package_id}/{version}/) - 依赖解析器(DependencyResolver:拓扑排序 + 循环检测 + 缺失依赖报错)
- DB 操作(upsert_package / add_version / record_install / find_install_by_service / list_packages / get_package_versions / archive_package)
- 服务生命周期(install_package:保存仓库 + DB + 写配置 + 热加载;uninstall_package:停止进程 + 删配置 + 清路由 + 更新记录;rollback_package:停止 + 写目标版本配置 + 热加载)
backend/app/api/market.py(新增):市场 CRUD API(8 个端点)- POST
/api/v1/market/packages上传发布 .mcpkg - GET
/api/v1/market/packages列表/检索(分类/关键字/分页) - GET
/api/v1/market/packages/{id}包详情(含版本列表) - DELETE
/api/v1/market/packages/{id}下架包 - POST
/api/v1/market/packages/{id}/install安装指定版本(默认最新) - POST
/api/v1/market/services/{service_id}/uninstall卸载 - POST
/api/v1/market/services/{service_id}/rollback回滚 - GET/POST
/api/v1/market/packages/{id}/reviews评论列表/添加评论
- POST
backend/app/config.py:MarketplaceSettings 新增repo_dir(本地仓库根目录)+install_timeoutbackend/configs/config.example.yaml:新增marketplace.repo_dir/marketplace.install_timeout配置示例backend/app/main.py:注册 market_router
测试:24 个单元测试全部通过(TestMcpkgPackaging 5 / TestRepoManagement 4 / TestDependencyResolver 5 / TestDbOperations 4 / TestServiceLifecycle 6);全套 459 测试通过(283 单元 + 176 集成)。覆盖打包/解包往返、缺 manifest/config 报错、仓库目录创建/删除、依赖解析(缺失/无版本/单包/循环/链式)、DB upsert/版本 latest 切换/安装记录、安装写配置+仓库、带依赖安装、卸载删配置、回滚写目标版本、不存在版本报错。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 远程市场协议 | HTTP REST:/catalog /package /download /publish | core/market_federation.py RemoteRegistryClient |
✅ |
| 多源联邦同步 | 多 remote_url + 双向(pull+push) + 增量 + 签名校验 | core/market_federation.py MarketplaceSynchronizer |
✅ |
| 定时同步 | interval 配置 + 同步状态查看 | SyncScheduler + POST /market/sync + GET /market/sync/status |
✅ |
| 分类检索评价 | 多级分类/标签/全文搜索/排序/评分/评论 | get_category_tree / list_packages_v2 / get_package_rating |
✅ |
| 前端:市场浏览页 | 重构 Marketplace.vue:分类/搜索/排序/详情卡 | Marketplace.vue 重写(分类筛选+搜索+排序+上传发布+联邦同步面板) |
✅ |
| 前端:市场详情页 | 版本/README/截图/依赖/评论 | MarketDetail.vue(新增) |
✅ |
| 前端:已安装/我的发布 | 已安装列表 + 发布管理 | MarketInstalled.vue(新增,含卸载/回滚操作) |
✅ |
| 前端:集群拓扑页 | 节点列表 + 拓扑图 + 节点详情 | ClusterTopology.vue(新增,统计卡片+节点表+排水/恢复+5s轮询+本地高亮) |
✅ |
| 前端:服务调度页 | 服务分布 + 调度操作 | ServicePlacement.vue(新增,服务表+启停重启+5s轮询) |
✅ |
关键文件(后端):
backend/app/core/market_federation.py(新增):RemoteRegistryClient:远程市场 HTTP 客户端(fetch_catalog / fetch_package_meta / download_package / push_package)MarketplaceSynchronizer:联邦同步器(pull_from_source 增量拉取 + push_to_source 推送 + sync_all 多源同步 + 冲突策略 latest/pin/skip + 签名校验占位)SyncScheduler:定时同步调度器(interval + start/stop + _loop + _run_sync)SyncStatusRegistry/SyncSourceStatus:同步状态内存注册表get_category_tree/get_package_rating/list_packages_v2/list_installs:分类树+评分聚合+增强列表+安装记录查询get_remote_catalog/find_package_by_name/find_version/build_mcpkg_for_download:远程端点辅助
backend/app/api/market_federation.py(新增):12 个端点GET /market/categories分类树GET /market/packages-v2增强列表(分类/标签/排序/评分)GET /market/installs安装记录GET /market/packages/{id}/rating评分聚合POST /market/sync手动触发同步GET /market/sync/status同步状态GET /market/remote/catalog远程目录(公开)GET /market/remote/package/{name}远程包元信息GET /market/remote/download/{name}/{version}下载 .mcpkgPOST /market/remote/publish接收推送
backend/app/config.py:MarketplaceSettings 新增sync_intervalbackend/configs/config.example.yaml:新增marketplace.sync_interval配置backend/app/main.py:lifespan 集成 sync_scheduler 启停;注册 market_federation_router
关键文件(前端):
frontend/src/views/Marketplace.vue:重写(分类筛选+关键字搜索+排序+卡片网格+上传发布对话框+联邦同步状态面板+分页)frontend/src/views/MarketDetail.vue(新增):包详情(基本信息+README+版本表+依赖/权限侧栏+评论区+评论表单+安装按钮)frontend/src/views/MarketInstalled.vue(新增):已安装列表(状态筛选+表格+卸载/回滚操作+分页)frontend/src/views/ClusterTopology.vue(新增):集群拓扑(6张统计卡片+节点表+排水/恢复操作+5s轮询+本地节点高亮)frontend/src/views/ServicePlacement.vue(新增):服务调度(3张统计卡片+服务表+启停重启+5s轮询)frontend/src/api/index.ts:新增marketApiv2 方法(15个)+clusterApi(6个方法)frontend/src/router/index.ts:新增 4 条路由(/market/installed、/market/:packageId、/cluster、/cluster/placement)frontend/src/components/AppSidebar.vue:新增「已安装」导航项 + 「集群」导航组(集群拓扑/服务调度)
测试:24 个单元测试通过(TestRemoteRegistryClient 4 / TestSyncStatusRegistry 3 / TestSyncScheduler 2 / TestMarketplaceSynchronizer 1 + 第7周 14 个非 DB 测试回归);DB 相关 11 个测试因 PostgreSQL 服务器网络不可达待恢复后验证,代码逻辑与第7周已验证模式一致。vue-tsc 类型检查通过。
| 验收项 | 标准 |
|---|---|
| 节点注册 | 双节点启动互见;节点离线 15s 内被检测 |
| 跨节点调用 | Node A 启动服务,Node B 客户端调用该服务工具成功;P95 额外延迟 ≤ 30ms |
| 故障转移 | Node A 宕机后,其服务在 Node B 自动接管启动,调用恢复 |
| 多副本 | 同服务 2 副本分布不同节点,请求按轮询负载 |
| 市场发布 | 本地上传 .mcpkg → 安装 → 调用成功 |
| 联邦同步 | 实例 A 发布 → 实例 B 同步拉取 → 安装 → 调用成功;签名校验生效 |
| 依赖解析 | 安装带依赖服务,自动拉取缺失依赖;循环依赖被拒绝 |
| 生命周期 | 升级/回滚/卸载均触发热加载,状态正确 |
| 集群页 | 节点拓扑可视化;服务分布可见 |
| 测试覆盖 | 分布式集成测试 ≥ 10 个 |
目标:完善多租户治理、安全合规、可观测体系。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 完整租户 CRUD | 超级管理员创建/编辑/删除租户 | backend/app/api/tenants.py(新增,11 端点) |
✅ |
| 组织/团队模型 | organizations 表 + 嵌套团队 | 迁移 0005 + OrganizationDB ORM + 组织 API | ✅ |
| 资源配额 | 服务数/连接数/调用量/存储配额 + 超额拦截 | core/quotas.py + TenantQuotaDB + 配额 API |
✅ |
| 租户级市场 | 私有服务目录(tenant_id 隔离) | market_repo.list_packages / market_federation.list_packages_v2 加 tenant_id 过滤 |
✅ |
| 服务包签名 | 发布者私钥签名 + 安装前验签 | core/signing.py(ed25519)+ market.py publish 路径 verify_or_raise |
✅ |
| 沙箱隔离 | 子进程低权限运行 + 资源限制 | core/sandbox.py(cwd/env 白名单/user 切换)+ process_manager.start 注入 |
✅ |
| 密钥管理 | 敏感配置集中托管 + 加密存储 | core/secrets.py(Fernet)+ SecretDB + api/secrets.py(5 端点) |
✅ |
| 审计流水线 | 统一审计(操作+数据访问+管理事件)+ 检索 + 导出 | core/audit.py 增强(record_data_access/record_admin_event)+ api/audit.py(导出 JSON/CSV + 分类统计) |
✅ |
关键文件:
backend/migrations/versions/0005_phase3_governance.py(新增):organizations / tenant_quotas / secrets 三张表 + audit_logs 扩展(category / request_id / trace_id)backend/app/models/database.py:新增 OrganizationDB / TenantQuotaDB / SecretDB;AuditLogDB 增加 category / request_id / trace_id 字段backend/app/config.py:新增 SecuritySettings(sandbox/signing/secrets)+ QuotaSettingsbackend/app/core/secrets.py(新增):Fernet 对称加密(encrypt/decrypt/generate_key/rotate_key),密钥来源 settings 或进程内临时backend/app/core/signing.py(新增):ed25519 签名验签(generate_keypair/sign_package/verify_package/verify_or_raise)backend/app/core/quotas.py(新增):QuotaResource(StrEnum)+ QuotaCheckResult + QuotaExceededError + check_quota / check_quota_or_raisebackend/app/core/sandbox.py(新增):build_sandbox_env / get_sandbox_cwd / get_sandbox_kwargs / apply_sandbox_to_subprocessbackend/app/core/audit.py:增强 record_audit 支持 category/request_id/trace_id;新增 record_data_access / record_admin_eventbackend/app/db/tenant_repository.py(新增):租户 CRUD + 组织 CRUD + 配额 upsert/get(新建租户自动初始化配额)backend/app/db/secret_repository.py(新增):密钥 CRUD(put/get/list/delete,按 tenant_id 隔离)backend/app/db/repository.py:create_audit_log / query_audit_logs 支持 category/request_id/trace_id/start_time/end_time;新增 export_audit_logs(JSON/CSV)backend/app/api/tenants.py(新增):11 端点(租户 CRUD + 配额 GET/PUT + 组织 CRUD)backend/app/api/secrets.py(新增):5 端点(写入/列表/详情/解密 reveal/删除)backend/app/api/audit.py:重写(分类/时间窗/请求ID 查询 + JSON/CSV 导出 + 分类统计)backend/app/api/market.py:publish 路径增加 verify_or_raise 签名校验backend/app/core/market_repo.py:list_packages 增加 tenant_id 参数(默认当前租户,__all__跨租户)backend/app/core/market_federation.py:list_packages_v2 同步增加 tenant_id 参数backend/app/core/process_manager.py:MCPProcess.start 注入沙箱(build_sandbox_env + apply_sandbox_to_subprocess)backend/app/models/schemas.py:新增 12 个 Schema(TenantCreate/Update/Response/QuotaResponse/QuotaUpdate/OrganizationCreate/Response/SecretCreate/Response/Reveal)+ AuditLogEntry 扩展字段backend/app/main.py:注册 tenants_router / secrets_router;lifespan 引导 default 租户配额初始化backend/configs/config.example.yaml:新增 security / quota 配置段示例backend/requirements.txt:新增 cryptography>=42.0.0backend/pyproject.toml:注册 pytestdbmark
测试:56 个单元测试(46 个非 DB 通过 + 10 个 DB 测试在 Windows 自动 skip 避免网络超时)。覆盖签名往返/篡改检测/空密钥拒绝、Fernet 加解密往返/错误密文/密钥轮换、配额检查(无配额行/limit=0/未超额/超额/各资源独立)、沙箱(白名单过滤/关闭透传/Windows 不切 user/cwd 合并)、审计分类(operation/data_access/admin_event/best-effort 失败不抛)、ORM 字段、Schema、配置加载。Lint:ruff All checks passed(新增/修改文件)。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 请求 ID 透传 | 跨节点透传 request_id / trace_id | core/tracing.py(ContextVar + RPC headers)+ HTTP 中间件 |
✅ |
| 调用链可视化 | 客户端→网关→路由→节点→子进程 调用链 + 耗时分解 | core/tracing.py(TraceCollector 环形缓冲 + start_span)+ API 端点 |
✅ |
| 集群级指标 | 按节点/租户/服务/工具多维聚合 Prometheus 指标 | core/metrics.py 增强(cluster_node_* / rpc_* / trace_spans / tool_calls_by_tenant) |
✅ |
| 集群总览 | 集群服务数/连接数/调用量/错误率 | api/observability.py(GET /cluster/overview 聚合 API) |
✅ |
| 节点资源 | CPU/内存/进程数/连接数采集 | core/node_resources.py(psutil 采集 + 降级) |
✅ |
| 告警体系 | 阈值告警规则 + Webhook/邮件通道 + 历史 | core/alerts.py(AlertEngine)+ 迁移 0006 + api/observability.py(规则 CRUD + 历史 API) |
✅ |
关键文件:
backend/app/core/tracing.py(新增):TraceContext(ContextVar 管理 trace_id/request_id/span_id)、TraceCollector(环形缓冲 1000 trace / 50 span per trace)、start_span 异步上下文管理器(自动父子关系 + 状态记录 + Prometheus 指标)、inject/extract_rpc_headers(RPC 透传)backend/app/core/node_resources.py(新增):NodeResourceInfo dataclass + collect_node_resources()(psutil 采集 CPU/内存/磁盘/进程数/连接数/负载均值,psutil 不可用时降级零值)backend/app/core/alerts.py(新增):AlertRule / AlertEvent dataclass、AlertEngine(规则 CRUD + 后台评估循环 + 冷却机制 + 告警历史)、WebhookChannel(HTTP POST)/ EmailChannel(SMTP)backend/app/core/metrics.py(增强):新增 cluster_node_count/cpu/memory/process_count/connections/disk(Gauge by node_id)、rpc_calls_total/rpc_duration(RPC 指标)、trace_spans_total(追踪指标)、tool_calls_by_tenant(租户维度)、update_cluster_metrics_async()(异步集群总览聚合)backend/app/core/cluster/rpc_channel.py(增强):send_request 注入 trace headers、_handle_request 提取 trace headers 恢复上下文、RPC 指标记录backend/app/api/tools.py(增强):call_tool 初始化追踪上下文、route/local_call/remote_rpc span 记录、审计日志携带 trace_id/request_id、租户维度指标backend/app/api/observability.py(新增):11 个端点 — 追踪列表/详情、告警规则 CRUD/测试、告警历史、集群总览、节点资源backend/app/models/database.py(增强):新增 AlertRuleDB / AlertHistoryDB ORM 模型backend/migrations/versions/0006_alerts.py(新增):alert_rules / alert_history 两张表backend/app/models/schemas.py(增强):新增 TraceSpanSchema / TraceRecordSchema / TraceListResponse / AlertRuleCreate/Update/Response / AlertEventResponse / AlertHistoryPage / ClusterOverviewResponsebackend/app/core/permissions.py(增强):新增 trace:read / alert:read / alert:manage 权限点 + 角色矩阵更新backend/app/config.py(增强):新增 AlertSettings(webhook/email/eval_interval)backend/app/main.py(增强):trace_context_middleware(X-Trace-ID 透传 + 响应头回传)、observability_router 注册、lifespan 启动/停止 alert_enginebackend/configs/config.example.yaml:新增 alerts 配置段示例backend/requirements.txt:新增 psutil>=5.9.0
测试:51 个单元测试(全部通过)。覆盖 TracingContext(ID 生成/ContextVar 传播/清理)、TraceCollector(Span 采集/trace 查询/环形缓冲驱逐/span 上限/状态过滤/清空)、start_span(异步上下文/ok 状态/error 状态/父子关系/自动 trace_id)、RPC headers(注入/提取/空 headers)、NodeResources(采集返回/序列化/反序列化/hostname)、AlertEngine(规则 CRUD/条件评估 6 运算符/告警触发/冷却跳过/禁用跳过/历史记录/规则筛选/DB 加载/序列化)、AlertChannel(Webhook 无 URL/成功/Email 无配置)、ClusterMetrics(Prometheus 解析/新指标注册验证)、AlertConfig(默认值/Settings 集成)、Permissions(新权限存在性/ALL_PERMISSIONS/角色矩阵)。25 个集成测试(数据库不可用时跳过)。Lint:ruff All checks passed(新增/修改文件)。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| SLI/SLO 仪表盘 | 可用性/延迟 P50/P95/P99/错误率 + SLO 达成 | /api/v1/observability/sli 端点 + Dashboard.vue |
✅ |
| 前端:指标 Bento 化 | 指标页非对称网格 | Metrics.vue 重写(双 Tab:业务指标 + SLI/SLO) | ✅ |
| 前端:集群拓扑图 | 节点+连线+状态色可视化 | ClusterTopology.vue 增强(SVG 圆形布局 + 中心节点) | ✅ |
| 前端:服务分布热力图 | 节点×服务热力图 | ClusterTopology.vue 热力图组件(4 级色阶) | ✅ |
| 前端:连接监控页 | 跨节点聚合连接列表 + 历史 | ConnectionMonitor.vue(新增) | ✅ |
| 前端:角色管理页 | 角色列表 + 权限配置 | Roles.vue(新增) | ✅ |
| 前端:租户管理页 | 租户列表 + 配额 | Tenants.vue(新增) | ✅ |
| 前端:个人中心 | 修改密码 + API Key 管理 | Profile.vue(新增) | ✅ |
| 运维操作中心 | 一键诊断 + 跨节点日志检索 + 节点排水触发 | OpsCenter.vue(新增) | ✅ |
| 分布式追踪可视化 | 调用链树形展示 + Span 耗时 | TraceViewer.vue(新增) | ✅ |
关键文件:
- 后端:
app/api/observability.py(新增/sli端点 +_calculate_percentile分位数计算)、app/models/schemas.py(SliMetric/SloTarget/SliSloResponse 模型) - 前端:
views/Dashboard.vue(Bento 仪表盘)、views/Metrics.vue(Bento 指标页 + SLI/SLO Tab)、views/ClusterTopology.vue(SVG 拓扑图 + 热力图)、views/Roles.vue、views/Tenants.vue、views/Profile.vue、views/ConnectionMonitor.vue、views/OpsCenter.vue、views/TraceViewer.vue - 前端基础设施:
router/index.ts(9 条新路由)、components/AppSidebar.vue(导航菜单)、api/index.ts(observabilityApi/tenantApi 客户端)、types/index.ts(SLI/SLO 类型)
测试:17 个单元测试(全部通过)。覆盖 _calculate_percentile(空 buckets/零总量/P50/P95/P99/单 bucket/全首 bucket/+Inf 线性插值)、SLI/SLO API(端点 200/响应结构/可用性范围/延迟非负/SLO 目标结构/SLO 名称/SLI 指标结构/mock 指标计算/完美可用性/零调用)。TypeScript 类型检查零错误。Lint:ruff E,F,I,N,W All checks passed(新增/修改文件)。
| 验收项 | 标准 |
|---|---|
| 租户配额 | 超额创建服务被拦截并提示 |
| 服务签名 | 未签名包安装被拒;签名不符被拒 |
| 沙箱 | 子进程无法访问工作目录外文件 |
| 调用链 | 跨节点调用链完整展示,各阶段耗时可见 |
| 集群指标 | 集群总览 + 节点资源 + 多维聚合可用 |
| 告警 | 节点离线/错误率超阈值触发 Webhook 通知 |
| 审计 | 操作/数据访问/管理事件可检索 + 可导出 |
| Bento 仪表盘 | 指标页非对称网格,无通用卡片矩阵 |
目标:建立开发者生态,增强 AI 调用能力。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| Python SDK | 封装 REST + WebSocket 调用 | sdk/python/mcpilot/ 包(MCPilotClient + WebSocketClient) |
✅ |
| TypeScript SDK | 封装 REST + WebSocket 调用 | sdk/typescript/ 包(36 方法 + 类型定义) |
✅ |
CLI 工具 mcpilot |
服务管理/市场安装/集群查询/脚手架 | sdk/python/mcpilot/cli/(8 命令组 24 命令) |
✅ |
| 服务模板脚手架 | mcpilot init 生成 Python/Node 服务骨架 |
sdk/templates/python/ + sdk/templates/node/ |
✅ |
| Webhook 事件 | 服务变更/连接/调用量事件外发 | app/core/webhook.py + app/api/webhooks.py(7 事件类型 + HMAC 签名 + 指数退避重试) |
✅ |
关键文件:
- 后端:
app/core/webhook.py(WebhookEngine + HMAC-SHA256 签名 + 指数退避重试)、app/api/webhooks.py(7 个 REST 端点:CRUD + 测试 + 事件类型列表)、app/models/schemas.py(WebhookCreate/Update/Response 模型)、app/api/services.py(集成 service.started/stopped 事件)、app/api/tools.py(集成 tool.called/error 事件)、app/main.py(路由注册) - Python SDK:
sdk/python/mcpilot/client.py(异步 HTTP 客户端,36 个方法覆盖全部 REST API)、sdk/python/mcpilot/websocket.py(WebSocket 客户端,JSON-RPC 2.0)、sdk/python/mcpilot/exceptions.py(4 级异常层次)、sdk/python/mcpilot/cli/main.py(Click CLI,8 命令组)、sdk/python/mcpilot/cli/scaffold.py(脚手架) - TypeScript SDK:
sdk/typescript/src/client.ts(fetch + AbortController,36 方法)、sdk/typescript/src/websocket.ts(ws + JSON-RPC 2.0)、sdk/typescript/src/types.ts(完整类型定义)、sdk/typescript/src/exceptions.ts - 服务模板:
sdk/templates/python/service.py(echo + get_time 工具)、sdk/templates/node/service.js
测试:48 个单元测试(全部通过)。覆盖 WebhookEngine(配置 CRUD 7 项/事件匹配 3 项/HMAC 签名 3 项/事件发射 2 项/序列化 3 项/事件类型 2 项)、Webhook API(8 端点测试)、Python SDK(客户端初始化/异常层次/版本/导出/上下文管理器)、CLI(7 个命令组 help 测试)、脚手架(Python/Node 生成 + 占位符替换 + 不支持语言)、服务模板(JSON-RPC 协议执行测试)。TypeScript SDK 编译零错误。Lint:ruff E,F,I,N,W All checks passed。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 流式响应 | SSE/WebSocket 流式工具调用结果 | app/api/tools.py SSE 端点(StreamingResponse 事件流) |
✅ |
| 调用缓存 | 按参数哈希缓存结果 + TTL | app/core/cache.py(ToolCallCache SHA256 + LRU + 反向失效) |
✅ |
| 按工具限流 | 客户端/工具维度限流 | app/core/ratelimit.py(TokenBucket + 工具级配置 + 统计) |
✅ |
| 重试与超时策略 | 可配置重试 + 超时 | app/core/retry.py(RetryExecutor 指数退避 + 抖动 + 超时) |
✅ |
| 管理 API | 缓存/限流/重试配置与统计 | app/api/ai_enhancement.py(12 端点) |
✅ |
| 配置集成 | AI 增强配置项 | app/config.py AIEnhancementSettings + config.example.yaml |
✅ |
| 多模态(P3) | 图片/音频/文件参数支持 | 协议扩展(可选) | ⏭️ 跳过 |
| 工具编排(P3) | 声明式 DAG 编排(可选) | orchestration 模块 | ⏭️ 跳过 |
关键文件:
- 后端核心:
app/core/cache.py(ToolCallCache:SHA256 参数哈希 + TTL 过期 + LRU 淘汰 + 工具名反向索引批量失效)、app/core/ratelimit.py(TokenBucket 令牌桶 + 客户端/工具双维度限流 + 工具级配置 + 统计导出 + 重置)、app/core/retry.py(RetryConfig/RetryStats/RetryExecutor:指数退避 + 抖动 + 可重试异常分类 + 工具级配置 + 每次尝试超时控制) - API 集成:
app/api/tools.py(限流拦截 429 + 缓存命中标记 from_cache + 重试包装 + SSE StreamingResponse 事件流)、app/api/ai_enhancement.py(12 管理端点:缓存统计/失效/清空 + 限流统计/配置/启用禁用/客户端统计/重置 + 重试统计/配置/工具统计/重置)、app/gateway/server.py(WebSocket _call_tool 集成缓存/限流检查) - 配置与模型:
app/config.py(AIEnhancementSettings 配置类:cache/ratelimit/retry/streaming 开关与参数)、app/models/schemas.py(CacheStatsResponse/CacheInvalidateRequest/RateLimitConfigRequest/RateLimitStatsResponse/RateLimitToolActionRequest/RetryConfigRequest/RetryStatsResponse + CallToolResponse.from_cache 字段)、configs/config.example.yaml(ai_enhancement 配置段)
测试:126 个单元测试(全部通过)。覆盖 TokenBucket(8 项:消费/补充/容量上限/重置时间/序列化)、RateLimitConfig(2 项)、RateLimiter(6 项:允许/拒绝/客户端隔离/工具隔离/统计/信息字段)、RateLimiterToolConfig(7 项:配置/自定义突发/默认/禁用/启用/查询不存在)、RateLimiterStats(4 项)、RateLimiterReset(4 项)、ToolCallCache(8 项:哈希/存取/TTL/失效/清空/统计/LRU)、RetryConfig(5 项:延迟计算/抖动/最大延迟/序列化/总尝试次数)、RetryStats(3 项:成功率/平均重试/序列化)、RetryExecutor(9 项:成功/重试后成功/全部失败/超时/非可重试异常/禁用/工具配置/统计/重置)、SSE 流式(3 项:事件格式/缓存命中/错误处理)、缓存管理 API(3 项)、限流管理 API(5 项)、重试管理 API(4 项)、工具调用集成(2 项:缓存命中标记/限流拦截)。Lint:ruff E,F,I,N,W All checks passed。
| 任务 | 说明 | 交付物 | 状态 |
|---|---|---|---|
| 开发者文档站 | API 参考 + 教程 + 示例库 | docs/developer-guide.md(9 章节:快速开始/架构/API 参考/WebSocket/SDK/CLI/3 个教程) |
✅ |
| 集群部署指南 | 多节点部署 + Redis 集群配置 | docs/deployment-guide.md 扩展(4 新章节:多节点集群/Redis 集群/v2.0.0 配置/生产监控) |
✅ |
| 升级指南 | v1.1.0 → v2.0.0 升级步骤 | docs/upgrade-guide.md(7 章节:变更概览/检查清单/数据库迁移/配置变更/破坏性变更/验证/回滚) |
✅ |
| 全功能集成测试 | 端到端验收用例 | tests/integration/test_e2e_week14.py(11 类 36 用例:系统/认证/服务/缓存/限流/重试/Webhook/可观测/SSE/SDK/集群市场) |
✅ |
| 性能压测 | 缓存/限流/重试/API 延迟基准 | tests/performance/test_benchmark_week14.py(5 类 15 用例:缓存延迟+吞吐/限流延迟+吞吐/重试开销+吞吐/API P95/综合报告) |
✅ |
关键文件:
- 文档:
docs/developer-guide.md(开发者指南:快速开始 + 架构概览 + REST API 参考 15 域 + WebSocket API + Python/TypeScript SDK + CLI 8 命令组 + 3 教程:自定义服务/Webhook/AI 增强)、docs/upgrade-guide.md(升级指南:v1.1.0→v2.0.0 全流程,6 个 Alembic 迁移 + 配置变更 + 破坏性变更 + 回滚)、docs/deployment-guide.md(部署指南扩展:多节点 Leader-Worker 集群 + Redis Sentinel/Cluster + v2.0.0 配置项 + Prometheus/Grafana 监控 + SLI/SLO 仪表盘) - 集成测试:
tests/integration/test_e2e_week14.py(端到端验收:系统健康/认证流程/服务生命周期/缓存集成/限流集成/重试管理/Webhook CRUD/可观测性 API/SSE 流式/SDK 验证/集群市场 API) - 性能压测:
tests/performance/test_benchmark_week14.py(缓存读写延迟+吞吐/限流检查延迟+吞吐/重试执行器开销+吞吐/API 端点 P95 延迟/综合压测报告)
测试:50 个测试全部通过(36 集成 + 14 性能基准)。性能基准结果:缓存读取 263,607 ops/sec、缓存写入 211,945 ops/sec、限流检查 723,759 ops/sec、API 健康检查 P95 < 4ms。Lint:ruff E,F,I,N,W All checks passed。
| 验收项 | 标准 |
|---|---|
| SDK | Python/TS SDK 可调用全部 REST + WebSocket 接口 |
| CLI | mcpilot init 生成可运行服务;mcpilot install 安装市场服务 |
| Webhook | 服务变更事件外发到配置 URL |
| 流式响应 | 工具调用结果可流式返回 |
| 缓存 | 相同参数二次调用命中缓存,延迟显著下降 |
| 限流 | 超限调用被拦截 |
| 文档 | API/部署/升级文档完整 |
| 性能 | 跨节点 P95 ≤ 30ms;首屏 ≤ 2s |
| 风险 | 概率 | 影响 | 应对措施 |
|---|---|---|---|
| 跨节点 RPC 延迟/可靠性 | 高 | 高 | Redis pub/sub 超时+重试;预留 HTTP/gRPC 直连;死节点检测快速失败 |
| 服务归属表一致性 | 中 | 高 | 归属注册表操作加 Redis 分布式锁;节点离线触发乐观清理 |
| 迁移破坏现有数据 | 中 | 高 | Alembic 迁移先在测试库验证;保留 create_all 回退路径 |
| 前端去 AI 味回退 | 低 | 中 | 设计 token 集中管理;分页灰度;保留旧主题变量兼容期 |
| 市场包安全 | 中 | 高 | 强制签名验签;沙箱隔离;出站白名单 |
| 分布式死锁 | 中 | 高 | 所有 await 设超时;锁粒度最小化;超时自动释放 |
| 多租户隔离泄漏 | 中 | 高 | 仓储层统一 tenant_id 过滤;集成测试覆盖跨租户访问用例 |
Phase 1 数据库迁移 → 用户/认证 → AI 客户端/租户 → 前端基座
│
└─→ Phase 2 集群节点 → 远程传输 → 跨节点路由
市场元模型 → 联邦同步
│
└─→ Phase 3 租户治理(依赖 Phase1 租户基础) → 安全 → 可观测(依赖 Phase2 分布式)
│
└─→ Phase 4 SDK/CLI(依赖 Phase1+2 API 稳定) → AI 增强(依赖 Phase2 路由)
关键路径:Phase 1 数据库迁移 → Phase 2 远程传输 → Phase 2 跨节点路由(决定 v2.0.0 核心价值交付)。
文档版本 v2.1.0 最后更新 2026年8月18日 状态 基于 路线图.md,4 阶段 14 周可执行计划