mirror of
https://github.com/samiyev/puaros.git
synced 2025-12-28 07:16:53 +05:00
- Project setup with tsup, vitest, ESM support - Domain entities: Session, Project - Value objects: FileData, FileAST, FileMeta, ChatMessage, ToolCall, ToolResult, UndoEntry - Service interfaces: IStorage, ILLMClient, ITool, IIndexer, IToolRegistry - Shared: Config (zod), IpuaroError, utils (hash, tokens), Result type - CLI with placeholder commands (start, init, index) - 91 unit tests with 100% coverage - Fix package scope @puaros -> @samiyev in CLAUDE.md
80 lines
1.9 KiB
TypeScript
80 lines
1.9 KiB
TypeScript
import type { ToolCall } from "./ToolCall.js"
|
|
import type { ToolResult } from "./ToolResult.js"
|
|
|
|
/**
|
|
* Represents a message in the chat history.
|
|
*/
|
|
|
|
export type MessageRole = "user" | "assistant" | "tool" | "system"
|
|
|
|
export interface MessageStats {
|
|
/** Token count for this message */
|
|
tokens: number
|
|
/** Response generation time in ms (for assistant messages) */
|
|
timeMs: number
|
|
/** Number of tool calls in this message */
|
|
toolCalls: number
|
|
}
|
|
|
|
export interface ChatMessage {
|
|
/** Message role */
|
|
role: MessageRole
|
|
/** Message content */
|
|
content: string
|
|
/** Timestamp when message was created */
|
|
timestamp: number
|
|
/** Tool calls made by assistant (if any) */
|
|
toolCalls?: ToolCall[]
|
|
/** Tool results (for tool role messages) */
|
|
toolResults?: ToolResult[]
|
|
/** Message statistics */
|
|
stats?: MessageStats
|
|
}
|
|
|
|
export function createUserMessage(content: string): ChatMessage {
|
|
return {
|
|
role: "user",
|
|
content,
|
|
timestamp: Date.now(),
|
|
}
|
|
}
|
|
|
|
export function createAssistantMessage(
|
|
content: string,
|
|
toolCalls?: ToolCall[],
|
|
stats?: MessageStats,
|
|
): ChatMessage {
|
|
return {
|
|
role: "assistant",
|
|
content,
|
|
timestamp: Date.now(),
|
|
toolCalls,
|
|
stats,
|
|
}
|
|
}
|
|
|
|
export function createToolMessage(results: ToolResult[]): ChatMessage {
|
|
return {
|
|
role: "tool",
|
|
content: results.map((r) => formatToolResult(r)).join("\n\n"),
|
|
timestamp: Date.now(),
|
|
toolResults: results,
|
|
}
|
|
}
|
|
|
|
export function createSystemMessage(content: string): ChatMessage {
|
|
return {
|
|
role: "system",
|
|
content,
|
|
timestamp: Date.now(),
|
|
}
|
|
}
|
|
|
|
function formatToolResult(result: ToolResult): string {
|
|
if (result.success) {
|
|
return `[${result.callId}] Success: ${JSON.stringify(result.data)}`
|
|
}
|
|
const errorMsg = result.error ?? "Unknown error"
|
|
return `[${result.callId}] Error: ${errorMsg}`
|
|
}
|