mirror of
https://github.com/QwenLM/qwen-code.git
synced 2026-05-04 06:30:53 +00:00
feat(export): enhance JSONL and Markdown formatters with comprehensive metadata
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
This commit is contained in:
parent
ccecc472dc
commit
186103fe4e
2 changed files with 127 additions and 9 deletions
|
|
@ -12,6 +12,7 @@ import type { ExportSessionData } from '../types.js';
|
||||||
*/
|
*/
|
||||||
export function toJsonl(sessionData: ExportSessionData): string {
|
export function toJsonl(sessionData: ExportSessionData): string {
|
||||||
const lines: string[] = [];
|
const lines: string[] = [];
|
||||||
|
const sourceMetadata = sessionData.metadata;
|
||||||
|
|
||||||
// Add session metadata as the first line
|
// Add session metadata as the first line
|
||||||
const metadata: Record<string, unknown> = {
|
const metadata: Record<string, unknown> = {
|
||||||
|
|
@ -20,9 +21,54 @@ export function toJsonl(sessionData: ExportSessionData): string {
|
||||||
startTime: sessionData.startTime,
|
startTime: sessionData.startTime,
|
||||||
};
|
};
|
||||||
|
|
||||||
// Add requestId if available
|
// Add all metadata fields if available
|
||||||
if (sessionData.metadata?.requestId) {
|
if (sourceMetadata?.exportTime) {
|
||||||
metadata['requestId'] = sessionData.metadata.requestId;
|
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));
|
lines.push(JSON.stringify(metadata));
|
||||||
|
|
|
||||||
|
|
@ -11,20 +11,92 @@ import type { ExportSessionData, ExportMessage } from '../types.js';
|
||||||
*/
|
*/
|
||||||
export function toMarkdown(sessionData: ExportSessionData): string {
|
export function toMarkdown(sessionData: ExportSessionData): string {
|
||||||
const lines: string[] = [];
|
const lines: string[] = [];
|
||||||
|
const metadata = sessionData.metadata;
|
||||||
|
|
||||||
// Add header with metadata
|
// Add header with metadata
|
||||||
lines.push('# Chat Session Export\n');
|
lines.push('# Chat Session Export\n');
|
||||||
lines.push(`- **Session ID**: \`${sanitizeText(sessionData.sessionId)}\``);
|
lines.push(`- **Session ID**: \`${sanitizeText(sessionData.sessionId)}\``);
|
||||||
lines.push(`- **Start Time**: ${sanitizeText(sessionData.startTime)}`);
|
lines.push(`- **Start Time**: ${sanitizeText(sessionData.startTime)}`);
|
||||||
|
|
||||||
// Add requestId if available
|
// Add exportTime if available
|
||||||
if (sessionData.metadata?.requestId) {
|
if (metadata?.exportTime) {
|
||||||
lines.push(
|
lines.push(`- **Exported**: ${sanitizeText(metadata.exportTime)}`);
|
||||||
`- **Request ID**: \`${sanitizeText(sessionData.metadata.requestId)}\``,
|
}
|
||||||
);
|
|
||||||
|
// 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('<details>');
|
||||||
|
lines.push(
|
||||||
|
`<summary><strong>Unique Files Referenced (${metadata.uniqueFiles.length})</strong></summary>`,
|
||||||
|
);
|
||||||
|
lines.push('');
|
||||||
|
for (const file of metadata.uniqueFiles) {
|
||||||
|
lines.push(`- \`${sanitizeText(file)}\``);
|
||||||
|
}
|
||||||
|
lines.push('</details>');
|
||||||
}
|
}
|
||||||
|
|
||||||
lines.push(`- **Exported**: ${new Date().toISOString()}`);
|
|
||||||
lines.push('\n---\n');
|
lines.push('\n---\n');
|
||||||
|
|
||||||
// Process each message
|
// Process each message
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue