@claude-code
阶段 3 v2 — 页面化配置管理(CRUD + 场景存档)
📝 描述
推倒 ai-agent-virtual-life 阶段 3 v1(YAML 路径)。v1 已部署但验收发现:用户仍要 SSH 改 YAML 文件 + 改环境变量,违反黄谦敏 2026-06-30 明确要求『用户操作必须在 Web UI 内完成』。 【v1 遗留(保留作高级入口)】 - 现有 YAML 加载路径(config_loader + bootstrap)作为『导入 YAML』入口 - 高级用户可手写 YAML 后通过新 Web UI 一键导入并转换到 DB - base.yaml 默认 5+5 配置保留,作为『新建场景』的初始模板 【v2 核心 — 4 个端到端页面能力】 1. **场景列表页**:列出所有场景存档(预置 5+5『小镇默认』+ 用户创建),每条卡片:名称/agent 数/location 数/激活状态/操作按钮(激活/复制/编辑/删除) 2. **场景编辑器**:分 2 个 tab — Personas(增删改,字段:id/name/persona/start_location/color)+ Locations(增删改 + adjacency 双向可视化编辑) 3. **激活流程**:选场景 → 一键激活 → 后端 reload world+agents(沿用 v1 的 bootstrap_reload)→ 页面刷新 4. **错误回退 + toast**:v1 已有,直接复用 【数据模型 — DB 化】 - 现有 SQLite/Postgres 已有 event_store,沿用 - 新增 2 张表: - scenes(id, name, description, created_at, updated_at) — 场景元数据 - scene_personas(scene_id, agent_id, name, persona, start_location, color) — 场景下的 personas - scene_locations(scene_id, name, x, y, color, adjacency_json) — 场景下的 locations - 「激活」:把选中场景的 personas/locations 拷到 world 运行时 【架构分层】 - L0_infra:Postgres(已有 event_store 复用) - L1_platform:scene-store(L1,SQLite helper,跨项目可复用) + scene-yaml-bridge(L1,YAML↔DB 转换) - L2_capability:scene-manager(L2,场景 CRUD + 激活流程) - L3_app:scene-web-ui(L3,FastAPI 静态 + 简单 HTML/CSS/JS,无 SPA 框架) 【API 新增】 - GET /api/scenes — 列表 - POST /api/scenes — 创建 - GET /api/scenes/{id} — 详情 - PATCH /api/scenes/{id} — 编辑 - DELETE /api/scenes/{id} — 删除 - POST /api/scenes/{id}/activate — 激活(替代 v1 的 /api/restart + env 切换) - POST /api/scenes/import-yaml — YAML 导入到 DB(保留 v1 入口) - GET /api/scenes/{id}/export-yaml — 导出(高级用户备份) 【验收标准】 1. 在 Web UI 上点『+ 新建场景』,填名字『咖啡馆』,进入编辑器,增 2 个 personas(zhaomin/lisi)+ 1 个 location(咖啡馆),点保存 2. 在场景列表点『激活』,3 秒后页面刷新,世界变成 2 agent + 1 location 3. 故意填错 persona(引用不存在 location),点保存 → 错误提示框不消失,DB 写不入 4. 把 v1 的 personas.yaml 拷到 /opt/.../data/scenes/import.yaml,Web UI 点『导入 YAML』,选择后内容进编辑器可二次编辑 5. 在场景列表点『复制』,新场景叫『咖啡馆(副本)』,可独立编辑 【MVP 不做 — YAGNI】 - 多人协作 / 权限(只单人单会话) - 场景版本历史(只 latest) - 拖拽调整坐标(用 x/y 数字输入框) - 场景分享链接(只本地 DB) - 高级搜索/筛选(只名称搜索) 【引用链】 - 引用 REQ-9d88acbf(阶段 1,complete) — 基础小镇 - 替换 REQ-7cfc9696(阶段 3 v1 YAML,implemented) — 推倒 - 为 REQ-16c99532(阶段 4 剧情 P2)打基础 — 场景化是剧情的前提 【成本预估】 - 2 周 subagent 并发(每人 1 周, 串行 4-5 人) - DB 沿用 event_store,无新 infra - Web UI 用 FastAPI 静态 + 原生 HTML/CSS/JS,不引 React/Vue(YAGNI) - 单测 80+ 条, E2E playwright 5 场景
👤 用户故事
作为产品运营/客户演示用户,我希望完全在 town Web 页面上增删改 personas 和 locations,切换场景存档,不需要 SSH/改文件/用 AI 代劳,就能换一个 AI 智能体世界。
✅ 验收标准 (5 项)
-
Given 在 Web UI 点 + 新建场景 填 咖啡馆 增 2 personas + 1 location
When 点保存
Then 场景入库,跳到场景列表,新场景卡片可见 -
Given 场景列表 点 激活
When 等待 3 秒
Then 页面刷新,世界变成 2 agent + 1 location,toast 显示激活成功 -
Given 故意填错 persona 引用不存在 location
When 点保存
Then 错误提示框不消失,DB 写不入 -
Given v1 的 personas.yaml 在 import 目录
When Web UI 点 导入 YAML
Then 内容进编辑器可二次编辑 -
Given 场景列表 点 复制
When 自动生成 咖啡馆(副本)
Then 新场景可独立编辑
🏷️ 标签
ai-agent-virtual-life stage3-v2 web-ui scene-archive db-backed p0 replaces:7cfc9696
🔄 推进状态
创建于 2026-06-30 11:55 · 决策于 2026-06-30 14:42