UNPKG

create-ai-chat-context-experimental

Version:

Phase 2: TypeScript rewrite - AI Chat Context & Memory System with conversation extraction and AICF format support (powered by aicf-core v2.1.0).

98 lines 3.73 kB
"use strict"; /** * This file is part of create-ai-chat-context-experimental. * Licensed under the GNU Affero General Public License v3.0 or later (AGPL-3.0-or-later). * See LICENSE file for details. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.ActionExtractor = void 0; const index_js_1 = require("../types/index.js"); const index_js_2 = require("../types/index.js"); /** * Extract AI actions using priority-based approach * PRIORITY 1: Use conversation summary (full content) * PRIORITY 2: Extract from individual messages (fallback) */ class ActionExtractor { /** * Extract AI actions from messages and summary * * @param messages - Array of messages * @param summary - Conversation summary (optional) * @returns Result with AIAction[] or error */ extract(messages, summary) { try { // PRIORITY 1: Extract from conversation summary if (summary && summary.aiResponses) { return (0, index_js_2.Ok)(this.extractFromSummary(summary)); } // PRIORITY 2: Extract from individual messages return (0, index_js_2.Ok)(this.extractFromMessages(messages)); } catch (error) { const message = error instanceof Error ? error.message : 'Unknown error'; return (0, index_js_2.Err)(new index_js_1.ExtractionError(`Failed to extract AI actions: ${message}`, error)); } } /** * Extract actions from conversation summary * @param summary - Conversation summary * @returns AIAction[] */ extractFromSummary(summary) { const actions = []; // Split AI responses by [AI N] markers const aiResponseMatches = summary.aiResponses.match(/\[AI \d+\] (.+?)(?=\n\n\[AI \d+\]|\n\n$|$)/gs); if (aiResponseMatches && aiResponseMatches.length > 0) { aiResponseMatches.forEach((response, index) => { const cleanResponse = response.replace(/\[AI \d+\] /, '').trim(); if (cleanResponse.length > 0) { actions.push({ timestamp: new Date().toISOString(), details: cleanResponse, // ✅ FULL content, not truncated type: this.detectActionType(cleanResponse), source: 'conversation_summary', messageIndex: index + 1, }); } }); } return actions; } /** * Extract actions from individual messages * @param messages - Array of messages * @returns AIAction[] */ extractFromMessages(messages) { const actions = []; const aiMessages = messages.filter((m) => m.role === 'assistant'); aiMessages.forEach((msg, index) => { actions.push({ timestamp: msg.timestamp, details: msg.content, // ✅ FULL content, not truncated type: this.detectActionType(msg.content), source: 'augment_leveldb', messageIndex: index + 1, }); }); return actions; } /** * Detect action type from content * @param content - Action content * @returns Action type */ detectActionType(content) { const lowerContent = content.toLowerCase(); // Check for agent actions (code blocks are the primary indicator) if (lowerContent.includes('```')) { return 'augment_agent_action'; } // Default to response return 'augment_ai_response'; } } exports.ActionExtractor = ActionExtractor; //# sourceMappingURL=ActionExtractor.js.map