@riotprompt/riotprompt 0.0.9 → 0.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (49) hide show
  1. package/BUG-ANALYSIS.md +523 -0
  2. package/CODE-REVIEW-SUMMARY.md +330 -0
  3. package/FIXES-APPLIED.md +437 -0
  4. package/dist/chat.d.ts +1 -1
  5. package/dist/chat.js +2 -5
  6. package/dist/chat.js.map +1 -1
  7. package/dist/constants.js +1 -2
  8. package/dist/constants.js.map +1 -1
  9. package/dist/context-manager.d.ts +3 -2
  10. package/dist/context-manager.js +29 -6
  11. package/dist/context-manager.js.map +1 -1
  12. package/dist/conversation-logger.d.ts +3 -1
  13. package/dist/conversation-logger.js +41 -4
  14. package/dist/conversation-logger.js.map +1 -1
  15. package/dist/conversation.d.ts +8 -2
  16. package/dist/conversation.js +36 -9
  17. package/dist/conversation.js.map +1 -1
  18. package/dist/items/section.js +3 -3
  19. package/dist/items/section.js.map +1 -1
  20. package/dist/iteration-strategy.d.ts +2 -0
  21. package/dist/iteration-strategy.js +40 -6
  22. package/dist/iteration-strategy.js.map +1 -1
  23. package/dist/loader.js +18 -3
  24. package/dist/loader.js.map +1 -1
  25. package/dist/message-builder.js +4 -2
  26. package/dist/message-builder.js.map +1 -1
  27. package/dist/model-config.d.ts +115 -0
  28. package/dist/model-config.js +205 -0
  29. package/dist/model-config.js.map +1 -0
  30. package/dist/override.js +5 -1
  31. package/dist/override.js.map +1 -1
  32. package/dist/parser.js +3 -3
  33. package/dist/parser.js.map +1 -1
  34. package/dist/recipes.d.ts +1 -1
  35. package/dist/recipes.js +4 -4
  36. package/dist/recipes.js.map +1 -1
  37. package/dist/reflection.js +5 -2
  38. package/dist/reflection.js.map +1 -1
  39. package/dist/riotprompt.cjs +439 -94
  40. package/dist/riotprompt.cjs.map +1 -1
  41. package/dist/riotprompt.d.ts +2 -0
  42. package/dist/riotprompt.js +1 -0
  43. package/dist/riotprompt.js.map +1 -1
  44. package/dist/token-budget.d.ts +2 -2
  45. package/dist/token-budget.js +23 -26
  46. package/dist/token-budget.js.map +1 -1
  47. package/dist/util/general.js +1 -1
  48. package/dist/util/general.js.map +1 -1
  49. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"conversation.js","sources":["../src/conversation.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { Model } from \"./chat\";\nimport { ContextManager, type DynamicContentItem } from \"./context-manager\";\nimport { ConversationLogger, type LogConfig } from \"./conversation-logger\";\nimport { Content } from \"./items/content\";\nimport { Context } from \"./items/context\";\nimport { Instruction } from \"./items/instruction\";\nimport { Section } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { MessageBuilder } from \"./message-builder\";\nimport { Prompt } from \"./prompt\";\nimport * as Formatter from \"./formatter\";\nimport { TokenBudgetManager, type TokenBudgetConfig, type TokenUsage, type CompressionStrategy } from \"./token-budget\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Options for injecting context\n */\nexport interface InjectOptions {\n // Where to inject\n position?: 'end' | 'before-last' | 'after-system' | number;\n\n // How to format\n format?: 'structured' | 'inline' | 'reference';\n\n // Deduplication\n deduplicate?: boolean;\n deduplicateBy?: 'id' | 'content' | 'hash';\n\n // Priority\n priority?: 'high' | 'medium' | 'low';\n weight?: number;\n\n // Metadata\n category?: string;\n source?: string;\n}\n\n/**\n * Represents a tool call made by the assistant\n */\nexport interface ToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\n/**\n * Message in a conversation (compatible with OpenAI ChatCompletionMessageParam)\n */\nexport interface ConversationMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string | null;\n name?: string;\n tool_calls?: ToolCall[];\n tool_call_id?: string;\n}\n\n/**\n * Configuration for ConversationBuilder\n */\nexport interface ConversationBuilderConfig {\n model: Model;\n formatter?: Formatter.Instance;\n trackContext?: boolean;\n deduplicateContext?: boolean;\n}\n\n/**\n * Metadata about the conversation\n */\nexport interface ConversationMetadata {\n model: Model;\n created: Date;\n lastModified: Date;\n messageCount: number;\n toolCallCount: number;\n}\n\n/**\n * Internal state of a conversation\n */\nexport interface ConversationState {\n messages: ConversationMessage[];\n metadata: ConversationMetadata;\n contextProvided: Set<string>;\n contextManager: ContextManager;\n}\n\n/**\n * Serializable conversation state for persistence\n */\nexport interface SerializedConversation {\n messages: ConversationMessage[];\n metadata: Omit<ConversationMetadata, 'created' | 'lastModified'> & {\n created: string;\n lastModified: string;\n };\n contextProvided: string[];\n}\n\n// ===== SCHEMAS =====\n\nconst ConversationBuilderConfigSchema = z.object({\n model: z.string(),\n formatter: z.any().optional(),\n trackContext: z.boolean().optional().default(true),\n deduplicateContext: z.boolean().optional().default(true),\n});\n\n// ===== CONVERSATION BUILDER =====\n\n/**\n * ConversationBuilder manages multi-turn conversations with full lifecycle support.\n *\n * Features:\n * - Initialize from RiotPrompt prompts\n * - Add messages of any type (system, user, assistant, tool)\n * - Handle tool calls and results\n * - Inject dynamic context\n * - Clone for parallel exploration\n * - Serialize/deserialize for persistence\n *\n * @example\n * ```typescript\n * // Create from prompt\n * const conversation = ConversationBuilder.create()\n * .fromPrompt(prompt, 'gpt-4o')\n * .build();\n *\n * // Add messages\n * conversation.addUserMessage('Analyze this code');\n *\n * // Handle tool calls\n * conversation.addAssistantWithToolCalls(null, toolCalls);\n * conversation.addToolResult(toolCallId, result);\n *\n * // Export\n * const messages = conversation.toMessages();\n * ```\n */\nexport class ConversationBuilder {\n private state: ConversationState;\n private config: ConversationBuilderConfig;\n private logger: any;\n private budgetManager?: TokenBudgetManager;\n private conversationLogger?: ConversationLogger;\n\n private constructor(config: ConversationBuilderConfig, logger?: any) {\n this.config = ConversationBuilderConfigSchema.parse(config) as ConversationBuilderConfig;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ConversationBuilder');\n\n this.state = {\n messages: [],\n metadata: {\n model: this.config.model,\n created: new Date(),\n lastModified: new Date(),\n messageCount: 0,\n toolCallCount: 0,\n },\n contextProvided: new Set<string>(),\n contextManager: new ContextManager(logger),\n };\n\n this.logger.debug('Created ConversationBuilder', { model: this.config.model });\n }\n\n /**\n * Create a new ConversationBuilder instance\n */\n static create(config?: Partial<ConversationBuilderConfig>, logger?: any): ConversationBuilder {\n const defaultConfig: ConversationBuilderConfig = {\n model: 'gpt-4o',\n trackContext: true,\n deduplicateContext: true,\n ...config,\n };\n\n return new ConversationBuilder(defaultConfig, logger);\n }\n\n /**\n * Initialize conversation from a RiotPrompt prompt\n */\n fromPrompt(prompt: Prompt, model?: Model): this {\n const targetModel = model || this.config.model;\n this.logger.debug('Initializing from prompt', { model: targetModel });\n\n // Use formatter (provided or create new one)\n const formatter = this.config.formatter || Formatter.create();\n const request = formatter.formatPrompt(targetModel, prompt);\n\n // Add all messages from formatted request\n request.messages.forEach(msg => {\n this.state.messages.push(msg as ConversationMessage);\n });\n\n this.updateMetadata();\n this.logger.debug('Initialized from prompt', { messageCount: this.state.messages.length });\n\n return this;\n }\n\n /**\n * Add a system message\n */\n addSystemMessage(content: string | Section<Instruction>): this {\n this.logger.debug('Adding system message');\n\n let messageContent: string;\n if (typeof content === 'string') {\n messageContent = content;\n } else {\n // Format section using formatter\n const formatter = this.config.formatter || Formatter.create();\n messageContent = formatter.format(content);\n }\n\n this.state.messages.push({\n role: 'system',\n content: messageContent,\n });\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a user message (with automatic budget management)\n */\n addUserMessage(content: string | Section<Content>): this {\n this.logger.debug('Adding user message');\n\n let messageContent: string;\n if (typeof content === 'string') {\n messageContent = content;\n } else {\n // Format section using formatter\n const formatter = this.config.formatter || Formatter.create();\n messageContent = formatter.format(content);\n }\n\n const message: ConversationMessage = {\n role: 'user',\n content: messageContent,\n };\n\n // Check budget if enabled\n if (this.budgetManager) {\n if (!this.budgetManager.canAddMessage(message, this.state.messages)) {\n this.logger.warn('Budget exceeded, compressing conversation');\n this.state.messages = this.budgetManager.compress(this.state.messages);\n }\n }\n\n this.state.messages.push(message);\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add an assistant message\n */\n addAssistantMessage(content: string | null): this {\n this.logger.debug('Adding assistant message');\n\n this.state.messages.push({\n role: 'assistant',\n content: content || '',\n });\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add an assistant message with tool calls\n */\n addAssistantWithToolCalls(content: string | null, toolCalls: ToolCall[]): this {\n this.logger.debug('Adding assistant message with tool calls', { toolCount: toolCalls.length });\n\n this.state.messages.push({\n role: 'assistant',\n content: content,\n tool_calls: toolCalls,\n });\n\n this.state.metadata.toolCallCount += toolCalls.length;\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a tool result message\n */\n addToolResult(toolCallId: string, content: string, toolName?: string): this {\n this.logger.debug('Adding tool result', { toolCallId, toolName });\n\n const message: ConversationMessage = {\n role: 'tool',\n tool_call_id: toolCallId,\n content: content,\n };\n\n if (toolName) {\n message.name = toolName;\n }\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Alias for addToolResult (more intuitive naming)\n */\n addToolMessage(toolCallId: string, content: string, toolName?: string): this {\n return this.addToolResult(toolCallId, content, toolName);\n }\n\n /**\n * Inject context into the conversation with advanced options\n *\n * @param context - Array of content items to inject\n * @param options - Injection options (position, format, deduplication, etc.)\n */\n injectContext(context: DynamicContentItem[], options?: InjectOptions): this {\n const opts: Required<InjectOptions> = {\n position: 'end',\n format: 'structured',\n deduplicate: this.config.deduplicateContext ?? true,\n deduplicateBy: 'id',\n priority: 'medium',\n weight: 1.0,\n category: undefined as any,\n source: undefined as any,\n ...options,\n };\n\n this.logger.debug('Injecting context', { itemCount: context.length, options: opts });\n\n // Filter out duplicates if enabled\n const itemsToAdd: DynamicContentItem[] = [];\n\n for (const item of context) {\n const enrichedItem: DynamicContentItem = {\n ...item,\n priority: item.priority || opts.priority,\n weight: item.weight || opts.weight,\n category: item.category || opts.category,\n source: item.source || opts.source,\n timestamp: item.timestamp || new Date(),\n };\n\n // Check deduplication\n if (opts.deduplicate) {\n let skip = false;\n\n switch (opts.deduplicateBy) {\n case 'id':\n if (enrichedItem.id && this.state.contextManager.hasContext(enrichedItem.id)) {\n this.logger.debug('Skipping duplicate context by ID', { id: enrichedItem.id });\n skip = true;\n }\n break;\n case 'hash':\n if (this.state.contextManager.hasContentHash(enrichedItem.content)) {\n this.logger.debug('Skipping duplicate context by hash');\n skip = true;\n }\n break;\n case 'content':\n if (this.state.contextManager.hasSimilarContent(enrichedItem.content)) {\n this.logger.debug('Skipping duplicate context by content');\n skip = true;\n }\n break;\n }\n\n if (skip) {\n continue;\n }\n }\n\n itemsToAdd.push(enrichedItem);\n }\n\n // Only proceed if we have items to add\n if (itemsToAdd.length === 0) {\n return this;\n }\n\n // Calculate position\n const position = this.calculatePosition(opts.position);\n\n // Format and inject\n for (const item of itemsToAdd) {\n const formatted = this.formatContextItem(item, opts.format);\n const contextMessage: ConversationMessage = {\n role: 'user',\n content: formatted,\n };\n\n this.state.messages.splice(position, 0, contextMessage);\n\n // Track in context manager\n this.state.contextManager.track(item, position);\n }\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Inject system-level context\n */\n injectSystemContext(context: Section<Context> | string): this {\n this.logger.debug('Injecting system context');\n\n let messageContent: string;\n if (typeof context === 'string') {\n messageContent = context;\n } else {\n const formatter = this.config.formatter || Formatter.create();\n messageContent = formatter.format(context);\n }\n\n this.state.messages.push({\n role: 'system',\n content: messageContent,\n });\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Get the number of messages in the conversation\n */\n getMessageCount(): number {\n return this.state.messages.length;\n }\n\n /**\n * Get the last message in the conversation\n */\n getLastMessage(): ConversationMessage | undefined {\n return this.state.messages[this.state.messages.length - 1];\n }\n\n /**\n * Get all messages\n */\n getMessages(): ConversationMessage[] {\n return [...this.state.messages];\n }\n\n /**\n * Check if conversation has any tool calls\n */\n hasToolCalls(): boolean {\n return this.state.metadata.toolCallCount > 0;\n }\n\n /**\n * Get conversation metadata\n */\n getMetadata(): ConversationMetadata {\n return { ...this.state.metadata };\n }\n\n /**\n * Export messages in OpenAI format\n */\n toMessages(): ConversationMessage[] {\n return this.state.messages.map(msg => ({ ...msg }));\n }\n\n /**\n * Serialize conversation to JSON\n */\n toJSON(): string {\n const serialized: SerializedConversation = {\n messages: this.state.messages,\n metadata: {\n ...this.state.metadata,\n created: this.state.metadata.created.toISOString(),\n lastModified: this.state.metadata.lastModified.toISOString(),\n },\n contextProvided: Array.from(this.state.contextProvided),\n };\n\n return JSON.stringify(serialized, null, 2);\n }\n\n /**\n * Restore conversation from JSON\n */\n static fromJSON(json: string, config?: Partial<ConversationBuilderConfig>, logger?: any): ConversationBuilder {\n const parsed: SerializedConversation = JSON.parse(json);\n\n const builder = ConversationBuilder.create(\n {\n model: parsed.metadata.model,\n ...config,\n },\n logger\n );\n\n // Restore state\n builder.state.messages = parsed.messages;\n builder.state.metadata = {\n ...parsed.metadata,\n created: new Date(parsed.metadata.created),\n lastModified: new Date(parsed.metadata.lastModified),\n };\n builder.state.contextProvided = new Set(parsed.contextProvided);\n\n return builder;\n }\n\n /**\n * Clone the conversation for parallel exploration\n */\n clone(): ConversationBuilder {\n this.logger.debug('Cloning conversation');\n\n const cloned = ConversationBuilder.create(\n { ...this.config },\n this.logger\n );\n\n // Deep copy state (note: contextManager is already created in constructor)\n cloned.state.messages = this.state.messages.map(msg => ({ ...msg }));\n cloned.state.metadata = { ...this.state.metadata };\n cloned.state.contextProvided = new Set(this.state.contextProvided);\n\n // Copy context manager state\n const allContext = this.state.contextManager.getAll();\n allContext.forEach(item => {\n cloned.state.contextManager.track(item, item.position);\n });\n\n return cloned;\n }\n\n /**\n * Truncate conversation to last N messages\n */\n truncate(maxMessages: number): this {\n this.logger.debug('Truncating conversation', { maxMessages, current: this.state.messages.length });\n\n if (this.state.messages.length > maxMessages) {\n this.state.messages = this.state.messages.slice(-maxMessages);\n this.updateMetadata();\n }\n\n return this;\n }\n\n /**\n * Remove all messages of a specific type\n */\n removeMessagesOfType(role: 'system' | 'user' | 'assistant' | 'tool'): this {\n this.logger.debug('Removing messages of type', { role });\n\n this.state.messages = this.state.messages.filter(msg => msg.role !== role);\n this.updateMetadata();\n\n return this;\n }\n\n /**\n * Get the context manager\n */\n getContextManager(): ContextManager {\n return this.state.contextManager;\n }\n\n /**\n * Get conversation state (for conditional injection)\n */\n getState(): ConversationState {\n return {\n messages: [...this.state.messages],\n metadata: { ...this.state.metadata },\n contextProvided: new Set(this.state.contextProvided),\n contextManager: this.state.contextManager,\n };\n }\n\n // ===== SEMANTIC MESSAGE METHODS (Feature 5) =====\n\n /**\n * Add a system message using semantic builder\n */\n asSystem(content: string | Section<Instruction>): this {\n const message = MessageBuilder.system(this.logger)\n .withContent(content)\n .withFormatter(this.config.formatter || Formatter.create())\n .buildForModel(this.config.model);\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a user message using semantic builder\n */\n asUser(content: string | Section<Content>): this {\n const message = MessageBuilder.user(this.logger)\n .withContent(content)\n .withFormatter(this.config.formatter || Formatter.create())\n .buildForModel(this.config.model);\n\n // Check budget if enabled\n if (this.budgetManager) {\n if (!this.budgetManager.canAddMessage(message, this.state.messages)) {\n this.logger.warn('Budget exceeded, compressing conversation');\n this.state.messages = this.budgetManager.compress(this.state.messages);\n }\n }\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add an assistant message using semantic builder\n */\n asAssistant(content: string | null, toolCalls?: ToolCall[]): this {\n const builder = MessageBuilder.assistant(this.logger)\n .withFormatter(this.config.formatter || Formatter.create());\n\n if (content) {\n builder.withContent(content);\n }\n\n if (toolCalls) {\n builder.withToolCalls(toolCalls);\n }\n\n const message = builder.buildForModel(this.config.model);\n\n if (toolCalls) {\n this.state.metadata.toolCallCount += toolCalls.length;\n }\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a tool result message using semantic builder\n */\n asTool(callId: string, result: any, metadata?: Record<string, any>): this {\n const builder = MessageBuilder.tool(callId, this.logger)\n .withResult(result);\n\n if (metadata) {\n builder.withMetadata(metadata);\n }\n\n const message = builder.buildForModel(this.config.model);\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Configure token budget\n */\n withTokenBudget(config: TokenBudgetConfig): this {\n this.logger.debug('Configuring token budget', { max: config.max });\n this.budgetManager = new TokenBudgetManager(config, this.config.model, this.logger);\n return this;\n }\n\n /**\n * Configure conversation logging\n */\n withLogging(config: LogConfig): this {\n this.logger.debug('Configuring conversation logging');\n this.conversationLogger = new ConversationLogger(config, this.logger);\n this.conversationLogger.onConversationStart({\n model: this.config.model,\n startTime: new Date(),\n });\n return this;\n }\n\n /**\n * Save conversation log\n */\n async saveLog(): Promise<string> {\n if (!this.conversationLogger) {\n throw new Error('Logging not enabled. Call withLogging() first.');\n }\n\n this.conversationLogger.onConversationEnd({\n totalMessages: this.state.messages.length,\n toolCallsExecuted: this.state.metadata.toolCallCount,\n iterations: 0,\n success: true,\n });\n\n return await this.conversationLogger.save();\n }\n\n /**\n * Get current token usage\n */\n getTokenUsage(): TokenUsage {\n if (!this.budgetManager) {\n return { used: 0, max: Infinity, remaining: Infinity, percentage: 0 };\n }\n return this.budgetManager.getCurrentUsage(this.state.messages);\n }\n\n /**\n * Manually compress conversation\n */\n compress(_strategy?: CompressionStrategy): this {\n if (this.budgetManager) {\n this.state.messages = this.budgetManager.compress(this.state.messages);\n }\n return this;\n }\n\n /**\n * Build and return the builder (for fluent API compatibility)\n */\n build(): this {\n return this;\n }\n\n /**\n * Calculate position for context injection\n */\n private calculatePosition(position: InjectOptions['position']): number {\n if (typeof position === 'number') {\n return Math.max(0, Math.min(position, this.state.messages.length));\n }\n\n switch (position) {\n case 'end':\n return this.state.messages.length;\n case 'before-last':\n return Math.max(0, this.state.messages.length - 1);\n case 'after-system': {\n // Find last system message (reverse search for compatibility)\n let lastSystemIdx = -1;\n for (let i = this.state.messages.length - 1; i >= 0; i--) {\n if (this.state.messages[i].role === 'system') {\n lastSystemIdx = i;\n break;\n }\n }\n return lastSystemIdx >= 0 ? lastSystemIdx + 1 : 0;\n }\n default:\n return this.state.messages.length;\n }\n }\n\n /**\n * Format context item based on format option\n */\n private formatContextItem(item: DynamicContentItem, format: 'structured' | 'inline' | 'reference'): string {\n switch (format) {\n case 'structured': {\n let result = `## ${item.title || 'Context'}\\n\\n${item.content}`;\n\n // Add metadata if available\n const metadata: string[] = [];\n if (item.source) {\n metadata.push(`Source: ${item.source}`);\n }\n if (item.timestamp) {\n metadata.push(`Timestamp: ${item.timestamp.toISOString()}`);\n }\n if (metadata.length > 0) {\n result += `\\n\\n_${metadata.join(' | ')}_`;\n }\n\n return result;\n }\n\n case 'inline':\n return `Note: ${item.title ? `${item.title}: ` : ''}${item.content}`;\n\n case 'reference':\n return `[Context Reference: ${item.id || 'unknown'}]\\nSee attached context${item.title ? ` for ${item.title}` : ''}`;\n\n default:\n return item.content;\n }\n }\n\n /**\n * Update metadata after state changes\n */\n private updateMetadata(): void {\n this.state.metadata.messageCount = this.state.messages.length;\n this.state.metadata.lastModified = new Date();\n }\n}\n\n/**\n * Export the builder for use in other modules\n */\nexport default ConversationBuilder;\n\n"],"names":["ConversationBuilderConfigSchema","z","object","model","string","formatter","any","optional","trackContext","boolean","default","deduplicateContext","ConversationBuilder","create","config","logger","defaultConfig","fromPrompt","prompt","targetModel","debug","Formatter","request","formatPrompt","messages","forEach","msg","state","push","updateMetadata","messageCount","length","addSystemMessage","content","messageContent","format","role","addUserMessage","message","budgetManager","canAddMessage","warn","compress","addAssistantMessage","addAssistantWithToolCalls","toolCalls","toolCount","tool_calls","metadata","toolCallCount","addToolResult","toolCallId","toolName","tool_call_id","name","addToolMessage","injectContext","context","options","opts","position","deduplicate","deduplicateBy","priority","weight","category","undefined","source","itemCount","itemsToAdd","item","enrichedItem","timestamp","Date","skip","id","contextManager","hasContext","hasContentHash","hasSimilarContent","calculatePosition","formatted","formatContextItem","contextMessage","splice","track","injectSystemContext","getMessageCount","getLastMessage","getMessages","hasToolCalls","getMetadata","toMessages","map","toJSON","serialized","created","toISOString","lastModified","contextProvided","Array","from","JSON","stringify","fromJSON","json","parsed","parse","builder","Set","clone","cloned","allContext","getAll","truncate","maxMessages","current","slice","removeMessagesOfType","filter","getContextManager","getState","asSystem","MessageBuilder","system","withContent","withFormatter","buildForModel","asUser","user","asAssistant","assistant","withToolCalls","asTool","callId","result","tool","withResult","withMetadata","withTokenBudget","max","TokenBudgetManager","withLogging","conversationLogger","ConversationLogger","onConversationStart","startTime","saveLog","Error","onConversationEnd","totalMessages","toolCallsExecuted","iterations","success","save","getTokenUsage","used","Infinity","remaining","percentage","getCurrentUsage","_strategy","build","Math","min","lastSystemIdx","i","title","join","wrapLogger","DEFAULT_LOGGER","ContextManager"],"mappings":"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"}
1
+ {"version":3,"file":"conversation.js","sources":["../src/conversation.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { Model } from \"./chat\";\nimport { ContextManager, type DynamicContentItem } from \"./context-manager\";\nimport { ConversationLogger, type LogConfig } from \"./conversation-logger\";\nimport { Content } from \"./items/content\";\nimport { Context } from \"./items/context\";\nimport { Instruction } from \"./items/instruction\";\nimport { Section } from \"./items/section\";\nimport { DEFAULT_LOGGER, wrapLogger } from \"./logger\";\nimport { MessageBuilder } from \"./message-builder\";\nimport { Prompt } from \"./prompt\";\nimport * as Formatter from \"./formatter\";\nimport { TokenBudgetManager, type TokenBudgetConfig, type TokenUsage, type CompressionStrategy } from \"./token-budget\";\n\n// ===== TYPE DEFINITIONS =====\n\n/**\n * Options for injecting context\n */\nexport interface InjectOptions {\n // Where to inject\n position?: 'end' | 'before-last' | 'after-system' | number;\n\n // How to format\n format?: 'structured' | 'inline' | 'reference';\n\n // Deduplication\n deduplicate?: boolean;\n deduplicateBy?: 'id' | 'content' | 'hash';\n\n // Priority\n priority?: 'high' | 'medium' | 'low';\n weight?: number;\n\n // Metadata\n category?: string;\n source?: string;\n}\n\n/**\n * Represents a tool call made by the assistant\n */\nexport interface ToolCall {\n id: string;\n type: 'function';\n function: {\n name: string;\n arguments: string;\n };\n}\n\n/**\n * Message in a conversation (compatible with OpenAI ChatCompletionMessageParam)\n */\nexport interface ConversationMessage {\n role: 'system' | 'user' | 'assistant' | 'tool';\n content: string | null;\n name?: string;\n tool_calls?: ToolCall[];\n tool_call_id?: string;\n}\n\n/**\n * Configuration for ConversationBuilder\n */\nexport interface ConversationBuilderConfig {\n model: Model;\n formatter?: Formatter.Instance;\n trackContext?: boolean;\n deduplicateContext?: boolean;\n}\n\n/**\n * Metadata about the conversation\n */\nexport interface ConversationMetadata {\n model: Model;\n created: Date;\n lastModified: Date;\n messageCount: number;\n toolCallCount: number;\n}\n\n/**\n * Internal state of a conversation\n */\nexport interface ConversationState {\n messages: ConversationMessage[];\n metadata: ConversationMetadata;\n contextProvided: Set<string>;\n contextManager: ContextManager;\n}\n\n/**\n * Serializable conversation state for persistence\n */\nexport interface SerializedConversation {\n messages: ConversationMessage[];\n metadata: Omit<ConversationMetadata, 'created' | 'lastModified'> & {\n created: string;\n lastModified: string;\n };\n contextProvided: string[];\n}\n\n// ===== SCHEMAS =====\n\nconst ConversationBuilderConfigSchema = z.object({\n model: z.string(),\n formatter: z.any().optional(),\n trackContext: z.boolean().optional().default(true),\n deduplicateContext: z.boolean().optional().default(true),\n});\n\n// ===== CONVERSATION BUILDER =====\n\n/**\n * ConversationBuilder manages multi-turn conversations with full lifecycle support.\n *\n * Features:\n * - Initialize from RiotPrompt prompts\n * - Add messages of any type (system, user, assistant, tool)\n * - Handle tool calls and results\n * - Inject dynamic context\n * - Clone for parallel exploration\n * - Serialize/deserialize for persistence\n *\n * @example\n * ```typescript\n * // Create from prompt\n * const conversation = ConversationBuilder.create()\n * .fromPrompt(prompt, 'gpt-4o')\n * .build();\n *\n * // Add messages\n * conversation.addUserMessage('Analyze this code');\n *\n * // Handle tool calls\n * conversation.addAssistantWithToolCalls(null, toolCalls);\n * conversation.addToolResult(toolCallId, result);\n *\n * // Export\n * const messages = conversation.toMessages();\n * ```\n */\nexport class ConversationBuilder {\n private state: ConversationState;\n private config: ConversationBuilderConfig;\n private logger: any;\n private budgetManager?: TokenBudgetManager;\n private conversationLogger?: ConversationLogger;\n\n private constructor(config: ConversationBuilderConfig, logger?: any) {\n this.config = ConversationBuilderConfigSchema.parse(config) as ConversationBuilderConfig;\n this.logger = wrapLogger(logger || DEFAULT_LOGGER, 'ConversationBuilder');\n\n this.state = {\n messages: [],\n metadata: {\n model: this.config.model,\n created: new Date(),\n lastModified: new Date(),\n messageCount: 0,\n toolCallCount: 0,\n },\n contextProvided: new Set<string>(),\n contextManager: new ContextManager(logger),\n };\n\n this.logger.debug('Created ConversationBuilder', { model: this.config.model });\n }\n\n /**\n * Create a new ConversationBuilder instance\n */\n static create(config?: Partial<ConversationBuilderConfig>, logger?: any): ConversationBuilder {\n const defaultConfig: ConversationBuilderConfig = {\n model: 'gpt-4o',\n trackContext: true,\n deduplicateContext: true,\n ...config,\n };\n\n return new ConversationBuilder(defaultConfig, logger);\n }\n\n /**\n * Initialize conversation from a RiotPrompt prompt\n */\n fromPrompt(prompt: Prompt, model?: Model): this {\n const targetModel = model || this.config.model;\n this.logger.debug('Initializing from prompt', { model: targetModel });\n\n // Use formatter (provided or create new one)\n const formatter = this.config.formatter || Formatter.create();\n const request = formatter.formatPrompt(targetModel, prompt);\n\n // Add all messages from formatted request\n request.messages.forEach(msg => {\n this.state.messages.push(msg as ConversationMessage);\n });\n\n this.updateMetadata();\n this.logger.debug('Initialized from prompt', { messageCount: this.state.messages.length });\n\n return this;\n }\n\n /**\n * Add a system message\n */\n addSystemMessage(content: string | Section<Instruction>): this {\n this.logger.debug('Adding system message');\n\n let messageContent: string;\n if (typeof content === 'string') {\n messageContent = content;\n } else {\n // Format section using formatter\n const formatter = this.config.formatter || Formatter.create();\n messageContent = formatter.format(content);\n }\n\n this.state.messages.push({\n role: 'system',\n content: messageContent,\n });\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a user message (with automatic budget management)\n */\n addUserMessage(content: string | Section<Content>): this {\n this.logger.debug('Adding user message');\n\n let messageContent: string;\n if (typeof content === 'string') {\n messageContent = content;\n } else {\n // Format section using formatter\n const formatter = this.config.formatter || Formatter.create();\n messageContent = formatter.format(content);\n }\n\n const message: ConversationMessage = {\n role: 'user',\n content: messageContent,\n };\n\n // Check budget if enabled\n if (this.budgetManager) {\n if (!this.budgetManager.canAddMessage(message, this.state.messages)) {\n this.logger.warn('Budget exceeded, compressing conversation');\n this.state.messages = this.budgetManager.compress(this.state.messages);\n\n // Re-check after compression and warn if still over budget\n if (!this.budgetManager.canAddMessage(message, this.state.messages)) {\n this.logger.warn('Token budget still exceeded after compression, adding message anyway');\n // Note: We add the message anyway to maintain backward compatibility\n // Consider setting onBudgetExceeded: 'error' in config if strict enforcement is needed\n }\n }\n }\n\n this.state.messages.push(message);\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add an assistant message\n */\n addAssistantMessage(content: string | null): this {\n this.logger.debug('Adding assistant message');\n\n this.state.messages.push({\n role: 'assistant',\n content: content || '',\n });\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add an assistant message with tool calls\n */\n addAssistantWithToolCalls(content: string | null, toolCalls: ToolCall[]): this {\n this.logger.debug('Adding assistant message with tool calls', { toolCount: toolCalls.length });\n\n this.state.messages.push({\n role: 'assistant',\n content: content,\n tool_calls: toolCalls,\n });\n\n this.state.metadata.toolCallCount += toolCalls.length;\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a tool result message\n */\n addToolResult(toolCallId: string, content: string, toolName?: string): this {\n this.logger.debug('Adding tool result', { toolCallId, toolName });\n\n const message: ConversationMessage = {\n role: 'tool',\n tool_call_id: toolCallId,\n content: content,\n };\n\n if (toolName) {\n message.name = toolName;\n }\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Alias for addToolResult (more intuitive naming)\n */\n addToolMessage(toolCallId: string, content: string, toolName?: string): this {\n return this.addToolResult(toolCallId, content, toolName);\n }\n\n /**\n * Inject context into the conversation with advanced options\n *\n * @param context - Array of content items to inject\n * @param options - Injection options (position, format, deduplication, etc.)\n */\n injectContext(context: DynamicContentItem[], options?: InjectOptions): this {\n const opts: Required<InjectOptions> = {\n position: 'end',\n format: 'structured',\n deduplicate: this.config.deduplicateContext ?? true,\n deduplicateBy: 'id',\n priority: 'medium',\n weight: 1.0,\n category: undefined as any,\n source: undefined as any,\n ...options,\n };\n\n this.logger.debug('Injecting context', { itemCount: context.length, options: opts });\n\n // Filter out duplicates if enabled\n const itemsToAdd: DynamicContentItem[] = [];\n\n for (const item of context) {\n const enrichedItem: DynamicContentItem = {\n ...item,\n priority: item.priority || opts.priority,\n weight: item.weight || opts.weight,\n category: item.category || opts.category,\n source: item.source || opts.source,\n timestamp: item.timestamp || new Date(),\n };\n\n // Check deduplication\n if (opts.deduplicate) {\n let skip = false;\n\n switch (opts.deduplicateBy) {\n case 'id':\n if (enrichedItem.id && this.state.contextManager.hasContext(enrichedItem.id)) {\n this.logger.debug('Skipping duplicate context by ID', { id: enrichedItem.id });\n skip = true;\n }\n break;\n case 'hash':\n if (this.state.contextManager.hasContentHash(enrichedItem.content)) {\n this.logger.debug('Skipping duplicate context by hash');\n skip = true;\n }\n break;\n case 'content':\n if (this.state.contextManager.hasSimilarContent(enrichedItem.content)) {\n this.logger.debug('Skipping duplicate context by content');\n skip = true;\n }\n break;\n }\n\n if (skip) {\n continue;\n }\n }\n\n itemsToAdd.push(enrichedItem);\n }\n\n // Only proceed if we have items to add\n if (itemsToAdd.length === 0) {\n return this;\n }\n\n // Calculate position\n const position = this.calculatePosition(opts.position);\n\n // Format and inject\n for (let i = 0; i < itemsToAdd.length; i++) {\n const item = itemsToAdd[i];\n const formatted = this.formatContextItem(item, opts.format);\n const contextMessage: ConversationMessage = {\n role: 'user',\n content: formatted,\n };\n\n // Each item is inserted at position + index to maintain order\n const actualPosition = position + i;\n this.state.messages.splice(actualPosition, 0, contextMessage);\n\n // Track in context manager with correct position\n this.state.contextManager.track(item, actualPosition);\n }\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Inject system-level context\n */\n injectSystemContext(context: Section<Context> | string): this {\n this.logger.debug('Injecting system context');\n\n let messageContent: string;\n if (typeof context === 'string') {\n messageContent = context;\n } else {\n const formatter = this.config.formatter || Formatter.create();\n messageContent = formatter.format(context);\n }\n\n this.state.messages.push({\n role: 'system',\n content: messageContent,\n });\n\n this.updateMetadata();\n return this;\n }\n\n /**\n * Get the number of messages in the conversation\n */\n getMessageCount(): number {\n return this.state.messages.length;\n }\n\n /**\n * Get the last message in the conversation\n */\n getLastMessage(): ConversationMessage | undefined {\n return this.state.messages[this.state.messages.length - 1];\n }\n\n /**\n * Get all messages\n */\n getMessages(): ConversationMessage[] {\n return [...this.state.messages];\n }\n\n /**\n * Check if conversation has any tool calls\n */\n hasToolCalls(): boolean {\n return this.state.metadata.toolCallCount > 0;\n }\n\n /**\n * Get conversation metadata\n */\n getMetadata(): ConversationMetadata {\n return { ...this.state.metadata };\n }\n\n /**\n * Export messages in OpenAI format (deep copy to prevent shared state)\n */\n toMessages(): ConversationMessage[] {\n return this.state.messages.map(msg => ({\n ...msg,\n tool_calls: msg.tool_calls ? msg.tool_calls.map(tc => ({\n ...tc,\n function: { ...tc.function }\n })) : undefined\n }));\n }\n\n /**\n * Serialize conversation to JSON\n */\n toJSON(): string {\n const serialized: SerializedConversation = {\n messages: this.state.messages,\n metadata: {\n ...this.state.metadata,\n created: this.state.metadata.created.toISOString(),\n lastModified: this.state.metadata.lastModified.toISOString(),\n },\n contextProvided: Array.from(this.state.contextProvided),\n };\n\n return JSON.stringify(serialized, null, 2);\n }\n\n /**\n * Restore conversation from JSON\n */\n static fromJSON(json: string, config?: Partial<ConversationBuilderConfig>, logger?: any): ConversationBuilder {\n const parsed: SerializedConversation = JSON.parse(json);\n\n const builder = ConversationBuilder.create(\n {\n model: parsed.metadata.model,\n ...config,\n },\n logger\n );\n\n // Restore state\n builder.state.messages = parsed.messages;\n builder.state.metadata = {\n ...parsed.metadata,\n created: new Date(parsed.metadata.created),\n lastModified: new Date(parsed.metadata.lastModified),\n };\n builder.state.contextProvided = new Set(parsed.contextProvided);\n\n return builder;\n }\n\n /**\n * Clone the conversation for parallel exploration (deep copy to prevent shared state)\n */\n clone(): ConversationBuilder {\n this.logger.debug('Cloning conversation');\n\n const cloned = ConversationBuilder.create(\n { ...this.config },\n this.logger\n );\n\n // Deep copy state (note: contextManager is already created in constructor)\n cloned.state.messages = this.state.messages.map(msg => ({\n ...msg,\n tool_calls: msg.tool_calls ? msg.tool_calls.map(tc => ({\n ...tc,\n function: { ...tc.function }\n })) : undefined\n }));\n cloned.state.metadata = { ...this.state.metadata };\n cloned.state.contextProvided = new Set(this.state.contextProvided);\n\n // Copy context manager state\n const allContext = this.state.contextManager.getAll();\n allContext.forEach(item => {\n cloned.state.contextManager.track(item, item.position);\n });\n\n return cloned;\n }\n\n /**\n * Truncate conversation to last N messages\n */\n truncate(maxMessages: number): this {\n this.logger.debug('Truncating conversation', { maxMessages, current: this.state.messages.length });\n\n if (this.state.messages.length > maxMessages) {\n this.state.messages = this.state.messages.slice(-maxMessages);\n this.updateMetadata();\n }\n\n return this;\n }\n\n /**\n * Remove all messages of a specific type\n */\n removeMessagesOfType(role: 'system' | 'user' | 'assistant' | 'tool'): this {\n this.logger.debug('Removing messages of type', { role });\n\n this.state.messages = this.state.messages.filter(msg => msg.role !== role);\n this.updateMetadata();\n\n return this;\n }\n\n /**\n * Get the context manager\n */\n getContextManager(): ContextManager {\n return this.state.contextManager;\n }\n\n /**\n * Get conversation state (for conditional injection)\n */\n getState(): ConversationState {\n return {\n messages: [...this.state.messages],\n metadata: { ...this.state.metadata },\n contextProvided: new Set(this.state.contextProvided),\n contextManager: this.state.contextManager,\n };\n }\n\n // ===== SEMANTIC MESSAGE METHODS (Feature 5) =====\n\n /**\n * Add a system message using semantic builder\n */\n asSystem(content: string | Section<Instruction>): this {\n const message = MessageBuilder.system(this.logger)\n .withContent(content)\n .withFormatter(this.config.formatter || Formatter.create())\n .buildForModel(this.config.model);\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a user message using semantic builder\n */\n asUser(content: string | Section<Content>): this {\n const message = MessageBuilder.user(this.logger)\n .withContent(content)\n .withFormatter(this.config.formatter || Formatter.create())\n .buildForModel(this.config.model);\n\n // Check budget if enabled\n if (this.budgetManager) {\n if (!this.budgetManager.canAddMessage(message, this.state.messages)) {\n this.logger.warn('Budget exceeded, compressing conversation');\n this.state.messages = this.budgetManager.compress(this.state.messages);\n }\n }\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add an assistant message using semantic builder\n */\n asAssistant(content: string | null, toolCalls?: ToolCall[]): this {\n const builder = MessageBuilder.assistant(this.logger)\n .withFormatter(this.config.formatter || Formatter.create());\n\n if (content) {\n builder.withContent(content);\n }\n\n if (toolCalls) {\n builder.withToolCalls(toolCalls);\n }\n\n const message = builder.buildForModel(this.config.model);\n\n if (toolCalls) {\n this.state.metadata.toolCallCount += toolCalls.length;\n }\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Add a tool result message using semantic builder\n */\n asTool(callId: string, result: any, metadata?: Record<string, any>): this {\n const builder = MessageBuilder.tool(callId, this.logger)\n .withResult(result);\n\n if (metadata) {\n builder.withMetadata(metadata);\n }\n\n const message = builder.buildForModel(this.config.model);\n\n this.state.messages.push(message);\n this.updateMetadata();\n return this;\n }\n\n /**\n * Configure token budget\n */\n withTokenBudget(config: TokenBudgetConfig): this {\n this.logger.debug('Configuring token budget', { max: config.max });\n this.budgetManager = new TokenBudgetManager(config, this.config.model, this.logger);\n return this;\n }\n\n /**\n * Configure conversation logging\n */\n withLogging(config: LogConfig): this {\n this.logger.debug('Configuring conversation logging');\n this.conversationLogger = new ConversationLogger(config, this.logger);\n this.conversationLogger.onConversationStart({\n model: this.config.model,\n startTime: new Date(),\n });\n return this;\n }\n\n /**\n * Save conversation log\n */\n async saveLog(): Promise<string> {\n if (!this.conversationLogger) {\n throw new Error('Logging not enabled. Call withLogging() first.');\n }\n\n this.conversationLogger.onConversationEnd({\n totalMessages: this.state.messages.length,\n toolCallsExecuted: this.state.metadata.toolCallCount,\n iterations: 0,\n success: true,\n });\n\n return await this.conversationLogger.save();\n }\n\n /**\n * Get current token usage\n */\n getTokenUsage(): TokenUsage {\n if (!this.budgetManager) {\n return { used: 0, max: Infinity, remaining: Infinity, percentage: 0 };\n }\n return this.budgetManager.getCurrentUsage(this.state.messages);\n }\n\n /**\n * Manually compress conversation\n */\n compress(_strategy?: CompressionStrategy): this {\n if (this.budgetManager) {\n this.state.messages = this.budgetManager.compress(this.state.messages);\n }\n return this;\n }\n\n /**\n * Build and return the builder (for fluent API compatibility)\n */\n build(): this {\n return this;\n }\n\n /**\n * Calculate position for context injection\n *\n * Positions:\n * - 'end': After all messages\n * - 'before-last': Before the last message\n * - 'after-system': After the LAST system message (useful for models with multiple system messages)\n * - number: Specific index (clamped to valid range)\n */\n private calculatePosition(position: InjectOptions['position']): number {\n if (typeof position === 'number') {\n return Math.max(0, Math.min(position, this.state.messages.length));\n }\n\n switch (position) {\n case 'end':\n return this.state.messages.length;\n case 'before-last':\n return Math.max(0, this.state.messages.length - 1);\n case 'after-system': {\n // Find last system message (uses reverse search to find most recent system message)\n let lastSystemIdx = -1;\n for (let i = this.state.messages.length - 1; i >= 0; i--) {\n if (this.state.messages[i].role === 'system') {\n lastSystemIdx = i;\n break;\n }\n }\n return lastSystemIdx >= 0 ? lastSystemIdx + 1 : 0;\n }\n default:\n return this.state.messages.length;\n }\n }\n\n /**\n * Format context item based on format option\n */\n private formatContextItem(item: DynamicContentItem, format: 'structured' | 'inline' | 'reference'): string {\n switch (format) {\n case 'structured': {\n let result = `## ${item.title || 'Context'}\\n\\n${item.content}`;\n\n // Add metadata if available\n const metadata: string[] = [];\n if (item.source) {\n metadata.push(`Source: ${item.source}`);\n }\n if (item.timestamp) {\n metadata.push(`Timestamp: ${item.timestamp.toISOString()}`);\n }\n if (metadata.length > 0) {\n result += `\\n\\n_${metadata.join(' | ')}_`;\n }\n\n return result;\n }\n\n case 'inline':\n return `Note: ${item.title ? `${item.title}: ` : ''}${item.content}`;\n\n case 'reference':\n return `[Context Reference: ${item.id || 'unknown'}]\\nSee attached context${item.title ? ` for ${item.title}` : ''}`;\n\n default:\n return item.content;\n }\n }\n\n /**\n * Update metadata after state changes\n */\n private updateMetadata(): void {\n this.state.metadata.messageCount = this.state.messages.length;\n this.state.metadata.lastModified = new Date();\n }\n}\n\n/**\n * Export the builder for use in other modules\n */\nexport default ConversationBuilder;\n\n"],"names":["ConversationBuilderConfigSchema","z","object","model","string","formatter","any","optional","trackContext","boolean","default","deduplicateContext","ConversationBuilder","create","config","logger","defaultConfig","fromPrompt","prompt","targetModel","debug","Formatter","request","formatPrompt","messages","forEach","msg","state","push","updateMetadata","messageCount","length","addSystemMessage","content","messageContent","format","role","addUserMessage","message","budgetManager","canAddMessage","warn","compress","addAssistantMessage","addAssistantWithToolCalls","toolCalls","toolCount","tool_calls","metadata","toolCallCount","addToolResult","toolCallId","toolName","tool_call_id","name","addToolMessage","injectContext","context","options","opts","position","deduplicate","deduplicateBy","priority","weight","category","undefined","source","itemCount","itemsToAdd","item","enrichedItem","timestamp","Date","skip","id","contextManager","hasContext","hasContentHash","hasSimilarContent","calculatePosition","i","formatted","formatContextItem","contextMessage","actualPosition","splice","track","injectSystemContext","getMessageCount","getLastMessage","getMessages","hasToolCalls","getMetadata","toMessages","map","tc","function","toJSON","serialized","created","toISOString","lastModified","contextProvided","Array","from","JSON","stringify","fromJSON","json","parsed","parse","builder","Set","clone","cloned","allContext","getAll","truncate","maxMessages","current","slice","removeMessagesOfType","filter","getContextManager","getState","asSystem","MessageBuilder","system","withContent","withFormatter","buildForModel","asUser","user","asAssistant","assistant","withToolCalls","asTool","callId","result","tool","withResult","withMetadata","withTokenBudget","max","TokenBudgetManager","withLogging","conversationLogger","ConversationLogger","onConversationStart","startTime","saveLog","Error","onConversationEnd","totalMessages","toolCallsExecuted","iterations","success","save","getTokenUsage","used","Infinity","remaining","percentage","getCurrentUsage","_strategy","build","Math","min","lastSystemIdx","title","join","wrapLogger","DEFAULT_LOGGER","ContextManager"],"mappings":"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"}
@@ -23,7 +23,7 @@ const create = (options = {})=>{
23
23
  };
24
24
  if (Array.isArray(item)) {
25
25
  item.forEach((item)=>{
26
- append(item);
26
+ append(item, options); // Propagate options to array items
27
27
  });
28
28
  } else {
29
29
  if (typeof item === 'string') {
@@ -42,7 +42,7 @@ const create = (options = {})=>{
42
42
  };
43
43
  if (Array.isArray(item)) {
44
44
  item.forEach((item)=>{
45
- prepend(item);
45
+ prepend(item, options); // Propagate options to array items
46
46
  });
47
47
  } else {
48
48
  if (typeof item === 'string') {
@@ -61,7 +61,7 @@ const create = (options = {})=>{
61
61
  };
62
62
  if (Array.isArray(item)) {
63
63
  item.forEach((item)=>{
64
- insert(index, item);
64
+ insert(index, item, options); // Propagate options to array items
65
65
  });
66
66
  } else {
67
67
  if (typeof item === 'string') {
@@ -1 +1 @@
1
- {"version":3,"file":"section.js","sources":["../../src/items/section.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { ParametersSchema } from \"./parameters\";\nimport { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport interface Section<T extends Weighted> {\n title?: string;\n items: (T | Section<T>)[];\n weight?: number;\n add: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n append: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n prepend: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n insert: (\n index: number,\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n replace: (\n index: number,\n item: T | Section<T> | string,\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n remove: (index: number) => Section<T>;\n toJSON: () => { title?: string; items: any[]; weight?: number; };\n}\n\nexport const SectionOptionsSchema = z.object({\n title: z.string().optional(),\n weight: z.number().optional(),\n itemWeight: z.number().optional(),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type SectionOptions = z.infer<typeof SectionOptionsSchema>;\n\nexport const isSection = (object: any): boolean => {\n return object !== undefined && object != null && typeof object === 'object' && 'items' in object;\n}\n\nexport const convertToSection = (\n object: any,\n options: Partial<SectionOptions> = {}\n): Section<Weighted> => {\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n const weightedOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n if (isSection(object)) {\n const section = create({ ...sectionOptions, title: object.title });\n object.items.forEach((item: any) => {\n if (isSection(item)) {\n section.append(convertToSection(item, sectionOptions));\n } else {\n section.append(createWeighted(item.text, weightedOptions));\n }\n });\n return section;\n } else {\n throw new Error('Object is not a section');\n }\n}\n\nexport const create = <T extends Weighted>(\n options: Partial<SectionOptions> = {}\n): Section<T> => {\n const items: (T | Section<T>)[] = [];\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n const sectionItemOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n const append = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n append(item);\n });\n } else {\n if (typeof item === 'string') {\n items.push(createWeighted<T>(item, itemOptions));\n } else {\n items.push(item);\n }\n }\n return section;\n }\n\n const prepend = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n prepend(item);\n });\n } else {\n if (typeof item === 'string') {\n items.unshift(createWeighted<T>(item, itemOptions));\n } else {\n items.unshift(item);\n }\n }\n return section;\n }\n\n const insert = (index: number, item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n insert(index, item);\n });\n } else {\n if (typeof item === 'string') {\n items.splice(index, 0, createWeighted<T>(item, itemOptions));\n } else {\n items.splice(index, 0, item);\n }\n }\n return section;\n }\n\n const remove = (index: number): Section<T> => {\n items.splice(index, 1);\n return section;\n }\n\n const replace = (index: number, item: T | Section<T> | string, options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (typeof item === 'string') {\n items[index] = createWeighted<T>(item, itemOptions);\n } else {\n items[index] = item;\n }\n return section;\n }\n\n const add = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n return append(item, itemOptions);\n }\n\n const toJSON = () => {\n return {\n title: section.title,\n items: items.map(item => {\n // If the item has a toJSON method, call it, otherwise return the item itself\n return typeof item === 'object' && item !== null && 'toJSON' in item && typeof item.toJSON === 'function'\n ? item.toJSON()\n : item;\n }),\n weight: section.weight,\n };\n };\n\n const section: Section<T> = {\n title: sectionOptions.title,\n items,\n weight: sectionOptions.weight,\n add,\n append,\n prepend,\n insert,\n remove,\n replace,\n toJSON,\n }\n\n return section;\n}\n\n\n"],"names":["SectionOptionsSchema","z","object","title","string","optional","weight","number","itemWeight","parameters","ParametersSchema","default","create","options","items","sectionOptions","parse","sectionItemOptions","WeightedOptionsSchema","append","item","itemOptions","Array","isArray","forEach","push","createWeighted","section","prepend","unshift","insert","index","splice","remove","replace","add","toJSON","map"],"mappings":"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"}
1
+ {"version":3,"file":"section.js","sources":["../../src/items/section.ts"],"sourcesContent":["import { z } from \"zod\";\nimport { ParametersSchema } from \"./parameters\";\nimport { Weighted, WeightedOptions, WeightedOptionsSchema, create as createWeighted } from \"./weighted\";\n\nexport interface Section<T extends Weighted> {\n title?: string;\n items: (T | Section<T>)[];\n weight?: number;\n add: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n append: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n prepend: (\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n insert: (\n index: number,\n item: T | T[] | Section<T> | Section<T>[] | string | string[],\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n replace: (\n index: number,\n item: T | Section<T> | string,\n options?: Partial<WeightedOptions>\n ) => Section<T>;\n remove: (index: number) => Section<T>;\n toJSON: () => { title?: string; items: any[]; weight?: number; };\n}\n\nexport const SectionOptionsSchema = z.object({\n title: z.string().optional(),\n weight: z.number().optional(),\n itemWeight: z.number().optional(),\n parameters: ParametersSchema.optional().default({}),\n});\n\nexport type SectionOptions = z.infer<typeof SectionOptionsSchema>;\n\nexport const isSection = (object: any): boolean => {\n return object !== undefined && object != null && typeof object === 'object' && 'items' in object;\n}\n\nexport const convertToSection = (\n object: any,\n options: Partial<SectionOptions> = {}\n): Section<Weighted> => {\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n const weightedOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n if (isSection(object)) {\n const section = create({ ...sectionOptions, title: object.title });\n object.items.forEach((item: any) => {\n if (isSection(item)) {\n section.append(convertToSection(item, sectionOptions));\n } else {\n section.append(createWeighted(item.text, weightedOptions));\n }\n });\n return section;\n } else {\n throw new Error('Object is not a section');\n }\n}\n\nexport const create = <T extends Weighted>(\n options: Partial<SectionOptions> = {}\n): Section<T> => {\n const items: (T | Section<T>)[] = [];\n const sectionOptions = SectionOptionsSchema.parse(options);\n\n const sectionItemOptions = WeightedOptionsSchema.parse({\n ...sectionOptions,\n weight: sectionOptions.itemWeight,\n });\n\n const append = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n append(item, options); // Propagate options to array items\n });\n } else {\n if (typeof item === 'string') {\n items.push(createWeighted<T>(item, itemOptions));\n } else {\n items.push(item);\n }\n }\n return section;\n }\n\n const prepend = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n prepend(item, options); // Propagate options to array items\n });\n } else {\n if (typeof item === 'string') {\n items.unshift(createWeighted<T>(item, itemOptions));\n } else {\n items.unshift(item);\n }\n }\n return section;\n }\n\n const insert = (index: number, item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (Array.isArray(item)) {\n item.forEach((item) => {\n insert(index, item, options); // Propagate options to array items\n });\n } else {\n if (typeof item === 'string') {\n items.splice(index, 0, createWeighted<T>(item, itemOptions));\n } else {\n items.splice(index, 0, item);\n }\n }\n return section;\n }\n\n const remove = (index: number): Section<T> => {\n items.splice(index, 1);\n return section;\n }\n\n const replace = (index: number, item: T | Section<T> | string, options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n if (typeof item === 'string') {\n items[index] = createWeighted<T>(item, itemOptions);\n } else {\n items[index] = item;\n }\n return section;\n }\n\n const add = (item: T | T[] | Section<T> | Section<T>[] | string | string[], options: Partial<WeightedOptions> = {}): Section<T> => {\n let itemOptions: WeightedOptions = WeightedOptionsSchema.parse(options);\n itemOptions = { ...sectionItemOptions, ...itemOptions };\n\n return append(item, itemOptions);\n }\n\n const toJSON = () => {\n return {\n title: section.title,\n items: items.map(item => {\n // If the item has a toJSON method, call it, otherwise return the item itself\n return typeof item === 'object' && item !== null && 'toJSON' in item && typeof item.toJSON === 'function'\n ? item.toJSON()\n : item;\n }),\n weight: section.weight,\n };\n };\n\n const section: Section<T> = {\n title: sectionOptions.title,\n items,\n weight: sectionOptions.weight,\n add,\n append,\n prepend,\n insert,\n remove,\n replace,\n toJSON,\n }\n\n return section;\n}\n\n\n"],"names":["SectionOptionsSchema","z","object","title","string","optional","weight","number","itemWeight","parameters","ParametersSchema","default","create","options","items","sectionOptions","parse","sectionItemOptions","WeightedOptionsSchema","append","item","itemOptions","Array","isArray","forEach","push","createWeighted","section","prepend","unshift","insert","index","splice","remove","replace","add","toJSON","map"],"mappings":"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"}
@@ -34,6 +34,7 @@ export interface StrategyState {
34
34
  insights: Insight[];
35
35
  findings: any[];
36
36
  errors: Error[];
37
+ toolFailures: Map<string, number>;
37
38
  [key: string]: any;
38
39
  }
39
40
  /**
@@ -100,6 +101,7 @@ export interface StrategyPhase {
100
101
  earlyExit?: boolean;
101
102
  requireFinalAnswer?: boolean;
102
103
  adaptiveDepth?: boolean;
104
+ maxConsecutiveToolFailures?: number;
103
105
  continueIf?: (state: StrategyState) => boolean;
104
106
  skipIf?: (state: StrategyState) => boolean;
105
107
  }
@@ -61,7 +61,8 @@ function _define_property(obj, key, value) {
61
61
  startTime,
62
62
  insights: [],
63
63
  findings: [],
64
- errors: []
64
+ errors: [],
65
+ toolFailures: new Map()
65
66
  };
66
67
  this.logger.info('Starting strategy execution', {
67
68
  strategy: strategy.name
@@ -101,10 +102,6 @@ function _define_property(obj, key, value) {
101
102
  });
102
103
  const phaseResult = await this.executePhase(conversation, tools, phase, state, strategy);
103
104
  phaseResults.push(phaseResult);
104
- // Track iteration for metrics
105
- if (this.metricsCollector) {
106
- this.metricsCollector.incrementIteration();
107
- }
108
105
  await ((_strategy_onPhaseComplete = strategy.onPhaseComplete) === null || _strategy_onPhaseComplete === void 0 ? void 0 : _strategy_onPhaseComplete.call(strategy, phaseResult, state));
109
106
  // Check if should continue
110
107
  if (strategy.shouldContinue && !strategy.shouldContinue(state)) {
@@ -199,6 +196,10 @@ function _define_property(obj, key, value) {
199
196
  for(let i = 0; i < phase.maxIterations; i++){
200
197
  var _strategy_onIteration;
201
198
  state.iteration++;
199
+ // Track iteration for metrics
200
+ if (this.metricsCollector) {
201
+ this.metricsCollector.incrementIteration();
202
+ }
202
203
  this.logger.debug('Iteration', {
203
204
  phase: phase.name,
204
205
  iteration: i + 1
@@ -224,6 +225,7 @@ function _define_property(obj, key, value) {
224
225
  conversation.asAssistant(response.content, response.tool_calls);
225
226
  // Execute tools
226
227
  for (const toolCall of response.tool_calls){
228
+ var _phase_maxConsecutiveToolFailures;
227
229
  var _strategy_onToolCall;
228
230
  // Check if tool is allowed in this phase
229
231
  if (phase.allowedTools && !phase.allowedTools.includes(toolCall.function.name)) {
@@ -232,6 +234,22 @@ function _define_property(obj, key, value) {
232
234
  });
233
235
  continue;
234
236
  }
237
+ // Circuit breaker: Check if tool has exceeded failure threshold
238
+ const maxFailures = (_phase_maxConsecutiveToolFailures = phase.maxConsecutiveToolFailures) !== null && _phase_maxConsecutiveToolFailures !== void 0 ? _phase_maxConsecutiveToolFailures : 3;
239
+ const consecutiveFailures = state.toolFailures.get(toolCall.function.name) || 0;
240
+ if (consecutiveFailures >= maxFailures) {
241
+ this.logger.warn('Tool circuit breaker triggered', {
242
+ tool: toolCall.function.name,
243
+ failures: consecutiveFailures
244
+ });
245
+ conversation.asTool(toolCall.id, {
246
+ error: `Tool temporarily disabled due to ${consecutiveFailures} consecutive failures`
247
+ }, {
248
+ success: false,
249
+ circuitBreakerTriggered: true
250
+ });
251
+ continue;
252
+ }
235
253
  // Check tool call hook
236
254
  const toolAction = await ((_strategy_onToolCall = strategy.onToolCall) === null || _strategy_onToolCall === void 0 ? void 0 : _strategy_onToolCall.call(strategy, toolCall, state));
237
255
  if (toolAction === 'skip') {
@@ -241,7 +259,18 @@ function _define_property(obj, key, value) {
241
259
  const toolStart = Date.now();
242
260
  try {
243
261
  var _strategy_onToolResult;
244
- const result = await tools.execute(toolCall.function.name, JSON.parse(toolCall.function.arguments));
262
+ // Parse tool arguments with error handling
263
+ let toolArgs;
264
+ try {
265
+ toolArgs = JSON.parse(toolCall.function.arguments);
266
+ } catch (parseError) {
267
+ const error = new Error(`Invalid JSON in tool arguments for ${toolCall.function.name}: ${parseError instanceof Error ? parseError.message : String(parseError)}`);
268
+ if (parseError instanceof Error) {
269
+ error.cause = parseError; // Preserve original error
270
+ }
271
+ throw error;
272
+ }
273
+ const result = await tools.execute(toolCall.function.name, toolArgs);
245
274
  const toolDuration = Date.now() - toolStart;
246
275
  const toolResult = {
247
276
  callId: toolCall.id,
@@ -254,6 +283,8 @@ function _define_property(obj, key, value) {
254
283
  success: true
255
284
  });
256
285
  state.toolCallsExecuted++;
286
+ // Reset failure counter on success
287
+ state.toolFailures.set(toolCall.function.name, 0);
257
288
  // Record metrics
258
289
  if (this.metricsCollector) {
259
290
  this.metricsCollector.recordToolCall(toolCall.function.name, state.iteration, toolDuration, true);
@@ -280,6 +311,9 @@ function _define_property(obj, key, value) {
280
311
  errorName: error.name
281
312
  });
282
313
  state.errors.push(error);
314
+ // Increment failure counter for circuit breaker
315
+ const failures = (state.toolFailures.get(toolCall.function.name) || 0) + 1;
316
+ state.toolFailures.set(toolCall.function.name, failures);
283
317
  // Record metrics
284
318
  if (this.metricsCollector) {
285
319
  this.metricsCollector.recordToolCall(toolCall.function.name, state.iteration, toolDuration, false, error.message);