UNPKG

route-claudecode

Version:

Advanced routing and transformation system for Claude Code outputs to multiple AI providers

212 lines 7.45 kB
"use strict"; /** * OpenAI Data Capture Module * Captures raw request and response data for debugging and analysis */ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.saveCaptureData = saveCaptureData; exports.captureRequest = captureRequest; exports.captureResponse = captureResponse; exports.captureError = captureError; exports.listCapturedFiles = listCapturedFiles; exports.loadCapturedData = loadCapturedData; exports.captureParsingEvent = captureParsingEvent; exports.captureToolCallEvent = captureToolCallEvent; const fs = __importStar(require("fs")); const path = __importStar(require("path")); const logger_1 = require("@/utils/logger"); // Ensure database directory exists const databaseDir = path.join(process.env.HOME || '', '.route-claude-code', 'database'); const capturesDir = path.join(databaseDir, 'captures', 'openai'); // Create directories if they don't exist if (!fs.existsSync(capturesDir)) { fs.mkdirSync(capturesDir, { recursive: true }); logger_1.logger.info('Created OpenAI data capture directory', { capturesDir }); } /** * Save captured data to file */ function saveCaptureData(data) { try { const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); const filename = `openai-capture-${timestamp}-${data.requestId || 'unknown'}.json`; const filepath = path.join(capturesDir, filename); // Write data to file fs.writeFileSync(filepath, JSON.stringify(data, null, 2)); logger_1.logger.debug('OpenAI data captured and saved', { filepath, requestId: data.requestId, provider: data.provider }); } catch (error) { logger_1.logger.error('Failed to save OpenAI capture data', { error: error instanceof Error ? error.message : String(error) }); } } /** * Capture request data */ function captureRequest(provider, model, request, requestId) { const captureData = { timestamp: new Date().toISOString(), requestId: requestId || 'unknown', provider, model, request: JSON.parse(JSON.stringify(request)) // Deep copy to avoid reference issues }; saveCaptureData(captureData); } /** * Capture response data */ function captureResponse(provider, model, request, response, requestId) { const captureData = { timestamp: new Date().toISOString(), requestId: requestId || 'unknown', provider, model, request: JSON.parse(JSON.stringify(request)), // Deep copy response: JSON.parse(JSON.stringify(response)) // Deep copy }; saveCaptureData(captureData); } /** * Capture error data */ function captureError(provider, model, request, error, requestId) { const captureData = { timestamp: new Date().toISOString(), requestId: requestId || 'unknown', provider, model, request: JSON.parse(JSON.stringify(request)), // Deep copy error: { message: error.message || String(error), stack: error.stack, name: error.name } }; saveCaptureData(captureData); } /** * List captured files */ function listCapturedFiles() { try { const files = fs.readdirSync(capturesDir); return files.filter(file => file.endsWith('.json')).sort(); } catch (error) { logger_1.logger.error('Failed to list captured files', { error: error instanceof Error ? error.message : String(error) }); return []; } } /** * Load captured data */ function loadCapturedData(filename) { try { const filepath = path.join(capturesDir, filename); const data = fs.readFileSync(filepath, 'utf8'); return JSON.parse(data); } catch (error) { logger_1.logger.error('Failed to load captured data', { filename, error: error instanceof Error ? error.message : String(error) }); return null; } } /** * Capture parsing events for detailed analysis */ function captureParsingEvent(requestId, eventType, data) { try { const parsingDir = path.join(databaseDir, 'parsing-events', 'openai'); if (!fs.existsSync(parsingDir)) { fs.mkdirSync(parsingDir, { recursive: true }); } const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); const filename = `parsing-${eventType}-${timestamp}-${requestId || 'unknown'}.json`; const filepath = path.join(parsingDir, filename); const captureData = { timestamp: new Date().toISOString(), requestId, eventType, data }; fs.writeFileSync(filepath, JSON.stringify(captureData, null, 2)); logger_1.logger.debug('Parsing event captured', { filepath, eventType }); } catch (error) { logger_1.logger.error('Failed to capture parsing event', { error: error instanceof Error ? error.message : String(error), eventType }); } } /** * Capture tool call events for analysis */ function captureToolCallEvent(requestId, toolCallData) { try { const toolCallsDir = path.join(databaseDir, 'tool-calls', 'openai'); if (!fs.existsSync(toolCallsDir)) { fs.mkdirSync(toolCallsDir, { recursive: true }); } const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); const filename = `toolcall-${timestamp}-${requestId || 'unknown'}.json`; const filepath = path.join(toolCallsDir, filename); const captureData = { timestamp: new Date().toISOString(), requestId, toolCallData }; fs.writeFileSync(filepath, JSON.stringify(captureData, null, 2)); logger_1.logger.debug('Tool call event captured', { filepath }); } catch (error) { logger_1.logger.error('Failed to capture tool call event', { error: error instanceof Error ? error.message : String(error) }); } } //# sourceMappingURL=data-capture.js.map