chore: recovery checkpoint - v3.0 API successfully recovered
CRITICAL CHECKPOINT - DO NOT PUSH TO GITHUB Recovery Status: - Successfully recovered brainy.ts from compiled JavaScript - All core v3.0 API methods functional (add, get, update, delete, relate, find, etc.) - Neural subsystem intact (562KB embedded patterns, NLP working) - Augmentation pipeline operational (20+ augmentations) - HNSW clustering system complete - Triple Intelligence compiled (needs constructor fix) - Test suite validates functionality Changes preserved: - 898 files with changes from last 3 days - 144,475 insertions - All augmentation improvements - All test coverage enhancements - Complete v3.0 feature set This is a LOCAL checkpoint only - contains recovered work after corruption incident. Created backup in .backups/brainy-full-20250910-151314.tar.gz Branch: recovery-checkpoint-20250910-151433 Date: Wed Sep 10 03:18:04 PM PDT 2025
This commit is contained in:
parent
f65455fb22
commit
8ff382ca3b
895 changed files with 143654 additions and 28268 deletions
|
|
@ -0,0 +1,342 @@
|
|||
/**
|
||||
* Augmentation Factory
|
||||
*
|
||||
* This module provides a simplified factory for creating augmentations with minimal boilerplate.
|
||||
* It reduces the complexity of creating and using augmentations by providing a fluent API
|
||||
* and handling common patterns automatically.
|
||||
*/
|
||||
import { registerAugmentation } from './augmentationRegistry.js';
|
||||
/**
|
||||
* Base class for all augmentations created with the factory
|
||||
* Handles common functionality like initialization, shutdown, and status
|
||||
*/
|
||||
class BaseAugmentation {
|
||||
constructor(options) {
|
||||
this.enabled = true;
|
||||
this.isInitialized = false;
|
||||
this.name = options.name;
|
||||
this.description = options.description || `${options.name} augmentation`;
|
||||
this.enabled = options.enabled !== false;
|
||||
}
|
||||
async initialize() {
|
||||
if (this.isInitialized)
|
||||
return;
|
||||
this.isInitialized = true;
|
||||
}
|
||||
async shutDown() {
|
||||
this.isInitialized = false;
|
||||
}
|
||||
async getStatus() {
|
||||
return this.isInitialized ? 'active' : 'inactive';
|
||||
}
|
||||
async ensureInitialized() {
|
||||
if (!this.isInitialized) {
|
||||
await this.initialize();
|
||||
}
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Factory for creating sense augmentations
|
||||
*/
|
||||
export function createSenseAugmentation(options) {
|
||||
const augmentation = new BaseAugmentation(options);
|
||||
// Implement the sense augmentation methods
|
||||
augmentation.processRawData = async (rawData, dataType) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.processRawData) {
|
||||
const result = options.processRawData(rawData, dataType);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: { nouns: [], verbs: [] },
|
||||
error: 'processRawData not implemented'
|
||||
};
|
||||
};
|
||||
augmentation.listenToFeed = async (feedUrl, callback) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.listenToFeed) {
|
||||
return options.listenToFeed(feedUrl, callback);
|
||||
}
|
||||
throw new Error('listenToFeed not implemented');
|
||||
};
|
||||
// Auto-register if requested
|
||||
if (options.autoRegister) {
|
||||
registerAugmentation(augmentation);
|
||||
// Auto-initialize if requested
|
||||
if (options.autoInitialize) {
|
||||
augmentation.initialize().catch((error) => {
|
||||
console.error(`Failed to initialize augmentation ${augmentation.name}:`, error);
|
||||
});
|
||||
}
|
||||
}
|
||||
return augmentation;
|
||||
}
|
||||
/**
|
||||
* Factory for creating conduit augmentations
|
||||
*/
|
||||
export function createConduitAugmentation(options) {
|
||||
const augmentation = new BaseAugmentation(options);
|
||||
// Implement the conduit augmentation methods
|
||||
augmentation.establishConnection = async (targetSystemId, config) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.establishConnection) {
|
||||
const result = options.establishConnection(targetSystemId, config);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: null,
|
||||
error: 'establishConnection not implemented'
|
||||
};
|
||||
};
|
||||
augmentation.readData = async (query, opts) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.readData) {
|
||||
const result = options.readData(query, opts);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: null,
|
||||
error: 'readData not implemented'
|
||||
};
|
||||
};
|
||||
augmentation.writeData = async (data, opts) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.writeData) {
|
||||
const result = options.writeData(data, opts);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: null,
|
||||
error: 'writeData not implemented'
|
||||
};
|
||||
};
|
||||
augmentation.monitorStream = async (streamId, callback) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.monitorStream) {
|
||||
return options.monitorStream(streamId, callback);
|
||||
}
|
||||
throw new Error('monitorStream not implemented');
|
||||
};
|
||||
// Auto-register if requested
|
||||
if (options.autoRegister) {
|
||||
registerAugmentation(augmentation);
|
||||
// Auto-initialize if requested
|
||||
if (options.autoInitialize) {
|
||||
augmentation.initialize().catch((error) => {
|
||||
console.error(`Failed to initialize augmentation ${augmentation.name}:`, error);
|
||||
});
|
||||
}
|
||||
}
|
||||
return augmentation;
|
||||
}
|
||||
/**
|
||||
* Factory for creating memory augmentations
|
||||
*/
|
||||
export function createMemoryAugmentation(options) {
|
||||
const augmentation = new BaseAugmentation(options);
|
||||
// Implement the memory augmentation methods
|
||||
augmentation.storeData = async (key, data, opts) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.storeData) {
|
||||
const result = options.storeData(key, data, opts);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: false,
|
||||
error: 'storeData not implemented'
|
||||
};
|
||||
};
|
||||
augmentation.retrieveData = async (key, opts) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.retrieveData) {
|
||||
const result = options.retrieveData(key, opts);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: null,
|
||||
error: 'retrieveData not implemented'
|
||||
};
|
||||
};
|
||||
augmentation.updateData = async (key, data, opts) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.updateData) {
|
||||
const result = options.updateData(key, data, opts);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: false,
|
||||
error: 'updateData not implemented'
|
||||
};
|
||||
};
|
||||
augmentation.deleteData = async (key, opts) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.deleteData) {
|
||||
const result = options.deleteData(key, opts);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: false,
|
||||
error: 'deleteData not implemented'
|
||||
};
|
||||
};
|
||||
augmentation.listDataKeys = async (pattern, opts) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.listDataKeys) {
|
||||
const result = options.listDataKeys(pattern, opts);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: [],
|
||||
error: 'listDataKeys not implemented'
|
||||
};
|
||||
};
|
||||
augmentation.search = async (query, k, opts) => {
|
||||
await augmentation.ensureInitialized();
|
||||
if (options.search) {
|
||||
const result = options.search(query, k, opts);
|
||||
return result instanceof Promise ? await result : result;
|
||||
}
|
||||
return {
|
||||
success: false,
|
||||
data: [],
|
||||
error: 'search not implemented'
|
||||
};
|
||||
};
|
||||
// Auto-register if requested
|
||||
if (options.autoRegister) {
|
||||
registerAugmentation(augmentation);
|
||||
// Auto-initialize if requested
|
||||
if (options.autoInitialize) {
|
||||
augmentation.initialize().catch((error) => {
|
||||
console.error(`Failed to initialize augmentation ${augmentation.name}:`, error);
|
||||
});
|
||||
}
|
||||
}
|
||||
return augmentation;
|
||||
}
|
||||
/**
|
||||
* Factory for creating WebSocket-enabled augmentations
|
||||
* This can be combined with other augmentation factories to create WebSocket-enabled versions
|
||||
*/
|
||||
export function addWebSocketSupport(augmentation, options) {
|
||||
const wsAugmentation = augmentation;
|
||||
// Add WebSocket methods
|
||||
wsAugmentation.connectWebSocket = async (url, protocols) => {
|
||||
await augmentation.ensureInitialized?.();
|
||||
if (options.connectWebSocket) {
|
||||
return options.connectWebSocket(url, protocols);
|
||||
}
|
||||
throw new Error('connectWebSocket not implemented');
|
||||
};
|
||||
wsAugmentation.sendWebSocketMessage = async (connectionId, data) => {
|
||||
await augmentation.ensureInitialized?.();
|
||||
if (options.sendWebSocketMessage) {
|
||||
return options.sendWebSocketMessage(connectionId, data);
|
||||
}
|
||||
throw new Error('sendWebSocketMessage not implemented');
|
||||
};
|
||||
wsAugmentation.onWebSocketMessage = async (connectionId, callback) => {
|
||||
await augmentation.ensureInitialized?.();
|
||||
if (options.onWebSocketMessage) {
|
||||
return options.onWebSocketMessage(connectionId, callback);
|
||||
}
|
||||
throw new Error('onWebSocketMessage not implemented');
|
||||
};
|
||||
wsAugmentation.offWebSocketMessage = async (connectionId, callback) => {
|
||||
await augmentation.ensureInitialized?.();
|
||||
if (options.offWebSocketMessage) {
|
||||
return options.offWebSocketMessage(connectionId, callback);
|
||||
}
|
||||
throw new Error('offWebSocketMessage not implemented');
|
||||
};
|
||||
wsAugmentation.closeWebSocket = async (connectionId, code, reason) => {
|
||||
await augmentation.ensureInitialized?.();
|
||||
if (options.closeWebSocket) {
|
||||
return options.closeWebSocket(connectionId, code, reason);
|
||||
}
|
||||
throw new Error('closeWebSocket not implemented');
|
||||
};
|
||||
return wsAugmentation;
|
||||
}
|
||||
/**
|
||||
* Simplified function to execute an augmentation method with automatic error handling
|
||||
* This provides a more concise way to execute augmentation methods compared to the full pipeline
|
||||
*/
|
||||
export async function executeAugmentation(augmentation, method, ...args) {
|
||||
try {
|
||||
if (!augmentation.enabled) {
|
||||
return {
|
||||
success: false,
|
||||
data: null,
|
||||
error: `Augmentation ${augmentation.name} is disabled`
|
||||
};
|
||||
}
|
||||
if (typeof augmentation[method] !== 'function') {
|
||||
return {
|
||||
success: false,
|
||||
data: null,
|
||||
error: `Method ${method} not found on augmentation ${augmentation.name}`
|
||||
};
|
||||
}
|
||||
const result = await augmentation[method](...args);
|
||||
return result;
|
||||
}
|
||||
catch (error) {
|
||||
console.error(`Error executing ${method} on ${augmentation.name}:`, error);
|
||||
return {
|
||||
success: false,
|
||||
data: null,
|
||||
error: error instanceof Error ? error.message : String(error)
|
||||
};
|
||||
}
|
||||
}
|
||||
/**
|
||||
* Dynamically load augmentations from a module at runtime
|
||||
* This allows for lazy-loading augmentations when needed instead of at build time
|
||||
*/
|
||||
export async function loadAugmentationModule(modulePromise, options = {}) {
|
||||
try {
|
||||
const module = await modulePromise;
|
||||
const augmentations = [];
|
||||
// Extract augmentations from the module
|
||||
for (const key in module) {
|
||||
const exported = module[key];
|
||||
// Skip non-objects and null
|
||||
if (!exported || typeof exported !== 'object') {
|
||||
continue;
|
||||
}
|
||||
// Check if it's an augmentation
|
||||
if (typeof exported.name === 'string' &&
|
||||
typeof exported.initialize === 'function' &&
|
||||
typeof exported.shutDown === 'function' &&
|
||||
typeof exported.getStatus === 'function') {
|
||||
augmentations.push(exported);
|
||||
// Auto-register if requested
|
||||
if (options.autoRegister) {
|
||||
registerAugmentation(exported);
|
||||
// Auto-initialize if requested
|
||||
if (options.autoInitialize) {
|
||||
exported.initialize().catch((error) => {
|
||||
console.error(`Failed to initialize augmentation ${exported.name}:`, error);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return augmentations;
|
||||
}
|
||||
catch (error) {
|
||||
console.error('Error loading augmentation module:', error);
|
||||
return [];
|
||||
}
|
||||
}
|
||||
//# sourceMappingURL=augmentationFactory.js.map
|
||||
Loading…
Add table
Add a link
Reference in a new issue