1dd6b0cce3
把"渲染"从生成阶段解耦到导出阶段(导出时再处理): - 生成阶段:报告正文按 Markdown 流式预览(前端 <Markdown> 已渲染), dispatcher 不再 eager 渲染 docx,改为经 mcp-go report_store 落盘报告源(title+sections JSON)。 - 导出阶段(按需现渲染): - GET /reports/:id/export?format=docx → mcp-go report_export 读源渲染 .docx; - ?format=md → 返回 Markdown 文本; - PDF → 前端把已渲染的 Markdown 送进打印视图出 PDF(CJK 零字体依赖)。 - 旧 /reports/:id/download 兼容保留(默认 docx)。 改动: - contract: ReportSourcePath(id) = <id>.json。 - mcp-go: 新增 report_store / report_export 工具(report_render 保留给 Studio render 节点)。 - dispatcher: handleReport 末尾 renderReport → storeReport。 - gateway: DownloadReport → ExportReport(经 NATS 调 report_export)。 - 前端: ReportView 单个「Word」→「导出」组 Word/PDF/Markdown; desktop.printReportHtml 客户端打印;api.reportExportUrl。 实测(docker 全栈 + mcp-go + gateway + dispatcher + DeepSeek 真跑): - 真实生成「绿茶的功效」18s 完成,report_store 落源(5章, 6280B) ✓ - export md 返回正确 Markdown(# 标题/## 小节/正文) ✓ - export docx 为合法「Microsoft Word 2007+」(含 document.xml/Content_Types) ✓ - 前端 tsc 干净 + 生产构建通过 ✓ (注:发现并修复一处环境问题——mcp-go 启动时若 Milvus 未起会阻塞在 rag 初始化、永不订阅工具,导致所有 mcp-go 工具"no responders";起全栈后正常。 报告生成在累积大量未完成 DeepSeek 流连接时会偶发卡顿,干净进程下正常。 前端导出按钮的实时点击因 React 受控输入自动化限制未在预览中走通,非代码缺陷。) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
28 lines
911 B
Go
28 lines
911 B
Go
package contract
|
||
|
||
import (
|
||
"os"
|
||
"path/filepath"
|
||
)
|
||
|
||
// ReportsDir 是报告渲染产物(.docx)的落盘目录。
|
||
// Gateway(下载)与 mcp-go(渲染)跨进程共享同一目录:用环境变量统一,
|
||
// 缺省取系统临时目录下的 sundynix-reports —— 单机开发零配置即可对齐。
|
||
func ReportsDir() string {
|
||
if d := os.Getenv("SUNDYNIX_REPORTS_DIR"); d != "" {
|
||
return d
|
||
}
|
||
return filepath.Join(os.TempDir(), "sundynix-reports")
|
||
}
|
||
|
||
// ReportPath 返回某任务渲染出的 Word 文档绝对路径。
|
||
func ReportPath(id string) string {
|
||
return filepath.Join(ReportsDir(), id+".docx")
|
||
}
|
||
|
||
// ReportSourcePath 返回某报告的源数据(标题 + 章节 JSON)绝对路径。
|
||
// 生成阶段只落源数据;导出时再按需渲染 Word/PDF/Markdown("导出时再处理")。
|
||
func ReportSourcePath(id string) string {
|
||
return filepath.Join(ReportsDir(), id+".json")
|
||
}
|