wangdl
c99626e5de
ci: add database migration automation workflow (API-AI-079)
...
Deploy API Server / build-and-deploy (push) Successful in 43s
- 3-stage: validate → dry-run → deploy-migration
- validate: prisma format check, client generation verification
- dry-run: MySQL service container, db push + migrate deploy + status
- deploy-migration: manual trigger, SSH migrate deploy with pre/post status
- Triggered on schema.prisma or migrations/** changes
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 14:02:48 +08:00
wangdl
781645de84
ci: add health check + rollback hint to deploy step
...
Deploy API Server / build-and-deploy (push) Successful in 47s
- Record previous docker images before deploy
- Health check loop: 12 attempts × 5s = 60s total
- On failure: warning + previous images printed for manual rollback
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 14:01:33 +08:00
wangdl
f33812cf7b
ci: add GitHub Actions CI/CD pipeline (API-AI-078)
...
Deploy API Server / build-and-deploy (push) Successful in 46s
- 5-stage pipeline: lint → test → build → docker-build → deploy
- lint: ESLint with npx prisma generate
- test: Jest with passWithNoTests, artifact upload
- build: NestJS build + dist verification
- docker-build: multi-stage Docker build for api + worker
- deploy: main-only, docker push + SSH deploy with prisma migrate
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 13:57:46 +08:00
wangdl
094f00553a
feat: production docker-compose with health checks + resource limits (API-AI-077)
...
Deploy API Server / build-and-deploy (push) Successful in 45s
- Add health checks: api (GET /health), worker, heavy-runtime, nginx
- Add resource limits (deploy.resources) for all 6 services
- Add heavy-runtime service (Rust AI Worker)
- Add INTERNAL_API_KEY + CREDENTIAL_ENCRYPTION_KEY env vars
- nginx health check via GET /health
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 13:53:24 +08:00
wangdl
5c7b8d1855
docs: add API reference with error codes, rate limiting, changelog (API-AI-076)
...
Deploy API Server / build-and-deploy (push) Successful in 47s
- Complete error code enumeration: Internal API + User API + Runtime errors
- Rate limiting: user quota, platform circuit breaker, global throttle
- Changelog: v1.0.0 initial → v1.1.0 current with all changes
- Integration examples: heartbeat cancel detection, job creation idempotency
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 13:49:45 +08:00
wangdl
4a69d14047
test: add integration tests for snapshot-builder.service (API-AI-068)
...
Deploy API Server / build-and-deploy (push) Successful in 44s
- 59 tests covering buildSnapshot full flow + all computational methods
- buildSnapshot: defaults, privacy flags, priority rules, DB persistence, error logging
- Scope routing: material vs knowledge_base session queries
- Computational methods: weightedQuizScore, weightedReviewScore, AIScore,
weakPointSeverity, quizTrend, compositeMastery, classifyMasteryLevel
- Quality: normalizeQualityPreference, getScoreWeights presets
- Device: mapPlatformCategory, computeSwitchFrequency, mapDeviceTaskSuitability
- Helpers: modeOf, buildAllowedFields, countBy, computeSignals
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 12:23:52 +08:00
wangdl
3e43b2b52d
test: add unit tests for runtime-internal.controller (API-AI-067)
...
Deploy API Server / build-and-deploy (push) Successful in 43s
- 12 tests covering all 9 endpoints + instanceId extraction
- instanceId: from header / default "unknown"
- pollJobs: limit default 5, capabilities pass-through
- lockJob/heartbeatJob: runtimeInstanceId fallback from dto→header
- getSnapshot: direct delegation
- resolveCredential: all fields + undefined credentialId
- submitResult/submitFailure: entire dto pass-through
- submitInvocationLogs: logs array extraction
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 12:19:06 +08:00
wangdl
5fbd437232
test: add unit tests for credential-encryption.service (API-AI-066)
...
Deploy API Server / build-and-deploy (push) Successful in 45s
- 17 tests covering encrypt/decrypt/hash/mask/redact + config error
- encrypt↔decrypt round-trip, random IV, base64, empty, unicode
- hash: deterministic, different inputs, empty string
- mask: long keys (4+****+4), short keys (2+****), edge cases
- redact: sk- token replacement, no-op, short sk- skip, empty
- Missing CREDENTIAL_ENCRYPTION_KEY throws on encrypt/decrypt
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 12:16:53 +08:00
wangdl
4713758344
test: add unit tests for platform-budget.service (API-AI-065)
...
Deploy API Server / build-and-deploy (push) Successful in 45s
- 15 tests covering all 6 public methods
- checkPlatformBudget: healthy, auto-create, circuit-open, half-open limit,
half-open pass, token exceeded, cost exceeded
- recordSuccess: upsert with reset circuit to closed
- recordFailure: increment failedCount, open circuit at threshold, first-day create
- Admin: transitionToHalfOpen / closeCircuit
- getBudgetState: state + limits, auto-create fallback
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 12:15:20 +08:00
wangdl
c433b3dc5d
refactor: split shared mockFindUnique into settings/usage mocks in quota tests
...
Deploy API Server / build-and-deploy (push) Successful in 43s
- userAiSettings.findUnique → mockSettingsFindUnique
- userAiUsageDaily.findUnique → mockUsageFindUnique
- Eliminates order-dependency of mockResolvedValueOnce chains
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 12:14:33 +08:00
wangdl
9c7247aa90
test: add unit tests for user-ai-quota.service (API-AI-064)
...
Deploy API Server / build-and-deploy (push) Successful in 48s
- 15 tests covering all 4 public methods
- checkQuota: pass under limits, defaults, null usage, job/token exceeded
- incrementJobCount: correct upsert params, apiKeyMode routing
- recordTokenUsage: all token fields, costEstimate default=0
- getUsage: both modes parallel, defaults for null records, mixed
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 12:12:57 +08:00
wangdl
1a5e040ed8
test: add unit tests for user-ai.controller (API-AI-063)
...
Deploy API Server / build-and-deploy (push) Successful in 47s
- 34 tests covering all 28 endpoints
- Profile: GET/PUT with null→{} fallback
- Settings: GET/PUT delegation
- Credentials: CRUD + test (6 endpoints)
- Analysis Jobs: create/cancel/get/list with query filters
- Publish: quiz + flashcard
- Analysis Results: getAnalysis/listAnalyses/listRecommendations/listWeakPoints
- Quizzes: get/getQuestions/list with filters
- Reanalysis/Notifications/Feedback/Flashcards
- Fix: getProfile ?? {} now awaits before null-coalescing
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:57:38 +08:00
wangdl
e16b970a2c
docs: sync internal API protocol with heartbeat & snapshot changes
...
Deploy API Server / build-and-deploy (push) Successful in 49s
- 4.3 Heartbeat: 204→200, add { jobId, lockUntil, cancelRequested } response
- 4.4 Get Snapshot: auto-rebuild replaces SNAPSHOT_EXPIRED/SNAPSHOT_NOT_FOUND
- 3. Error codes: drop SNAPSHOT_EXPIRED, mark SNAPSHOT_NOT_FOUND as deprecated
- 4.7 Submit Failure: add JOB_CANCELLED handling rule
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:54:48 +08:00
wangdl
b0e9796acb
fix: use ConfigService for DeepSeek base URL in testCredential
...
Deploy API Server / build-and-deploy (push) Successful in 43s
- Replace hardcoded 'https://api.deepseek.com/v1/models ' with config lookup
- Single source of truth via ai.deepseek.baseUrl (DEEPSEEK_BASE_URL env)
- Add ConfigService dep to UserAiService constructor + test mock
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:47:59 +08:00
wangdl
cb24e5fb96
fix: job-reaper batch-loop instead of single take:500 to avoid missing jobs
...
Deploy API Server / build-and-deploy (push) Successful in 45s
- Replace single findMany(take:500) with cursor-based while loop
- REAP_BATCH_SIZE=500 constant; processes all stuck running + expired jobs
- Prevents missing jobs when >500 are stuck simultaneously
- Update tests: reset mocks before custom chains, explicit call ordering
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:45:36 +08:00
wangdl
c0594c518d
test: add concurrent resolveSnapshot race test (API-AI-R01)
...
Deploy API Server / build-and-deploy (push) Successful in 47s
- Simulates two concurrent getSnapshot calls with no valid snapshot
- Documents the known race: both trigger buildSnapshot, second update overwrites first
- Verifies both calls complete without error (accepted-risk behavior)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:41:35 +08:00
wangdl
7725b3d2ea
perf: replace N+1 dedup queries with batch pre-fetch in convertCandidates
...
Deploy API Server / build-and-deploy (push) Successful in 46s
- convertQuizCandidates: batch findMany all stems before loop, dedup in-memory
- convertFlashcardCandidates: batch findMany all fronts before loop, dedup in-memory
- 50 items now = 1 query instead of 50
- Update tests: mock findMany instead of per-item findFirst
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:40:41 +08:00
wangdl
c2e5590718
fix: add observability to fire-and-forget persistResult & notifyJobComplete
...
Deploy API Server / build-and-deploy (push) Successful in 44s
- Add static counters: persistResultFailures, notifyFailures
- Replace .catch(() => {}) with logger.error + counter increment
- Add error-path unit tests for both counter increments
- Reset counters in beforeEach for test isolation
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:38:30 +08:00
wangdl
7aea03f6e0
fix: clarify quota check is read-only, prevent refactoring pitfalls
...
Deploy API Server / build-and-deploy (push) Successful in 46s
- Rename checkAndReserve→checkQuota (method only reads, does not reserve)
- Add doc comment: incrementJobCount is the actual quota reservation
- Update user-ai.service.spec.ts references
- Add comments for apiKeyMode/credentialId reassignment in budget fallback
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:36:01 +08:00
wangdl
c88af39673
feat: AI Runtime 完整业务逻辑实现
...
Deploy API Server / build-and-deploy (push) Successful in 45s
- runtime-internal.service: resolveSnapshot 自动重建、persistResult 5种jobType持久化、validateOutput 校验、convertQuizCandidates/convertFlashcardCandidates 候选转换、notifyJobComplete 通知、JOB_CANCELLED处理、heartbeat 双阶段更新+取消检测
- user-ai.service: createAnalysisJob 11步流程、cancelJob、publishQuiz/publishFlashcard、getAnalysis/listAnalyses等
- user-ai.controller: 20+ 用户API端点
- 新增服务: SnapshotBuilderService、PriorityRulesService、SnapshotCleanupService、JobReaperService
- 新增模块: admin-learning (CRUD管理)
- Prisma schema: cancelRequestedAt/cancelledAt/sourceBlockIds 字段、expiresAt 索引
- 文档: ai-runtime-user-api.md、Issue 记录
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:22:03 +08:00
wangdl
eba9632a4e
test: sync runtime-internal.service tests with current implementation (API-AI-062)
...
Deploy API Server / build-and-deploy (push) Successful in 45s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:12:02 +08:00
wangdl
02979e3c24
test: add unit tests for runtime-internal.service (API-AI-062)
...
Deploy API Server / build-and-deploy (push) Successful in 46s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-18 11:03:23 +08:00
wangdl
012e26b950
feat: API-Runtime 版本兼容协议 (API-AI-072)
...
Deploy API Server / build-and-deploy (push) Successful in 46s
- pollJobs: 记录/更新 RuntimeInstance (capabilities + heartbeat)
- submitResult: 校验 schemaVersion 匹配 job.outputSchemaVersion
- heartbeat: 首次调用设置 startedAt
- 错误码: RESULT_SCHEMA_UNSUPPORTED + RUNTIME_VERSION_INCOMPATIBLE
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 21:42:02 +08:00
wangdl
00ac32a103
feat: 平台 AI 预算、成本熔断与全局限流 (API-AI-071)
...
Deploy API Server / build-and-deploy (push) Successful in 45s
- PlatformBudgetService: checkPlatformBudget / recordSuccess / recordFailure
- 熔断器: closed → open (连续失败N次) → half_open (限制任务数) → closed
- 平台日 token 预算 + 成本预算检查
- Admin 接口: transitionToHalfOpen / closeCircuit / getBudgetState
- PlatformAiBudgetDaily 已存在于 Prisma schema
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 21:40:47 +08:00
wangdl
cc2ccbad59
fix: audit fixes for Runtime Internal API
...
Deploy API Server / build-and-deploy (push) Successful in 46s
1. heartbeat: locked→running transition on first heartbeat
2. submitResult: validate job is locked/running before accepting
3. submitFailure: validate job is locked/running before accepting
4. resolveCredentialForJob: update lastUsedAt on credential
5. pollJobs: filter by capabilities (snapshotVersion + outputSchemaVersion)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 21:38:44 +08:00
wangdl
5cbf20046a
feat: 用户 AI 消费额度与日限流 (API-AI-070)
...
Deploy API Server / build-and-deploy (push) Successful in 43s
- UserAiQuotaService: checkAndReserve / incrementJobCount / recordTokenUsage
- 创建 Job 前检查 maxDailyAiJobs + maxDailyTokenBudget
- Runtime 调用后更新 UserAiUsageDaily token 消耗
- user_deepseek_key 不计入平台 token 预算
- 超限返回 DAILY_JOB_LIMIT_EXCEEDED / DAILY_TOKEN_BUDGET_EXCEEDED
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 21:25:18 +08:00
wangdl
43e6e9029c
feat: Runtime Internal API (API-AI-028~034)
...
Deploy API Server / build-and-deploy (push) Successful in 46s
- RuntimeInternalController: 7 个 /internal/runtime/* 端点
- RuntimeInternalService: Poll/Lock/Heartbeat/Snapshot/Credential/Result/Fail/Log
- 复用 InternalAuthGuard + x-runtime-instance-id 追踪
- Job lock 防并发 (updateMany WHERE status=pending)
- Result 幂等 (resultIdempotencyKey)
- Failure retryable/non-retryable 处理
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 21:23:52 +08:00
wangdl
87fe180874
fix: add missing User relation on AiLearningAnalysis model
...
Deploy API Server / build-and-deploy (push) Successful in 47s
Prisma validation error P1012: User.aiAnalysisResultsNew missing
opposite relation on AiLearningAnalysis.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 20:52:19 +08:00
wangdl
4cf2aa99fd
feat: 用户 AI 设置与 Key 管理 API (API-AI-011~015)
...
Deploy API Server / build-and-deploy (push) Failing after 10s
- UserAiController: GET/PUT /ai/profile, GET/PUT /ai/settings
- UserAiController: CRUD /ai/model-credentials, POST test
- UserAiService: Profile upsert, Settings默认创建, Key 生命周期
- CredentialEncryptionService: AES-256-GCM 加解密, SHA-256 hash, mask脱敏, 日志redact
- AiRuntimeModule 注册到 AppModule
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 20:39:29 +08:00
wangdl
6888fe1d12
feat: AI Runtime Prisma Schema (API-AI-004~010 + 070/071/075)
...
Deploy API Server / build-and-deploy (push) Failing after 11s
新增 18 个模型:
- P0: UserLearningProfile, UserAiSettings, UserModelCredential
- P0: AiRuntimeJob, AiRuntimeResult, LearningAnalysisSnapshot
- P0: ModelInvocationLog, UserAiUsageDaily, PlatformAiBudgetDaily
- P0: RuntimeInstance
- P1 预留: AiLearningAnalysis, WeakPointCandidate,
NextActionRecommendation, QuestionGenerationPlan,
FlashcardGenerationPlan, Flashcard, AiArtifactFeedback
User 模型补充新表 relation 字段。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 20:38:00 +08:00
wangdl
e6cbe16a11
feat: AI 数据权限、隐私授权与用户设置设计 (API-AI-003)
...
Deploy API Server / build-and-deploy (push) Successful in 42s
定义 7 项用户授权开关、12 项用户设置字段、4 层硬约束、8 级优先级体系、
设备信息限制规则、Snapshot 过滤伪代码、DeepSeek Prompt 发送规则。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 20:36:40 +08:00
wangdl
045e0b2501
feat: AI Job 状态机与任务调度设计 (API-AI-002)
...
Deploy API Server / build-and-deploy (push) Has been cancelled
定义 5 种 Job 类型、7 种状态、完整状态流转图、数据库字段、防并发锁定
机制、retryable/non-retryable 分类、超时释放、幂等规则、Poll 调度策略。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 20:35:59 +08:00
wangdl
eea9e3e7c6
feat: API-Runtime 内部通信协议与 DTO (API-AI-001)
...
Deploy API Server / build-and-deploy (push) Has been cancelled
定义 9 个 internal/runtime 接口的完整协议:Poll/Lock/Heartbeat/Snapshot/
Credential Resolve/Result/Fail/InvocationLog/Health。新增 RuntimeInternalDto
类型文件,复用 InternalAuthGuard 鉴权,与 Rust 侧可直接对齐。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 20:35:20 +08:00
wangdl
804c414901
feat: AI Runtime 总体架构文档 (API-AI-000)
...
Deploy API Server / build-and-deploy (push) Successful in 42s
定义 API / Rust Heavy Runtime / document runtime / iOS / Admin 职责边界、
Docker 内部网络部署、Job 异步任务流、用户 Key 与平台 Key 管理、失败重试与
熔断、结果落库边界、RAG 共存策略与后续扩展预留。
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 20:33:22 +08:00
wangdl
87cfa2c20d
fix: resolve AdminJwtGuard import error in reading-event module
...
Deploy API Server / build-and-deploy (push) Successful in 44s
- Fix AdminJwtGuard → AdminAuthGuard (guard file was admin-auth.guard.ts)
- Add AdminAuthModule import to provide guard dependencies
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-11 20:27:15 +08:00
wangdl
6eae39a395
fix: register M8 modules in app.module.ts (routes were 404)
...
Deploy API Server / build-and-deploy (push) Failing after 22s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 22:03:42 +08:00
wangdl
8dfda9f10e
fix : #159 getSummary/getTrend optimization + #160 admin auth guard
...
Deploy API Server / build-and-deploy (push) Failing after 23s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 21:50:31 +08:00
wangdl
1442b9b69e
fix: admin controller audit — merge duplicate controllers, add Post import, validate params
...
Deploy API Server / build-and-deploy (push) Successful in 44s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 21:46:37 +08:00
wangdl
4414f9cc55
feat: M-API-ADMIN-INFO admin backend complete (21/21)
...
Deploy API Server / build-and-deploy (push) Failing after 20s
- Admin dashboard + query endpoints (reading-events/sessions/progress/daily-activities/records)
- Diagnostic (user-timeline/diagnose/material-diagnose/anomalies/temporary-materials)
- Operations (recalculate/export)
- Admin API design doc
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-09 21:42:47 +08:00
wangdl
c6f254f864
fix: add completed/interrupted guard in session upsert (out-of-order event defense)
...
Deploy API Server / build-and-deploy (push) Successful in 46s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-08 21:14:58 +08:00
wangdl
22ed18404f
fix: import paths + dead code cleanup + export ProcessResult
...
Deploy API Server / build-and-deploy (push) Successful in 43s
- Fix PrismaService/PrismaModule import paths (infrastructure/database/)
- Remove dead upsertFromReadingEvent wrappers in learning-activity/learning-session services
- Export ProcessResult interface for controller return type
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-08 21:12:36 +08:00
wangdl
1f678409b5
fix: add reverse relations for ReadingEvent/MaterialReadingProgress/TemporaryReadingMaterial on User model
...
Deploy API Server / build-and-deploy (push) Failing after 21s
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-08 21:10:49 +08:00
wangdl
38a8629e42
feat: M8 学习信息收集系统完整实现
...
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 参数
...
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 会话系统完整实现
...
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 检索范围
...
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, 修复对话列表获取失败
...
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
...
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
...
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 编译错误
...
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