From 98331abbd5922b7f9ae228dc40e03d35db6d4a6a Mon Sep 17 00:00:00 2001 From: Yaojia Wang Date: Mon, 30 Mar 2026 15:09:04 +0200 Subject: [PATCH] Update doc --- CLAUDE.md | 15 ++++--- docs/DEVELOPMENT-PLAN.md | 85 ++++++++++++++++++----------------- frontend/tsconfig.tsbuildinfo | 1 + 3 files changed, 54 insertions(+), 47 deletions(-) create mode 100644 frontend/tsconfig.tsbuildinfo diff --git a/CLAUDE.md b/CLAUDE.md index a778f70..d443b99 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -210,13 +210,16 @@ git merge phase-{N}/{short-description} git push origin main --tags ``` -**Mark phase as completed (MANDATORY -- do ALL three):** +**Mark phase as completed (MANDATORY -- do ALL four):** -1. **Update Phase Summary table** in this file (`CLAUDE.md`): change Status from `IN PROGRESS` to `COMPLETED (YYYY-MM-DD)` -2. **Update dev log** (`docs/phases/phase-{N}-dev-log.md`): fill in `Date completed` and set status to `COMPLETED` -3. **Check off tasks** in `docs/DEVELOPMENT-PLAN.md`: mark all completed task checkboxes `- [x]` under the current phase section +1. **Check off tasks** in `docs/DEVELOPMENT-PLAN.md`: mark all completed task checkboxes `- [x]` under the current phase section +2. **Add phase completion marker** in `docs/DEVELOPMENT-PLAN.md`: add `> Status: COMPLETED (YYYY-MM-DD)` line under the phase heading +3. **Update dev log** (`docs/phases/phase-{N}-dev-log.md`): fill in `Date completed` and set status to `COMPLETED` +4. **Update Phase Summary table** in this file (`CLAUDE.md`): change Status from `IN PROGRESS` to `COMPLETED (YYYY-MM-DD)` -All three markers must be consistent. If any is missed, the next phase's Step 0 regression gate will catch the discrepancy. +`docs/DEVELOPMENT-PLAN.md` is the authoritative source for phase status. The CLAUDE.md table is a convenience summary that must stay in sync. + +All four markers must be consistent. If any is missed, the next phase's Step 0 regression gate will catch the discrepancy. A checkpoint includes: - `/everything-claude-code:checkpoint create` at phase start @@ -225,7 +228,7 @@ A checkpoint includes: - Phase dev log written and linked - `/everything-claude-code:verify` passed - Git tag `checkpoint/phase-{N}` created -- Phase marked COMPLETED in three locations +- Phase marked COMPLETED in four locations - Branch merged to main --- diff --git a/docs/DEVELOPMENT-PLAN.md b/docs/DEVELOPMENT-PLAN.md index 468fba4..02d2617 100644 --- a/docs/DEVELOPMENT-PLAN.md +++ b/docs/DEVELOPMENT-PLAN.md @@ -36,6 +36,9 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴 ## Phase 1: 核心框架 (第 1-3 周) +> Status: COMPLETED (2026-03-30) +> Dev log: [Phase 1 Dev Log](phases/phase-1-dev-log.md) + ### 目标 搭建完整的聊天回路: 用户在 React UI 发送消息 -> FastAPI WebSocket 接收 -> LangGraph Supervisor 处理 -> Mock Agent 响应 -> 流式返回给用户。所有会话状态通过 PostgresSaver 持久化。 @@ -44,27 +47,27 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴 #### 1.1 项目初始化与基础设施 (预计 2 天) -- [ ] **1.1.1** 初始化 Python 项目结构 (`pyproject.toml`, 依赖管理) +- [x] **1.1.1** 初始化 Python 项目结构 (`pyproject.toml`, 依赖管理) - 文件: `backend/pyproject.toml` - 工作量: S (2 小时) - 依赖: 无 - 风险: 低 -- [ ] **1.1.2** 创建 Docker Compose 配置 (PostgreSQL 16 + 应用) +- [x] **1.1.2** 创建 Docker Compose 配置 (PostgreSQL 16 + 应用) - 文件: `docker-compose.yml` - 工作量: S (2 小时) - 依赖: 无 - 风险: 低 -- [ ] **1.1.3** 配置 PostgresSaver 检查点持久化 +- [x] **1.1.3** 配置 PostgresSaver 检查点持久化 - 文件: `backend/app/db.py` - 工作量: M (4 小时) - 依赖: 1.1.2 - 风险: 中 -- PostgresSaver schema 初始化需要验证兼容性 -- [ ] **1.1.4** 设置 pytest + FastAPI TestClient 测试框架 +- [x] **1.1.4** 设置 pytest + FastAPI TestClient 测试框架 - 文件: `backend/tests/conftest.py`, `backend/pyproject.toml` - 工作量: S (2 小时) - 依赖: 1.1.1 - 风险: 低 -- [ ] **1.1.5** 配置环境变量管理 (`LLM_PROVIDER`, `LLM_MODEL`, DB 连接等) +- [x] **1.1.5** 配置环境变量管理 (`LLM_PROVIDER`, `LLM_MODEL`, DB 连接等) - 文件: `backend/app/config.py`, `.env.example` - 工作量: S (1 小时) - 依赖: 无 @@ -72,22 +75,22 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴 #### 1.2 YAML Agent 注册表 (预计 2 天) -- [ ] **1.2.1** 设计 Agent YAML 配置 schema (name, description, permission, personality, tools) +- [x] **1.2.1** 设计 Agent YAML 配置 schema (name, description, permission, personality, tools) - 文件: `backend/agents.yaml` - 工作量: S (2 小时) - 依赖: 无 - 风险: 低 -- [ ] **1.2.2** 实现 YAML 注册表加载器 + 校验 (无效 YAML 需给出文件/行号错误) +- [x] **1.2.2** 实现 YAML 注册表加载器 + 校验 (无效 YAML 需给出文件/行号错误) - 文件: `backend/app/registry.py` - 工作量: M (4 小时) - 依赖: 1.2.1 - 风险: 中 -- 校验逻辑需覆盖各种畸形输入 -- [ ] **1.2.3** 实现 Agent 人格配置 (tone, greeting, escalation_style) +- [x] **1.2.3** 实现 Agent 人格配置 (tone, greeting, escalation_style) - 文件: `backend/app/registry.py` (扩展) - 工作量: S (1 小时) - 依赖: 1.2.2 - 风险: 低 -- [ ] **1.2.4** 编写注册表加载器单元测试 (正常加载、空文件、无效 YAML、缺少必填字段) +- [x] **1.2.4** 编写注册表加载器单元测试 (正常加载、空文件、无效 YAML、缺少必填字段) - 文件: `backend/tests/test_registry.py` - 工作量: S (2 小时) - 依赖: 1.2.2 @@ -95,22 +98,22 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴 #### 1.3 Mock Agent 与工具 (预计 1.5 天) -- [ ] **1.3.1** 创建 Mock 订单查询 Agent + 工具 (get_order_status, get_tracking_info) +- [x] **1.3.1** 创建 Mock 订单查询 Agent + 工具 (get_order_status, get_tracking_info) - 文件: `backend/app/agents/order_lookup.py` - 工作量: M (3 小时) - 依赖: 1.2.2 - 风险: 低 -- [ ] **1.3.2** 创建 Mock 订单操作 Agent + 工具 (cancel_order -- 需要 interrupt) +- [x] **1.3.2** 创建 Mock 订单操作 Agent + 工具 (cancel_order -- 需要 interrupt) - 文件: `backend/app/agents/order_actions.py` - 工作量: M (3 小时) - 依赖: 1.2.2 - 风险: 低 -- [ ] **1.3.3** 创建通用回退 Agent (处理误路由和无法分类的意图) +- [x] **1.3.3** 创建通用回退 Agent (处理误路由和无法分类的意图) - 文件: `backend/app/agents/fallback.py` - 工作量: S (2 小时) - 依赖: 1.2.2 - 风险: 低 -- [ ] **1.3.4** 编写 Mock Agent 单元测试 +- [x] **1.3.4** 编写 Mock Agent 单元测试 - 文件: `backend/tests/test_agents.py` - 工作量: S (2 小时) - 依赖: 1.3.1, 1.3.2, 1.3.3 @@ -118,39 +121,39 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴 #### 1.4 LangGraph Supervisor 配置 (预计 2 天) -- [ ] **1.4.1** 配置 LangGraph Supervisor (使用 langgraph-supervisor, 连接注册表中的 Agents) +- [x] **1.4.1** 配置 LangGraph Supervisor (使用 langgraph-supervisor, 连接注册表中的 Agents) - 文件: `backend/app/graph.py` - 工作量: M (6 小时) - 依赖: 1.2.2, 1.3.1, 1.3.2, 1.3.3 - 风险: 高 -- LangGraph supervisor 配置是核心, 如果阻塞超过 5 天需回退到单 Agent -- [ ] **1.4.2** 实现基础 interrupt() 流程 (写操作触发人工确认) +- [x] **1.4.2** 实现基础 interrupt() 流程 (写操作触发人工确认) - 文件: `backend/app/graph.py` (扩展) - 工作量: M (4 小时) - 依赖: 1.4.1 - 风险: 中 -- interrupt/resume 状态管理需仔细测试 -- [ ] **1.4.3** 配置 LLM Provider 抽象 (BaseChatModel + 环境变量切换) +- [x] **1.4.3** 配置 LLM Provider 抽象 (BaseChatModel + 环境变量切换) - 文件: `backend/app/llm.py` - 工作量: S (2 小时) - 依赖: 1.1.5 - 风险: 低 -- [ ] **1.4.4** 实现 Token 用量统计回调 +- [x] **1.4.4** 实现 Token 用量统计回调 - 文件: `backend/app/callbacks.py` - 工作量: S (2 小时) - 依赖: 1.4.1 - 风险: 低 -- [ ] **1.4.5** 启用 Prompt Caching (从第一天减少重复 system prompt 的 LLM 成本) +- [x] **1.4.5** 启用 Prompt Caching (从第一天减少重复 system prompt 的 LLM 成本) - 文件: `backend/app/llm.py` (扩展) - 工作量: S (1 小时) - 依赖: 1.4.3 - 风险: 低 - 来源: TODOS.md 设计变更 -- "Prompt caching: 从第一天启用" -- [ ] **1.4.6** 实现会话滑动窗口 TTL (30 分钟, 每次消息重置; 待审批的 interrupt 延长 TTL 直到解决) +- [x] **1.4.6** 实现会话滑动窗口 TTL (30 分钟, 每次消息重置; 待审批的 interrupt 延长 TTL 直到解决) - 文件: `backend/app/session_manager.py` - 工作量: M (3 小时) - 依赖: 1.4.1, 1.1.3 - 风险: 中 -- 需区分 session TTL (滑动窗口) 和 interrupt TTL (固定 30 分钟) - 来源: design-doc.md -- "30-minute sliding window TTL (reset on each turn)" -- [ ] **1.4.7** 编写 Graph 单元测试 (supervisor 路由、mock 工具调用、状态断言、session TTL) +- [x] **1.4.7** 编写 Graph 单元测试 (supervisor 路由、mock 工具调用、状态断言、session TTL) - 文件: `backend/tests/test_graph.py` - 工作量: M (4 小时) - 依赖: 1.4.1, 1.4.2 @@ -158,27 +161,27 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴 #### 1.5 FastAPI WebSocket 后端 (预计 2 天) -- [ ] **1.5.1** 实现 FastAPI 应用入口 + WebSocket `/ws` 端点 +- [x] **1.5.1** 实现 FastAPI 应用入口 + WebSocket `/ws` 端点 - 文件: `backend/app/main.py` - 工作量: M (4 小时) - 依赖: 1.4.1 - 风险: 低 -- [ ] **1.5.2** 实现 WebSocket 流式输出 (astream_events) +- [x] **1.5.2** 实现 WebSocket 流式输出 (astream_events) - 文件: `backend/app/main.py` (扩展) - 工作量: M (4 小时) - 依赖: 1.5.1 - 风险: 中 -- 流式事件格式需与前端协议一致 -- [ ] **1.5.3** 实现 interrupt 响应处理 (WebSocket 接收审批/拒绝, 恢复 graph 执行) +- [x] **1.5.3** 实现 interrupt 响应处理 (WebSocket 接收审批/拒绝, 恢复 graph 执行) - 文件: `backend/app/main.py` (扩展) - 工作量: M (4 小时) - 依赖: 1.5.2, 1.4.2 - 风险: 高 -- 断线重连 + 重发 interrupt 提示是易出错点 -- [ ] **1.5.4** 实现 DB 错误处理 (try/except 包裹 graph 调用, 返回友好错误信息) +- [x] **1.5.4** 实现 DB 错误处理 (try/except 包裹 graph 调用, 返回友好错误信息) - 文件: `backend/app/main.py` (扩展) - 工作量: S (1 小时) - 依赖: 1.5.1 - 风险: 低 -- [ ] **1.5.5** 编写 WebSocket 测试 (连接、消息流、流式输出、interrupt 响应、断线处理) +- [x] **1.5.5** 编写 WebSocket 测试 (连接、消息流、流式输出、interrupt 响应、断线处理) - 文件: `backend/tests/test_websocket.py` - 工作量: M (4 小时) - 依赖: 1.5.1, 1.5.2, 1.5.3 @@ -186,37 +189,37 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴 #### 1.6 React 聊天 UI (预计 3 天) [可并行] -- [ ] **1.6.1** 初始化 React 项目 (Vite 或 CRA) +- [x] **1.6.1** 初始化 React 项目 (Vite 或 CRA) - 文件: `frontend/` 目录 - 工作量: S (1 小时) - 依赖: 无 - 风险: 低 -- [ ] **1.6.2** 实现聊天消息列表组件 (支持流式 token 渲染) +- [x] **1.6.2** 实现聊天消息列表组件 (支持流式 token 渲染) - 文件: `frontend/src/components/ChatMessages.tsx` - 工作量: M (4 小时) - 依赖: 1.6.1 - 风险: 低 -- [ ] **1.6.3** 实现消息输入组件 +- [x] **1.6.3** 实现消息输入组件 - 文件: `frontend/src/components/ChatInput.tsx` - 工作量: S (2 小时) - 依赖: 1.6.1 - 风险: 低 -- [ ] **1.6.4** 实现 WebSocket 连接管理 (连接、断线重连、消息收发) +- [x] **1.6.4** 实现 WebSocket 连接管理 (连接、断线重连、消息收发) - 文件: `frontend/src/hooks/useWebSocket.ts` - 工作量: M (4 小时) - 依赖: 1.6.1 - 风险: 中 -- 需处理断线重连逻辑 -- [ ] **1.6.5** 实现 interrupt 确认 UI (确认/拒绝按钮, 操作详情展示) +- [x] **1.6.5** 实现 interrupt 确认 UI (确认/拒绝按钮, 操作详情展示) - 文件: `frontend/src/components/InterruptPrompt.tsx` - 工作量: M (3 小时) - 依赖: 1.6.4 - 风险: 低 -- [ ] **1.6.6** 实现 Agent 操作内联展示 (工具调用过程可见) +- [x] **1.6.6** 实现 Agent 操作内联展示 (工具调用过程可见) - 文件: `frontend/src/components/AgentAction.tsx` - 工作量: S (2 小时) - 依赖: 1.6.2 - 风险: 低 -- [ ] **1.6.7** 集成聊天页面主组件 +- [x] **1.6.7** 集成聊天页面主组件 - 文件: `frontend/src/pages/ChatPage.tsx` - 工作量: M (3 小时) - 依赖: 1.6.2, 1.6.3, 1.6.4, 1.6.5, 1.6.6 @@ -226,15 +229,15 @@ Smart Support 是一个 AI 客服行动层框架。核心价值主张: "粘贴 通过以下全部验证才能进入 Phase 2: -- [ ] `docker compose up` 成功启动 PostgreSQL + 应用 -- [ ] 打开 `http://localhost:8000` 聊天 UI 加载正常 -- [ ] 发送 "订单 1042 的状态" -> 收到 Mock Agent 的流式响应 -- [ ] 发送 "取消订单 1042" -> 收到 interrupt 确认提示 -> 批准 -> 收到确认消息 -- [ ] 发送 "取消订单 1042" -> 收到 interrupt 确认提示 -> 拒绝 -> 收到取消消息 -- [ ] 多轮对话上下文保持 (通过 PostgresSaver 验证) -- [ ] 会话 30 分钟无活动后过期; 每次消息重置 TTL; 待审批 interrupt 延长 TTL -- [ ] 无效 YAML 配置启动时给出清晰错误信息 -- [ ] `pytest --cov` 覆盖率 >= 80% (Phase 1 代码) +- [x] `docker compose up` 成功启动 PostgreSQL + 应用 +- [x] 打开 `http://localhost:8000` 聊天 UI 加载正常 +- [x] 发送 "订单 1042 的状态" -> 收到 Mock Agent 的流式响应 +- [x] 发送 "取消订单 1042" -> 收到 interrupt 确认提示 -> 批准 -> 收到确认消息 +- [x] 发送 "取消订单 1042" -> 收到 interrupt 确认提示 -> 拒绝 -> 收到取消消息 +- [x] 多轮对话上下文保持 (通过 PostgresSaver 验证) +- [x] 会话 30 分钟无活动后过期; 每次消息重置 TTL; 待审批 interrupt 延长 TTL +- [x] 无效 YAML 配置启动时给出清晰错误信息 +- [x] `pytest --cov` 覆盖率 >= 80% (Phase 1 代码) ### Phase 1 测试要求 diff --git a/frontend/tsconfig.tsbuildinfo b/frontend/tsconfig.tsbuildinfo new file mode 100644 index 0000000..e677046 --- /dev/null +++ b/frontend/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/app.tsx","./src/main.tsx","./src/types.ts","./src/components/agentaction.tsx","./src/components/chatinput.tsx","./src/components/chatmessages.tsx","./src/components/interruptprompt.tsx","./src/hooks/usewebsocket.ts","./src/pages/chatpage.tsx"],"version":"5.7.3"} \ No newline at end of file