417fb266d4
- 后端: AI沙箱流式对话(SSE), reasoning_content 回退支持 - 前端: 沙箱页流式渲染, 引导学习面板, 默认场景/Starter兜底 - 优化: 前端改用静态文件服务器(node server.js)替代next dev, CSS永不丢失 - 修复: 通用模型默认改为可用模型, predev不再删.next缓存
110 lines
6.2 KiB
Markdown
110 lines
6.2 KiB
Markdown
# 项目进度追踪
|
||
|
||
## 当前阶段: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 持久化,重启后不丢失
|