195 Commits

Author SHA1 Message Date
wangdl
38a8629e42 feat: M8 学习信息收集系统完整实现
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 11s
Phase 1-2: 设计文档 + 数据库 (ReadingEvent/MaterialReadingProgress/TemporaryReadingMaterial/LearningSession扩展/DailyLearningActivity扩展/LearningRecord)
Phase 3: 批量上报 + 校验去重 + ReadingEventProcessorService
Phase 4: 4表聚合管线 (LearningSession/MaterialReadingProgress/DailyLearningActivity/LearningRecord)
Phase 5: 查询接口 (progress/continue/summary/trend/heatmap/history/reprocess)
Phase 6: 权限校验 + session中断清理 + API文档

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-08 21:09:13 +08:00
wangdl
55e25f347e fix: M-CHAT-A3 createSession 支持 forceCreate 参数
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 42s
forceCreate=true 时跳过 open-or-create 查找,强制创建新会话。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 17:58:33 +08:00
wangdl
fe44dec567 feat: M-CHAT ChatScope 会话系统完整实现
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 46s
## 数据模型
- ChatSession +13 字段 (scopeType/scopeId/parentKnowledgeBaseId/createdFrom/isPinned/isArchived/isDeleted/modelMode/modelId/lastMessageAt)
- ChatMessage +scopeSnapshot (消息级 scope 快照)
- ChatCitation +lineStart/lineEnd +sourceId 索引
- 5 个新查询索引

## 核心能力
- open-or-create: 同 scope 继续会话 (200) / 新建 (201)
- scope 级检索: global/knowledge_base/material/knowledge_item/folder
- listSessions: scope 过滤 + isDeleted 排除 + isPinned 排序 + 分页元数据
- 自动标题: 首条消息截取 + 词边界处理
- 软删除 + 置顶/归档
- scope 字段创建后不可修改
- 全部端点 userId 鉴权

## 文档
- docs/chat-scope-design.md (设计文档 + 决策表)
- docs/chat-scope-api-contract.md (API 契约)
- docs/chat-scope-test-plan.md (33 条测试用例)
- prisma/migrations/backfill_chat_scope.sql (旧数据回填)

## Bug 修复
- #104: KnowledgeItem.sourceRef 填充 (material scope 检索修复)
- #102: sendMessageStream aiGateway null 保护
- listSessions isDeleted/isArchived 过滤 + 分页

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 17:27:40 +08:00
wangdl
17f16cea67 feat: #70 ChatSession 新增 knowledgeItemIds 字段,限定 AI 检索范围
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 46s
- Prisma schema: ChatSession 加 knowledgeItemIds Json? 字段
- createSession: 接受可选 knowledgeItemIds 参数
- loadContext: 支持 itemIds 过滤,传入时只检索指定知识点
- sendMessage/sendMessageStream: 读取 session.knowledgeItemIds 传入 loadContext

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 16:02:38 +08:00
wangdl
6d0cc9b6dc fix: GET /sessions @Body → @Query, 修复对话列表获取失败
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 44s
GET 请求不应使用 @Body 装饰器(NestJS 默认不解析 GET body)。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 15:45:03 +08:00
wangdl
dc5948a2cd fix: chat session auto-title + delete + remove double drag indicator
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 44s
- 首条用户消息自动设为会话标题(仅当 title 为空或为新对话时)
- 对话列表新增左滑删除
- 移除 duplicate drag indicator

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 15:15:00 +08:00
wangdl
35f2cd6e59 fix: SSE charset utf-8 + 服务端 charset header
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 43s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 15:01:16 +08:00
wangdl
aea071e4c9 fix: rag-chat controller Response 改为 import type 修复 isolatedModules 编译错误
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 43s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 14:56:13 +08:00
wangdl
6f77162cf8 feat: #71 RAG Chat SSE 流式输出 + DeepSeek V4 Pro 思考过程
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 20s
- AiProvider 接口新增 StreamChunk 类型 + generateStream() 方法
- DeepSeekProvider 实现 generateStream():stream=true,读 reader 逐 chunk yield
- AiGatewayService 新增 generateStream():透传 provider stream + 记录用量
- RagChatService 新增 sendMessageStream():流式调用 + 保存最终 AI 回复到 DB
- POST /api/rag-chat/sessions/:id/stream 新 SSE endpoint
- thinking chunk:DeepSeek V4 Pro reasoning_content → type: "thinking"
- 流式模式下禁用 response_format json_object,不阻塞思考过程

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 14:49:20 +08:00
wangdl
f4de598d96 fix: rag-chat 传入 outputSchema= RagChatOutputSchema,修复 parsed 为空对象
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 42s
parseJson 无 schema 时直接返回 {},导致 resp.parsed?.answer 始终为 null。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 14:30:53 +08:00
wangdl
69bcd07a0f debug: rag-chat 日志输出 AI parsed 结构
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 43s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 14:28:35 +08:00
wangdl
3d8246cf6e fix: AI Gateway content safety 空值检查导致所有 AI 输出被误拦
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 41s
contentSafety 未注入时 safetyCheck 为 undefined,!undefined?.safe = true,
错误抛出 "AI output blocked by content safety",实际 DeepSeek 正常返回。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 14:23:55 +08:00
wangdl
55221116b7 debug: rag-chat 日志增加 kbId
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 42s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 14:12:44 +08:00
wangdl
07f2786ab9 fix: 移除 rag-chat 调试日志中的 rawText 引用 (GatewayResponse 无此字段)
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 41s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 14:04:17 +08:00
wangdl
ce43256690 debug: rag-chat sendMessage 添加详细日志定位 AI Gateway 调用失败原因
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 21s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 13:56:28 +08:00
wangdl
d8877f926f fix: 注册 rag-chat prompt template,修复 AI 对话始终返回 fallback
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 44s
根因:PromptTemplateService 未注册 rag-chat 的 prompt,
sendMessage 中 promptTemplate.get('rag-chat') 抛异常被 catch,
永远走 fallbackReply("AI 服务暂时不可用")。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 13:48:17 +08:00
wangdl
78e21c4c4c fix: RagChatModule 导入 AiModule,修复 AiGatewayService 未注入
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 43s
AiGatewayService 使用了 @Optional() 导致不报错但始终为 null,
sendMessage 永远走 fallbackReply。现在导入 AiModule 正确注入。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 13:40:03 +08:00
wangdl
a784ee3bc3 fix: MiniMax 已到期,切换 primary tier 到 DeepSeek V4 Pro
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 40s
- model-router: primary 层 preferred 从 minimax-m2.7 改为 deepseek-v4-pro
- cost-calculator: 移除 minimax 零成本豁免
- billing: MiniMax 标注已到期

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:23:35 +08:00
wangdl
11a38a68c1 fix: admin-billing 不再硬编码 API key,改为从 ConfigService 读取
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 47s
DeepSeek 和硅基流动的 API key 改为从环境变量读取,不再硬编码在源码中。
旧 DeepSeek key(公司采购)已全局替换为个人账号 key sk-cb34244304914c77943dfaf6522a7c9a。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:17:17 +08:00
wangdl
28c68a8c3b fix: code review — 6 medium issues in KnowledgeItem/LearningActivity
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 43s
1. enrichItem: add Logger.warn on COS errors instead of silent catch
2. getTrend: add 15s timeout fallback for AI analysis
3. buildDailySeries: use local date strings to avoid UTC timezone shift
4. detectSourceType: use lazy regex .+? to prevent ReDoS on long texts
5. sortBy: validate against whitelist, reject invalid values
6. PaginationDto visibility/ownerType: already handled via @Query params

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:07:40 +08:00
wangdl
4b21c98835 fix: code review — 4 critical bugs in KnowledgeItem/KB modules
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 42s
1. enrichItem: remove MIME type → sourceType mapping (contentType is text/markdown not markdown)
2. update(): add field whitelist to prevent mass assignment (userId/deletedAt/etc)
3. createFolder: add userId permission check + parent folder validation
4. deleteFolder: cascade soft-delete to corresponding KnowledgeItem (itemType=folder)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-06 12:04:24 +08:00
wangdl
4b8653080e feat: #67 GET /activity/trend 新增 dailySeries 时间序列数据
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 43s
返回格式新增 dailySeries 字段 [{date, value, label}],支持 iOS 折线图/柱状图渲染。
数据来源:按日聚合 LearningActivity.durationSeconds。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-05 20:12:18 +08:00
wangdl
9c14bda0c2 feat: Phase 1 & 2 — KnowledgeItem/KB model补齐 + API增强
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 43s
#61 KnowledgeItem sourceType 自动检测(COS URL/HTML/Markdown/扩展名)
#59 KnowledgeItem 新增 durationSeconds 字段
#66 KnowledgeItem 新增 fileSize 字段,enrichItem 同步填充 COS 文件大小
#53 KnowledgeBase GET /knowledge-bases 支持 visibility/ownerType 查询筛选
#63 GET /knowledge-items 新增 sortBy/order 排序参数
#65 PATCH /knowledge-items/:id 支持 parentId 校验
#64 POST /knowledge-bases/:id/folders 同步创建 KnowledgeItem(itemType:folder)
#62 GET /learning-sessions 新增 status/sort 筛选参数
#69 KnowledgeItem detail 动态刷新 COS 预签名 URL(7天有效)
#60 GET /quizzes 跨知识库列表已实现,关 issue

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-05 20:01:43 +08:00
wangdl
d7a7611b36 fix: ChatCitation 字段 + BigInt 类型修复
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 48s
- ChatCitation.content → excerptText(对齐 Prisma schema)
- ChatCitation.score 不存在→ 移除
- UploadedFile.sizeBytes BigInt → Number() 转换

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-30 08:42:07 +08:00
wangdl
6033fbc997 feat: H0-12 Quiz 模型与 API
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 11s
Prisma 新增:
- Quiz(测验)
- QuizQuestion(题目,支持 choice/fill/judge 三种题型)
- QuizAttempt(答题记录)
- QuizAnswer(作答详情)

API:
- POST /quizzes(生成测验,自动从KB知识点抽题)
- GET /quizzes(列表)
- GET /quizzes/:id(含题目)
- POST /quizzes/:id/start(开始答题)
- POST /quizzes/:id/submit(提交答案+评分)
- GET /quizzes/:id/results?attemptId=(结果详情)
- GET /quizzes/history/list(历史记录)

题目生成策略:
- 选择题:题干=知识点标题,选项=内容片段+其他知识点干扰项
- 填空题:随机关键词挖空
- 判断题:随机生成对/错陈述

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 20:03:40 +08:00
wangdl
6ab54be309 feat: H0-11 RAG Chat 接入真实检索 + AI 生成管道
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 19s
- sendMessage 从 KB 加载知识点内容作为上下文(最多 30 条/4000 字符)
- 通过 AiGatewayService 调用 DeepSeek 生成回答
- AI 回复附带引用来源(ChatCitation)
- AI Gateway 不可用时降级提示
- 知识库为空时引导用户先添加内容

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 19:31:33 +08:00
wangdl
5fe31a8805 feat: H0-10 存储空间统计 + 学习资产计数
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 19s
- GET /users/me/storage(totalBytes/usedBytes/fileCount)
- GET /users/me/assets-summary(kbCount/itemCount/cardCount)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 19:29:22 +08:00
wangdl
b9f8334245 feat: H0-08 KnowledgeBase 增加业务字段 + 订阅 + 发现 + 置顶 + 公开
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 11s
Schema 新增:
- coverType/coverIcon/coverColor(封面类型/系统图标/颜色)
- visibility(private/public)
- isPinned(置顶)
- ownerType(user/official)
- isVerified(认证标识)
- KnowledgeBaseSubscription 表

API 新增:
- POST /knowledge-bases/:id/pin(切换置顶)
- PATCH /knowledge-bases/:id/visibility(切换公开/私有)
- POST /knowledge-bases/:id/subscribe(订阅)
- DELETE /knowledge-bases/:id/subscribe(取消订阅)
- GET /knowledge-bases/subscribed(已订阅列表)
- GET /knowledge-bases/discover(发现公开库)

增强:
- findAll 支持 visibility/ownerType 筛选 + 置顶优先排序
- findOne 公开库允许任何人查看
- update 支持所有新字段

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-29 19:24:21 +08:00
wangdl
4f59569b7c feat: KB 列表返回 coverUrl(coverKey → 预签名下载URL)
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 43s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 10:48:34 +08:00
wangdl
28caf1297f feat: KnowledgeBase 支持封面图 coverKey 字段
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 40s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-28 10:42:58 +08:00
wangdl
c331d08644 feat: 知识点软删除 + 批量删除接口
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 41s
- DELETE /knowledge-items/:id 软删除(设 deletedAt)
- POST /knowledge-items/batch-delete 批量软删除
- softDelete 校验归属权 + 自动更新父KB的itemCount

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:47:22 +08:00
wangdl
b5de001dbb fix: FileUploadRateLimit 10→200/小时,支持批量上传
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 43s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:41:56 +08:00
wangdl
53a4cc118a fix: 创建知识点时更新知识库 itemCount 计数
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 40s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 22:38:34 +08:00
wangdl
846ba43f8f fix: COS domain fallback 从 cos.longde.cloud 改为空字符串
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 44s
storage.config.ts 兜底值 cos.longde.cloud → ''
配合 CosStorageProvider 的 domain ? {...} : {} 逻辑,
彻底移除无效 TLS 证书的自定义域名。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:52:24 +08:00
wangdl
859156a59b fix: COS 自定义域名空值时回退到原生域名
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 45s
- CosStorageProvider 初始化时 Domain 为空不再传入 SDK
- 原生 COS 域名 (cos.ap-beijing.myqcloud.com) 有有效 TLS 证书
- 生产环境移除 STORAGE_COS_DOMAIN 配置

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:48:33 +08:00
wangdl
b9e6055400 fix: H0-01 彻底阻断生产环境 mock + 结构化错误码 + iOS Auth 合同文档
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 41s
- apple-auth.service.ts: verifyIdentityToken 增加 NODE_ENV 检查,
  生产环境缺 APPLE_BUNDLE_ID 时运行时返回 401,不再走 mock
- 新增 CAPIErrorCode 语义错误码体系 (src/common/errors/)
- 新增 CapiException 携带 errorCode 的 HttpException 子类
- GlobalExceptionFilter 响应自动包含 errorCode 字段
- AuthService/JwtAuthGuard/AppleAuthService 全部改用 CapiException
- 新增 LoginResponseDto/RefreshResponseDto/LogoutResponseDto/UserDto
- Auth controller Swagger 添加 type 参数
- 新增 docs/ios-auth-api-contract.md

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 21:03:15 +08:00
wangdl
c6fd1731d5 fix(auth): OnModuleInit改为warn而非throw,避免生产缺APPLE_BUNDLE_ID时进程崩溃
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 45s
2026-05-27 20:24:23 +08:00
wangdl
5fcfc87f84 fix(auth): H0-01 Apple登录—nonce验证+启动检查+fullName补写修复
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 34s
2026-05-27 20:22:42 +08:00
6a13edc7fb feat: H0 milestone — iOS integration blocking fixes
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 44s
H0-01: Reject Apple login mock fallback in production
H0-02: Protect /internal/* with InternalAuthGuard (X-Internal-API-Key)
H0-03: JwtAuthGuard check user status (deletedAt, status)
H0-04: Refresh token check user status + revoke all on deleted
H0-05: User/admin JWT isolation (type=user/admin, enforce ADMIN_JWT_ACCESS_SECRET)
H0-06: Add DTOs for import/source/learning-session controllers
H0-07: 22 E2E tests (h0.e2e-spec.ts), 5 iOS integration docs

Tests: 47/47 (H0 22 + M0 25), no regression.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-25 16:55:04 +08:00
ee5ebb5766 fix: add BigInt JSON serialization patch for Prisma BigInt columns
Some checks failed
Deploy API Server / build-and-deploy (push) Failing after 26s
UploadedFile.sizeBytes is BigInt → JSON.stringify throws TypeError.
Add BigInt.prototype.toJSON to convert to Number globally.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 20:38:46 +08:00
e36f9c9785 fix: project center — Gitea API wraps responses in {ok,data}, extract data field
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 44s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 20:36:32 +08:00
75f8dd27e7 fix: project center — fix empty repo list + Gitea tab bug + add repo selector
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 40s
- GiteaService: use /repos/search?q= with fallback to /user/repos, remove slow per-repo API calls
- Frontend: add RepoSelector dropdown to Issues/Milestones/Releases tabs
- Fix Gitea panel tab (was filtered out by conditional undefined)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 20:03:27 +08:00
2c164f46da perf: reduce SSH connection timeout from 5s to 2s for server metrics
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 41s
- Remote metrics SSH ConnectTimeout: 5s → 2s
- Remote metrics SSH command timeout: 8s → 4s
- Health check SSH timeouts remain at 3s (already reasonable)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 19:57:55 +08:00
f599af1b3c perf: add select clause to admin review query, exclude large TEXT columns
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 41s
- Only fetch display-needed columns, skip backText TEXT column
- Reduces data transfer and query time significantly

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 19:55:40 +08:00
d241407424 fix: M4 audit — add DELETE decisions, PATCH user-agreements, regular user list endpoint
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 44s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:56:54 +08:00
c6d01534c8 feat: M4-11 — vendor billing + secret lifecycle management
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 42s
- Add VendorBill Prisma model (provider/billMonth/amount/usageSummary)
- VendorBillController: CRUD bills, list/rotate/revoke secrets
- Secret lifecycle: active → expiring → expired/rotated/revoked

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:25:58 +08:00
b3176b8ead feat: M4-10 — admin notification deepening (cost alerts, import failures, key expirations)
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 41s
- Add scope field to Notification model (user/admin)
- AdminNotificationsController: list, send, mark read
- Generate endpoints: cost-alert, import-failure, key-expiring

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:23:35 +08:00
c4089129c0 feat: M4-09 — compliance & safety module (policies, agreements, filings, data requests)
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 42s
- Add PrivacyPolicy, UserAgreement, FilingRecord, DataExportRequest Prisma models
- ComplianceController: privacy policies, user agreements, filings, deletion/export requests
- AAPI: /admin-api/compliance/* (6 resource groups)

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:19:32 +08:00
cefc4d51c9 feat: M4-08 — release & decision module (changelogs, ADR, checklist)
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 42s
- Add DecisionRecord and ReleaseChecklist Prisma models
- ReleaseController: CRUD for changelogs, decisions, checklists
- AAPI: /admin-api/release/changelogs, /decisions, /checklists

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:14:53 +08:00
5d84769ac0 feat: M4-07 — Hermes Agent task/artifact management with approval workflow
All checks were successful
Deploy API Server / build-and-deploy (push) Successful in 40s
- Add AgentTask and AgentArtifact Prisma models
- HermesAgentController: list tasks, approve/reject, list artifacts
- AAPI: GET /admin-api/hermes/tasks, POST approve/reject, GET /admin-api/hermes/artifacts

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 18:10:37 +08:00