Commit Graph

448 Commits

Author SHA1 Message Date
Kevin
7317bf10cd fix/various fixes 2026-03-20 15:15:35 +08:00
Kevin
7f57f96c25 重构回忆录为 story-first / markdown-first 架构并整合图片意图与前端 UI 修复
本次 squash merge 将 codex-story-first-image-intent 的整体改动合入 development,核心内容包括:

1. 后端数据与迁移:新增 stories、story_versions、story_image_intents、chapter_cover_intents、assets 等模型与 Alembic 迁移,建立 story-first、markdown-first、asset-first 的主数据链路。

2. 生成与任务链:引入 StoryBuilderOrchestrator、ChapterComposerOrchestrator、story_image_tasks、chapter_cover_tasks,图片生成从正文占位符改为结构化 intent -> asset -> markdown 回填。

3. 并发与一致性:为 story/chapter intent 增加 claim_token、claimed_at、attempt_count,采用数据库原子 claim 为主、Redis 锁为辅,避免重复生成、锁误删和 processing 卡死。

4. Memoir 读写路径:章节 canonical_markdown 成为正文真源,列表/详情接口补齐 markdown、cover_asset、word_count 等字段,PDF 与 asset 解析链路同步升级。

5. Memory / Retrieval:扩展 transcript ingest、chunking、evidence 检索与 story 聚合基础设施,为后续 story-first RAG 与多 agent 编排提供底座。

6. App 端体验:章节页继续走 MarkdownRenderer 阅读链,同时吸收 fix3-19 的跨平台 UI glitch 修复;更新对话页、首页、文案资源与章节列表映射逻辑。

7. 测试与文档:补充 asset resolver、story image task、章节封面派发、markdown 映射等回归测试,并加入图片占位符退役设计文档。
2026-03-20 10:31:51 +08:00
Kevin
13e3124b85 docs: add story-first markdown-first design 2026-03-19 16:01:49 +08:00
Kevin
c6e07ce5ca chore/ 删除无用文件 2026-03-19 14:36:40 +08:00
Kevin
2f60858c9c Merge feat/multi-agent into development
- Resolved conflict in api/app/agents/memoir/prompts.py: kept archived_section for get_narrative_prompt compatibility
- Resolved conflict in api/app/tasks/memoir_tasks.py: use MemoirOrchestrator flow (feat/multi-agent)
- Multi-agent architecture: ChatOrchestrator, MemoirOrchestrator, ImagePromptOrchestrator
2026-03-19 14:23:27 +08:00
Kevin
7237b53b9b feat/调整tts音色,调整封面图prompt,修复对话页输入框显示逻辑,待验证封面图生成功能 2026-03-19 14:14:52 +08:00
yangshilin
8dc47d200b fix: 修复回忆录celery异常 2026-03-19 14:02:21 +08:00
yangshilin
4c75c6f4f4 feat: 引入deepseek结构化输出 2026-03-19 11:27:43 +08:00
yangshilin
f3629efec3 fix: 去除LLM直接生成图片占位符逻辑 2026-03-19 11:18:58 +08:00
Kevin
687f41df2e chore(ui): 精简对话与回忆录页,移除冗余元素
- 移除对话/回忆录页顶部标题(与底部 Tab 重复)
- 移除回忆录卡片右上角状态图标
2026-03-19 11:03:30 +08:00
yangshilin
67fb5d2cb6 refactor: 进一步重构agents目录结构 符合多agent架构 2026-03-19 10:54:48 +08:00
Kevin
9a1d31c71f feat: 章节软删除、对话左滑删除,移除已读状态
- 章节:详情页增加删除按钮,软删除(is_active=False),AI 不再修改但保留供参考
- 章节:get_chapter 增加 is_active 校验,已删除章节返回 404
- 章节:AI 生成时参考同类别已删除章节摘要
- 对话:左滑显示删除,调用 hard delete API,删除前二次确认
- 对话:根布局包裹 GestureHandlerRootView 以支持 Swipeable
- 对话:移除已读/未读状态展示及相关 i18n
2026-03-19 10:45:07 +08:00
yangshilin
c21cda3e78 feat: 生成图片提示词agent结构封装 2026-03-19 10:43:34 +08:00
yangshilin
4a1d6f0dcc feat: 生成回忆录agent结构封装 2026-03-19 10:38:11 +08:00
yangshilin
b16bb2b96c feat & refactor: 重构agents目录结构;AI回复模块agent结构封装 2026-03-19 10:36:55 +08:00
Kevin
1aa3d8593c Merge origin/development: 整合 TTS(远端结构为主)+ memoir-cover,保留本地环境配置
Made-with: Cursor
2026-03-19 10:30:54 +08:00
yangshilin
b56fc859cc docs: 多agent架构plan计划 2026-03-19 10:28:40 +08:00
Kevin
bcee000735 fix(conversation): 优化对话列表滚动与播放队列并发
- 使用 InteractionManager.runAfterInteractions 包裹 scrollToEnd,避免滚动卡顿
- 提取 flattenedData 变量,减少重复计算
- 输入框增加 minHeight:22,空内容时保持一行高度
- use-player: 用 isPlayNextInProgressRef 防止 playNext 并发执行
- hooks: 格式化 useEffect 依赖数组
2026-03-19 10:24:48 +08:00
Kevin
15512834d2 feat/ 添加app-expo三种环境切换,待测试 调整tts 2026-03-19 09:58:02 +08:00
Sully
b73370a9b5 feat/ memoir-cover (#16)
Co-authored-by: Kevin <kevin@brighteng.org>
2026-03-19 09:11:54 +08:00
Sully
92b7848c48 feat/tts (#15)
Co-authored-by: Kevin <kevin@brighteng.org>
2026-03-19 09:11:25 +08:00
Kevin
faf7607bf9 fix/ 补充打个招呼网络错误状态 2026-03-19 01:20:35 +08:00
Kevin
1d0f295169 fix/ 补充memoir页面的i18n 2026-03-19 01:17:28 +08:00
Kevin
b4f4369b7d Squash merge feat/expo-app: app-expo, .cursor, workflows, package.json, .husky; remove app-android, app-ios, react-app 2026-03-19 01:13:38 +08:00
Kevin
9e4f301ab9 chore/ update .gitginore to exclude root node modules and app-expo 2026-03-18 21:51:39 +08:00
yangshilin
48b70e1350 Merge branch 'refactor/backend-architecture' into development 2026-03-18 17:18:23 +08:00
yangshilin
2070a03d35 fix: 用户开始录音5s后ai反馈“我在认真听” 2026-03-16 11:24:40 +08:00
yangshilin
981920784f fix: 修复ai长回复的拆分和回显问题 2026-03-16 10:29:11 +08:00
yangshilin
a088f4bf50 fix: 解决消息重复问题 2026-03-16 10:10:51 +08:00
Kevin
6733abe14f fix/ add app-expo folder to gitignore 2026-03-16 09:10:16 +08:00
Sully
c2ce4c61f1 修复版本1.0.7的若干问题 (#11)
* 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>
2026-03-14 23:58:46 +08:00
Sully
9636c059d0 更新docker构建cd (#10)
* update github actions

* update github actions

* update github actions

* update github actions

* update github actions

* update github actions

* update github actions

---------

Co-authored-by: Kevin <kevin@brighteng.org>
2026-03-13 23:41:56 +08:00
Kevin
55b342b623 update github actions 2026-03-13 22:16:59 +08:00
Kevin
862f8c43d1 fix/ android-release-build workflow 2026-03-13 17:21:42 +08:00
yangshilin
8e9edca4e7 fix: 修复apk打包时的错误 2026-03-13 17:20:33 +08:00
yangshilin
a2b2b6eb76 fix: 语音消息暂存本地 修复显示异常 2026-03-13 17:11:59 +08:00
yangshilin
c0906723ac fix: 减少图片生成数量(当前3个section对应一张图) 2026-03-13 16:24:28 +08:00
yangshilin
672abf5ec7 fix: 图片生成失败后重试 前端一直显示生成中 2026-03-13 16:23:51 +08:00
yangshilin
e751114354 fix: 更换app图标 2026-03-13 15:55:50 +08:00
yangshilin
043a89add6 docs: 更新数据迁移指南 2026-03-13 15:15:40 +08:00
yangshilin
ab4fb46c0d fix: 修复打个招呼的bug 2026-03-13 14:50:04 +08:00
Sully
2eb066dbec 把“章节正文 + 图片”从 chapters 单表/JSON 结构,重构为“章节 chapter + 段落 section + 图片 memoir_images 独立表”的新数据模型,同时联动修改接口、PDF 导出、异步任务、迁移脚本、测试,以及修复 Android 端聊天列表显示问题。 (#9)
* refactor: 表结构重构,新增段落section和图片image新表

* fix: fix android app import error

* refactor: 重构文件名

* fix: 优化提示词

* fix: 消息气泡显示位置异常问题

---------

Co-authored-by: yangshilin <2157598560@qq.com>
2026-03-13 11:12:10 +08:00
Kevin
1cb804fa37 fix: 1.修复图片闪烁 2.增大图片轮询间隔 2026-03-13 10:53:42 +08:00
Kevin
48594a20ea fix: fix import path 2026-03-13 09:59:04 +08:00
Kevin
16ae355510 docs: 添加重构相关文档。添加cursor rules 2026-03-13 09:54:47 +08:00
Sully
e0f546dff0 Merge pull request #8 from penghanyuan/fixUi2026-03-11
Fix ui2026 03 11
2026-03-12 16:09:41 +08:00
Sully
e2d7f7e28c Merge branch 'development' into fixUi2026-03-11 2026-03-12 16:07:49 +08:00
Sully
ef2087e86d Merge pull request #7 from penghanyuan/refactor/recording
Refactor/recording
2026-03-12 16:00:32 +08:00
Kevin
f15046c1c1 feat: 客户端语音回放 长录音客户端切片,并行转录 2026-03-12 15:57:45 +08:00
Kevin
ec7107cbf0 修复: 处理审查反馈,修复线程安全问题、清理架构并集成 RecordingCoordinator
阻塞问题:
- 修复 uploadAvatar multipart body 为空(AuthService)
- 修复 VoiceRecorder 协程作用域泄漏(release 时调用 cancel)
- 修复 AudioSegmenter/VoiceRecorder 中 MediaMetadataRetriever 泄漏(try-finally)

线程安全:
- WebSocketClient 所有可变状态添加 @Volatile + synchronized(stateLock)
- close() 后 connect() 自动重建协程作用域
- reconnectWithBackoff 从递归改为 while 循环

架构清理:
- DTO 从 network.models 迁移到 model 包,Port 不再依赖 network 命名空间
- ApiService 移除可空回退路径,统一走 RestClientProvider
- AppContainer.apiService 改为 private
- PaymentApiPort 拆分出 TestPaymentApiPort
- 提取 TaskApiPort,ConversationApiPort 继承它,MemoirApiPort 移除重复方法
- TokenManager: mutableStateOf -> MutableStateFlow,runBlocking 增加 Dispatchers.IO
- RestClientProvider.invalidate() 合并 synchronized 块
- 修复 Adapter 文件的 KDoc/import 顺序
- ConversationRealtimeAdapter 用 import 替代全限定类名

视图模型相关:
- CreateMemoryViewModel 集成 RecordingCoordinator(替代直接使用 VoiceRecorder)
- 提取 ensureConnected(),用基于状态的等待替代硬编码 delay()
- handleConversationEnded 轮询 Job 去重
- 移除三处硬编码的 delay(300)/delay(500) 等待

测试:
- 修复 ApiServiceProviderTest 构造函数适配
- 解除 RecordingCoordinator 集成测试的 @Ignore(保留 4 个待处理分段测试)
- 更新 WarmupTest/MyMemoirViewModelTest 以适配新构造函数
- 补充 AudioSegmenter 和 WebSocketClient 测试
2026-03-12 15:36:32 +08:00