# 项目进度追踪 ## 当前阶段:P3 — 体验增强 ### Phase 1-3 — 全部完成 ✅ ### P0 — 全局优化(全部完成 ✅) | 子项 | 说明 | 状态 | |------|------|------| | **P0a** | i18n 基础设施 + 翻译文件 + LanguageProvider + useT hook | ✅ | | **P0b** | UI 统一 — Design Token + 共享组件库 | ✅ | | **P0c** | 逐页翻译 + 语言切换 — 沙盒页面 useT 化 | ✅ | | **P0d** | 会员定价页重构(用量可视化) | ✅ | | **P0e** | 模型选择器升级(卡片式 + 能力标签) | ✅ | | **P0f** | 会话分享链接 — HMAC 签名 + 分享查看页 | ✅ | ### P1 — 学习技能包(全部完成 ✅) | 子项 | 说明 | 状态 | |------|------|------| | **后端** | SkillsModule + 8 技能定义 + 过滤/详情 API | ✅ | | **前端** | /skills 市场 + /skills/[id] 详情 + header 入口 | ✅ | | **沙盒集成** | 替代硬编码 SCENES,从 API 动态加载,?skill=xxx 支持 | ✅ | ### P2 — CSS 统一(全部完成 ✅) | 子项 | 说明 | 状态 | |------|------|------| | **Mobile variables.css** | Design Token 变量定义(Web/Mobile 统一) | ✅ | | **Mobile 全站 18 页** | 批量替换 hardcoded color → CSS vars | ✅ | | **PC 响应式** | header/compare/sandbox/member/workshop 移动端修复 | ✅ | ### P3 — 体验增强(全部完成 ✅) | 优先级 | 项目 | 说明 | 状态 | |--------|------|------|------| | **P4a** | 多模态 — 图片上传 + 沙盒 Vision | ✅ 完成 | | **P4b** | 代码语法高亮 | highlight.js + CodeBlock 组件 | ✅ | | **P3c** | 会话重命名 | PATCH endpoint + 双击编辑 | ✅ | | — | SDK / 共享 UI 包 | 远期规划 | 📋 | ### 参考来源 - opencode 源码克隆到 `/tmp/opencode-source/`(21 packages, 147MB) ### P4 — 支付闭环(进行中 🔄) | 子项 | 说明 | 状态 | |------|------|------| | **P4a** | Mock 支付自动完成 — `PaymentService.completeMockPayment()` + `OrdersService` 检测 mock 结果后自动调用 | ✅ | | **P4b** | 会员页面 mock 提示优化 — 显示"订阅成功"而非"请扫码支付" | ✅ | | **P4c** | 真实微信支付证书部署 — 商户证书/密钥已安装到 `backend/cert/key/`,参数与 `.env` 一致 | ✅ | | **P4d** | 下单切 NATIVE 扫码支付 — 默认 `tradeType: 'NATIVE'`,前端展示二维码 Modal + 轮询支付状态 | ✅ | | **P4e** | JSAPI 支付集成 — 检测微信环境 + openid,在 Mini Program web-view 内自动调起 `WeixinJSBridge`;其他场景 NATIVE 兜底 | ✅ | | — | 订阅到期提醒 / 自动续费 | 📋 远期 | | — | 获取公众号 appid 后补充 Web OAuth 流程 | 📋 待定 | ### P5 — 运营助手(已完成 ✅) | 子项 | 说明 | 状态 | |------|------|------| | **P5a** | 新增 `POST /admin/ai-assistant/chat` 端点 — 管理员专用 AI 聊天,使用 AdminGuard | ✅ | | **P5b** | 新增 `AdminAiAssistantService` — 19 个可执行工具定义(查看数据/用户管理/评论审核/状态切换等) | ✅ | | **P5c** | 新增 `POST /admin/ai-assistant/action` 端点 — 工具执行 + AI 自然语言总结 | ✅ | | **P5d** | 前端运营助手改造 — Tool Calling 架构,AI 自动识别用户意图→调用工具→解释结果→展示 | ✅ | | **P5e** | system prompt 动态注入可用工具列表,覆盖仪表盘/用户/订单/评论/Banner/通知/配置/角色/企业版等 | ✅ | ### 关键决策 - `frontend/src/lib/models.ts` 作为模型列表单数据源 - 所有颜色使用 CSS 变量(`text-foreground`/`text-muted-foreground`/`bg-card`/`bg-muted`/`border-border`) - `nest build` 正常产出(`--tsc` 遗漏 prisma 模块) - 沙盒 JWT 认证保留 - Mock 支付自动完成闭环,无需手动触发回调;真实微信支付上线后自动切换 - 运营助手采用 Tool Calling 架构:system prompt 描述工具 → AI 返回 JSON 工具调用 → 后端执行 → 结果喂回 AI 总结 → 展示给用户 ## 2026-05-27 Session ### Changes Made - **Fixed OpenAI default model**: Changed `OPENAI_MODEL` in `.env` from `meituan/longcat-flash-lite` (invalid, returned 400) to `deepseek/deepseek-v4-flash` (confirmed working on qnaigc API). The "通用模式" (general model) now returns real AI responses instead of mock fallback. - **Fixed empty content handling**: Updated `OpenAICompatibleProvider.chat()` to fall back to `reasoning_content` when `content` is empty (SenseNova models return content in `reasoning_content`). Same fix applied in `chatStream()` for delta content. ### Verification - Backend successfully registers: `OpenAI 兼容接口已注册: deepseek/deepseek-v4-flash` - 5 test chat requests to `POST /api/v1/sandbox/chat` with `model:"general"` all returned 201 in 1.3-12.7s (vs. previous mock/fallback) - No more `AIGatewayService` "调用失败" errors in logs for OpenAI provider - Backend runs under PM2 (v7.0.1), managed via `pm2 restart backend --update-env` ### Known Issues - SenseNova API (`token.sensenova.cn`) still returns 404 "model is not found" for `deepseek-v4-flash` et al — models might need different naming on that endpoint - Server: backend `node dist/main.js` on port 4000, frontend Next.js on port 3000, both managed by PM2 ### 2026-05-27 后续优化 **彻底修复 CSS 丢失问题** 根本原因:PM2 用 `npm run dev`(`next dev`)运行前端,每次重启都会重新编译,`.next` 缓存被销毁导致 CSS 丢失。 解决方案:改用 `output: 'export'` 静态导出 + 独立 HTTP 服务器。 | 文件 | 变更 | |------|------| | `frontend/server.js` | **新增** — Node.js 静态文件服务器,支持 Next.js 静态导出 URL 模式(`/about` → `about.html`),CSS/JS 缓存一年,HTML 不缓存 | | `ecosystem.config.js` | 前端从 `npm run dev` 改为 `node server.js`,NODE_ENV=production | | `frontend/package.json` | `predev` 改为仅删 `out/`,不再删 `.next/` | 部署流程: 1. `npm run build` → 生成 `out/` 静态目录 2. PM2 运行 `node server.js` → 直接提供静态文件 3. 重启后 CSS 不变,无需重新编译 当前状态: - 前端 `localhost:3000` (static server, 无编译延迟) - 后端 `localhost:4000` (NestJS) - 所有路由正常 (/, /about, /sandbox 均为 200) - CSS 持久化,重启后不丢失