diff --git a/packages/cli/src/ui/utils/export/formatters/jsonl.ts b/packages/cli/src/ui/utils/export/formatters/jsonl.ts index 10854ba90..9b84b2d6f 100644 --- a/packages/cli/src/ui/utils/export/formatters/jsonl.ts +++ b/packages/cli/src/ui/utils/export/formatters/jsonl.ts @@ -12,6 +12,7 @@ import type { ExportSessionData } from '../types.js'; */ export function toJsonl(sessionData: ExportSessionData): string { const lines: string[] = []; + const sourceMetadata = sessionData.metadata; // Add session metadata as the first line const metadata: Record = { @@ -20,9 +21,54 @@ export function toJsonl(sessionData: ExportSessionData): string { startTime: sessionData.startTime, }; - // Add requestId if available - if (sessionData.metadata?.requestId) { - metadata['requestId'] = sessionData.metadata.requestId; + // Add all metadata fields if available + if (sourceMetadata?.exportTime) { + metadata['exportTime'] = sourceMetadata.exportTime; + } + if (sourceMetadata?.cwd) { + metadata['cwd'] = sourceMetadata.cwd; + } + if (sourceMetadata?.gitRepo) { + metadata['gitRepo'] = sourceMetadata.gitRepo; + } + if (sourceMetadata?.gitBranch) { + metadata['gitBranch'] = sourceMetadata.gitBranch; + } + if (sourceMetadata?.model) { + metadata['model'] = sourceMetadata.model; + } + if (sourceMetadata?.channel) { + metadata['channel'] = sourceMetadata.channel; + } + if (sourceMetadata?.promptCount !== undefined) { + metadata['promptCount'] = sourceMetadata.promptCount; + } + if (sourceMetadata?.contextUsagePercent !== undefined) { + metadata['contextUsagePercent'] = sourceMetadata.contextUsagePercent; + } + if (sourceMetadata?.contextWindowSize !== undefined) { + metadata['contextWindowSize'] = sourceMetadata.contextWindowSize; + } + if (sourceMetadata?.totalTokens !== undefined) { + metadata['totalTokens'] = sourceMetadata.totalTokens; + } + if (sourceMetadata?.filesRead !== undefined) { + metadata['filesRead'] = sourceMetadata.filesRead; + } + if (sourceMetadata?.filesWritten !== undefined) { + metadata['filesWritten'] = sourceMetadata.filesWritten; + } + if (sourceMetadata?.linesAdded !== undefined) { + metadata['linesAdded'] = sourceMetadata.linesAdded; + } + if (sourceMetadata?.linesRemoved !== undefined) { + metadata['linesRemoved'] = sourceMetadata.linesRemoved; + } + if (sourceMetadata?.uniqueFiles && sourceMetadata.uniqueFiles.length > 0) { + metadata['uniqueFiles'] = sourceMetadata.uniqueFiles; + } + if (sourceMetadata?.requestId) { + metadata['requestId'] = sourceMetadata.requestId; } lines.push(JSON.stringify(metadata)); diff --git a/packages/cli/src/ui/utils/export/formatters/markdown.ts b/packages/cli/src/ui/utils/export/formatters/markdown.ts index 2a79be8ff..00250dd16 100644 --- a/packages/cli/src/ui/utils/export/formatters/markdown.ts +++ b/packages/cli/src/ui/utils/export/formatters/markdown.ts @@ -11,20 +11,92 @@ import type { ExportSessionData, ExportMessage } from '../types.js'; */ export function toMarkdown(sessionData: ExportSessionData): string { const lines: string[] = []; + const metadata = sessionData.metadata; // Add header with metadata lines.push('# Chat Session Export\n'); lines.push(`- **Session ID**: \`${sanitizeText(sessionData.sessionId)}\``); lines.push(`- **Start Time**: ${sanitizeText(sessionData.startTime)}`); - // Add requestId if available - if (sessionData.metadata?.requestId) { - lines.push( - `- **Request ID**: \`${sanitizeText(sessionData.metadata.requestId)}\``, - ); + // Add exportTime if available + if (metadata?.exportTime) { + lines.push(`- **Exported**: ${sanitizeText(metadata.exportTime)}`); + } + + // Add requestId if available + if (metadata?.requestId) { + lines.push(`- **Request ID**: \`${sanitizeText(metadata.requestId)}\``); + } + + lines.push(''); + + // Add context info + if (metadata?.cwd) { + lines.push(`- **Working Directory**: \`${sanitizeText(metadata.cwd)}\``); + } + if (metadata?.gitRepo) { + lines.push(`- **Git Repository**: ${sanitizeText(metadata.gitRepo)}`); + } + if (metadata?.gitBranch) { + lines.push(`- **Git Branch**: \`${sanitizeText(metadata.gitBranch)}\``); + } + + lines.push(''); + + // Add model info + if (metadata?.model) { + lines.push(`- **Model**: ${sanitizeText(metadata.model)}`); + } + if (metadata?.channel) { + lines.push(`- **Channel**: ${sanitizeText(metadata.channel)}`); + } + if (metadata?.promptCount !== undefined) { + lines.push(`- **Prompt Count**: ${metadata.promptCount}`); + } + + lines.push(''); + + // Add token stats + if (metadata?.totalTokens !== undefined) { + lines.push(`- **Total Tokens**: ${metadata.totalTokens}`); + } + if (metadata?.contextWindowSize !== undefined) { + lines.push(`- **Context Window Size**: ${metadata.contextWindowSize}`); + } + if (metadata?.contextUsagePercent !== undefined) { + lines.push(`- **Context Usage**: ${metadata.contextUsagePercent}%`); + } + + lines.push(''); + + // Add file operation stats + if (metadata?.filesRead !== undefined) { + lines.push(`- **Files Read**: ${metadata.filesRead}`); + } + if (metadata?.filesWritten !== undefined) { + lines.push(`- **Files Written**: ${metadata.filesWritten}`); + } + if (metadata?.linesAdded !== undefined) { + lines.push(`- **Lines Added**: ${metadata.linesAdded}`); + } + if (metadata?.linesRemoved !== undefined) { + lines.push(`- **Lines Removed**: ${metadata.linesRemoved}`); + } + + // Add unique files list if available + if (metadata?.uniqueFiles && metadata.uniqueFiles.length > 0) { + lines.push(''); + lines.push('
'); + lines.push( + `Unique Files Referenced (${metadata.uniqueFiles.length})`, + ); + lines.push(''); + for (const file of metadata.uniqueFiles) { + lines.push(`- \`${sanitizeText(file)}\``); + } + lines.push('
'); } - lines.push(`- **Exported**: ${new Date().toISOString()}`); lines.push('\n---\n'); // Process each message