Agent-JAE/packages/web-ui/example/src/components/session-export.ts

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);
}