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).
105 lines • 4.07 kB
JavaScript
;
/**
* 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.AugmentParser = void 0;
const index_js_1 = require("../types/index.js");
const ParserUtils_js_1 = require("../utils/ParserUtils.js");
const MessageBuilder_js_1 = require("../utils/MessageBuilder.js");
const ErrorUtils_js_1 = require("../utils/ErrorUtils.js");
/**
* Parse Augment LevelDB format
* Extracts messages from Augment VSCode Extension storage
*/
class AugmentParser {
/**
* Parse raw Augment data into messages
*
* @param rawData - Raw data from Augment LevelDB
* @param conversationId - Conversation ID
* @returns Result with Message[] or error
*/
parse(rawData, conversationId) {
try {
if (!rawData || rawData.trim().length === 0) {
return (0, index_js_1.Ok)([]);
}
const messages = this.extractMessages(rawData, conversationId);
return (0, index_js_1.Ok)(messages);
}
catch (error) {
return (0, index_js_1.Err)((0, ErrorUtils_js_1.handleError)(error, 'Failed to parse Augment data'));
}
}
/**
* Extract messages from raw Augment data
* @param rawData - Raw data string
* @param conversationId - Conversation ID
* @returns Message[]
*/
extractMessages(rawData, conversationId) {
const messages = [];
let messageIndex = 0;
// Extract user requests (allow escaped quotes)
const requestPattern = /"request_message"\s*:\s*"((?:[^"\\]|\\.)+?)"/g;
let requestMatch;
while ((requestMatch = requestPattern.exec(rawData)) !== null) {
const rawContent = requestMatch[1];
if (rawContent) {
const content = (0, ParserUtils_js_1.cleanContent)(rawContent);
if (content && content.length > 5) {
const message = MessageBuilder_js_1.MessageBuilder.create({
prefix: 'augment-user',
index: messageIndex,
conversationId,
role: 'user',
content,
});
messages.push(message);
messageIndex++;
}
}
}
// Extract AI responses (allow escaped quotes)
const responsePattern = /"response_text"\s*:\s*"((?:[^"\\]|\\.)+?)"/g;
let responseMatch;
while ((responseMatch = responsePattern.exec(rawData)) !== null) {
const rawContent = responseMatch[1];
if (rawContent) {
const content = (0, ParserUtils_js_1.cleanContent)(rawContent);
if (content && content.length > 5) {
const message = MessageBuilder_js_1.MessageBuilder.create({
prefix: 'augment-assistant',
index: messageIndex,
conversationId,
role: 'assistant',
content,
});
messages.push(message);
messageIndex++;
}
}
}
// Sort by message index to maintain order
return messages.sort((a, b) => {
const aIndex = parseInt(a.id.split('-').pop() ?? '0');
const bIndex = parseInt(b.id.split('-').pop() ?? '0');
return aIndex - bIndex;
});
}
/**
* Detect if data is from Augment
* @param rawData - Raw data
* @returns true if data appears to be from Augment
*/
isAugmentData(rawData) {
return (rawData.includes('request_message') ||
rawData.includes('response_text') ||
rawData.includes('conversationId'));
}
}
exports.AugmentParser = AugmentParser;
//# sourceMappingURL=AugmentParser.js.map