修复:CI 部署环境与 ref 错配、迁移碎片化、图片意图 source_span、章节物化脏版式、会话历史与本地语音不一致

新增:TTS 上传 COS 与分片、章节 reading_segments 物化与快照、markdown 清洗、会话消息 repository、语音 store 重构与相关测试
This commit is contained in:
Kevin
2026-03-20 16:36:42 +08:00
parent 7317bf10cd
commit 8af37e5e8e
65 changed files with 1704 additions and 504 deletions

View File

@@ -26,10 +26,23 @@ from app.features.memoir.asset_resolver import (
split_markdown_by_asset_refs,
strip_legacy_image_placeholders,
)
from app.features.memoir.chapter_markdown_compose import (
materialize_chapter_pdf_markdown_from_loaded_chapter,
)
from app.features.memoir.helpers import (
_chapter_markdown,
sections_to_content_and_images,
)
def _chapter_markdown_for_pdf(chapter) -> str:
"""有 story 编排时 PDF 使用「## 故事名 + 正文」物化;否则沿用章节 canonical。"""
links = getattr(chapter, "story_links", None) or []
if links and any(getattr(l, "story", None) for l in links):
return materialize_chapter_pdf_markdown_from_loaded_chapter(chapter)
return _chapter_markdown(chapter)
from app.features.memoir.memoir_images.parser import PLACEHOLDER_RE
from app.features.memoir.memoir_images.schema import (
IMAGE_STATUS_COMPLETED,
@@ -165,8 +178,8 @@ class PDFService:
for chapter in chapters:
story.append(Paragraph(chapter.title, heading_style))
story.append(Spacer(1, 0.2 * inch))
# 正文真源canonical_markdown与 API / 前端一致
markdown = _chapter_markdown(chapter)
# 有 story_links 时按章节内故事注入 ## 标题(与物化章节正文不含故事标题区分
markdown = _chapter_markdown_for_pdf(chapter)
_, images_list = sections_to_content_and_images(chapter)
if not markdown:
markdown = getattr(chapter, "content", "") or ""