@probelabs/probe-chat
Version:
CLI and web interface for Probe code search (formerly @probelabs/probe-web and @probelabs/probe-chat)
85 lines (75 loc) • 1.76 kB
JavaScript
/**
* Backend registry for automatic discovery and registration
* @module registry
*/
import AiderBackend from './AiderBackend.js';
import ClaudeCodeBackend from './ClaudeCodeBackend.js';
/**
* Available backend classes
*/
const AVAILABLE_BACKENDS = {
aider: AiderBackend,
'claude-code': ClaudeCodeBackend
};
/**
* Get all available backend classes
* @returns {Object<string, typeof BaseBackend>}
*/
function getAvailableBackends() {
return { ...AVAILABLE_BACKENDS };
}
/**
* Create a backend instance by name
* @param {string} name - Backend name
* @returns {BaseBackend|null}
*/
function createBackend(name) {
const BackendClass = AVAILABLE_BACKENDS[name];
if (!BackendClass) {
return null;
}
return new BackendClass();
}
/**
* Register a custom backend class
* @param {string} name - Backend name
* @param {typeof BaseBackend} BackendClass - Backend class
*/
function registerBackend(name, BackendClass) {
AVAILABLE_BACKENDS[name] = BackendClass;
}
/**
* Get backend metadata
* @param {string} name - Backend name
* @returns {Object|null}
*/
function getBackendMetadata(name) {
const backend = createBackend(name);
if (!backend) {
return null;
}
return {
name: backend.name,
version: backend.version,
description: backend.getDescription(),
capabilities: backend.getCapabilities(),
dependencies: backend.getRequiredDependencies()
};
}
/**
* List all registered backend names
* @returns {string[]}
*/
function listBackendNames() {
return Object.keys(AVAILABLE_BACKENDS);
}
export {
getAvailableBackends,
createBackend,
registerBackend,
getBackendMetadata,
listBackendNames,
// Export backend classes for direct use
AiderBackend,
ClaudeCodeBackend
};