* fix/ 0:00 audio ui * fix/ persist memoir image state and collapse voice history Keep generated chapter images from staying in processing after successful uploads, and restore segmented voice recordings as a single audio message when reopening conversations. Made-with: Cursor * fix/ persist local conversation state and stabilize voice UI Keep CreateMemory conversations driven by Room so recent text and audio survive page exits, and prevent stale 0:00 voice bubbles while list ordering follows the latest local message time. Made-with: Cursor * fix/ server-side root cause for conversation list time and message timestamps - Add Conversation.last_message_at column with migration and index - Update last_message_at on text message, audio segment, and AI response - Sort conversation list by COALESCE(last_message_at, started_at) DESC - Return real per-message timestamps from Redis history instead of now() - Pass user_message_timestamp through agent pipeline to avoid LLM delay skew - Remove all debug logging from server, client, and CI workflow - Restore import json in conversation_agent (was broken by debug removal) - Client: remove DebugRuntimeLogger, stop sending transcript as text message Made-with: Cursor --------- Co-authored-by: Kevin <kevin@brighteng.org>
数据库迁移
说明
sync_schema_to_models.sql:与当前api/database/models.py保持一致的幂等迁移脚本,部署工作流会在每次部署后自动执行。可重复执行,已存在的表/列会跳过。- 其余
add_*.sql为历史增量迁移,可按需单独执行;若已运行过sync_schema_to_models.sql,通常不必再跑。
手动执行
# 从项目根目录
psql -U <user> -d <database> -f api/migrations/sync_schema_to_models.sql
若使用与 docker-compose 默认不同的数据库用户/库名,可在 GitHub 仓库中配置 Secrets:MIGRATION_DB_USER、MIGRATION_DB_NAME,工作流将用其执行迁移。