45 lines
1.5 KiB
TypeScript
45 lines
1.5 KiB
TypeScript
|
|
import type { AgentMessage } from "@jaeswift/jae-agent-core";
|
|
|
|
export function exportSessionAsMarkdown(messages: AgentMessage[], title: string): void {
|
|
const lines: string[] = [
|
|
`# ${title || "JAE Session Export"}`,
|
|
``,
|
|
`*Exported: ${new Date().toLocaleString()}*`,
|
|
``,
|
|
`---`,
|
|
``,
|
|
];
|
|
|
|
for (const msg of messages) {
|
|
if (msg.role === "user") {
|
|
const content = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
|
|
lines.push(`## 👤 User`, ``, content, ``, `---`, ``);
|
|
} else if (msg.role === "assistant") {
|
|
const m = msg as any;
|
|
const textBlocks = Array.isArray(m.content)
|
|
? m.content.filter((b: any) => b.type === "text").map((b: any) => b.text).join("\n")
|
|
: m.content || "";
|
|
lines.push(`## 🤖 Assistant`, ``, textBlocks, ``, `---`, ``);
|
|
}
|
|
}
|
|
|
|
const blob = new Blob([lines.join("\n")], { type: "text/markdown" });
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement("a");
|
|
a.href = url;
|
|
a.download = `jae-session-${Date.now()}.md`;
|
|
a.click();
|
|
URL.revokeObjectURL(url);
|
|
}
|
|
|
|
export function exportSessionAsJson(messages: AgentMessage[], title: string): void {
|
|
const data = { title, exportedAt: new Date().toISOString(), messages };
|
|
const blob = new Blob([JSON.stringify(data, null, 2)], { type: "application/json" });
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement("a");
|
|
a.href = url;
|
|
a.download = `jae-session-${Date.now()}.json`;
|
|
a.click();
|
|
URL.revokeObjectURL(url);
|
|
}
|