Files
Jyotisha/frontend/src/lib/consultation-report-export.ts
T
2026-07-21 16:56:20 +08:00

38 lines
1.4 KiB
TypeScript

import type { ChatMessage } from "./chat-message-view";
export function consultationReportMarkdown(input: {
title: string;
messages: readonly ChatMessage[];
}) {
const latestAssistant = [...input.messages].reverse().find((message) => message.role === "assistant");
const evidence = latestAssistant?.workflowReceipt;
return [
`# ${input.title}`,
"",
"## 最新回答",
latestAssistant?.text || "暂无回答。",
"",
"## Claim boundary",
`technique_truth: ${latestAssistant?.techniqueTruth || "unknown"}`,
evidence ? `workflow_route: ${evidence.route}` : "workflow_route: unknown",
evidence ? `workflow_status: ${evidence.status}` : "workflow_status: unknown",
evidence ? `precise_timing: ${evidence.preciseTiming}` : "precise_timing: unknown",
evidence ? `missing_layers: ${evidence.missingLayers.join(" / ") || "none"}` : "missing_layers: unknown",
"",
"## Boundary",
"本报告保留证据边界;未闭环内容不得包装成确定预测。",
].join("\n");
}
export function downloadMarkdownReport(title: string, markdown: string) {
const blob = new Blob([markdown], { type: "text/markdown;charset=utf-8" });
const url = URL.createObjectURL(blob);
const anchor = document.createElement("a");
anchor.href = url;
anchor.download = `${title.replace(/[\\/:*?"<>|]+/g, "-")}.md`;
document.body.append(anchor);
anchor.click();
anchor.remove();
URL.revokeObjectURL(url);
}