@nanocollective/nanocoder
Version:
A local-first CLI coding agent that brings the power of agentic coding tools like Claude Code and Gemini CLI to local models or controlled APIs like OpenRouter
63 lines (61 loc) • 2.1 kB
JavaScript
import { jsx as _jsx } from "react/jsx-runtime";
import fs from 'fs/promises';
import path from 'path';
import React from 'react';
import { SuccessMessage } from '../components/message-box.js';
const formatMessageContent = (message) => {
let content = '';
switch (message.role) {
case 'user':
content += `## User\n${message.content}`;
break;
case 'assistant':
content += `## Assistant\n${message.content || ''}`;
if (message.tool_calls) {
content += `\n\n[tool_use: ${message.tool_calls
.map(tc => tc.function.name)
.join(', ')}]`;
}
break;
case 'tool':
content +=
`## Tool Output: ${message.name}\n` +
'```\n' +
`${message.content}\n` +
'```\n';
break;
case 'system':
// For now, we don't include system messages in the export
return '';
default:
return '';
}
return content + '\n\n';
};
function Export({ filename }) {
return (_jsx(SuccessMessage, { hideBox: true, message: `✔️ Chat exported to ${filename}` }));
}
export const exportCommand = {
name: 'export',
description: 'Export the chat history to a markdown file',
handler: async (args, messages, { provider, model, tokens }) => {
const filename = args[0] ||
`nanocoder-chat-${new Date().toISOString().replace(/:/g, '-')}.md`;
const filepath = path.resolve(process.cwd(), filename); // nosemgrep
const frontmatter = `---
session_date: ${new Date().toISOString()}
provider: ${provider}
model: ${model}
total_tokens: ${tokens}
---
# Nanocoder Chat Export
`;
const markdownContent = messages.map(formatMessageContent).join('');
await fs.writeFile(filepath, frontmatter + markdownContent);
return React.createElement(Export, {
key: `export-${Date.now()}`,
filename,
});
},
};
//# sourceMappingURL=export.js.map