UNPKG

@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

80 lines 2.09 kB
/** * Builder pattern for constructing message arrays. * Provides a fluent interface for adding messages without side effects. * This ensures messages are only added to state once, preventing duplication. */ export class MessageBuilder { messages; constructor(initialMessages) { this.messages = [...initialMessages]; } /** * Add an assistant message (with or without tool_calls). */ addAssistantMessage(msg) { if (msg.role !== 'assistant') { throw new Error('addAssistantMessage requires a message with role "assistant"'); } this.messages.push(msg); return this; } /** * Add tool result messages from tool execution. */ addToolResults(results) { const toolMessages = results.map(result => ({ role: 'tool', content: result.content || '', tool_call_id: result.tool_call_id, name: result.name, })); this.messages.push(...toolMessages); return this; } /** * Add a user message. */ addUserMessage(content) { this.messages.push({ role: 'user', content, }); return this; } /** * Add an error message as a user message (for model self-correction). */ addErrorMessage(errorContent) { this.messages.push({ role: 'user', content: errorContent, }); return this; } /** * Add an arbitrary message (use sparingly, prefer specific methods). */ addMessage(message) { this.messages.push(message); return this; } /** * Build and return the final messages array. */ build() { return this.messages; } /** * Get the current length of the messages array. */ get length() { return this.messages.length; } /** * Check if the builder has any messages. */ get isEmpty() { return this.messages.length === 0; } } //# sourceMappingURL=message-builder.js.map