Initial commit: Brainy - Multi-Dimensional AI Database
Open source vector database with HNSW indexing, graph relationships, and metadata facets. Features CLI with professional augmentation registry integration for discovering extensions and capabilities.
This commit is contained in:
commit
f8c45f2d8d
448 changed files with 103294 additions and 0 deletions
85
scripts/development/cli-wrapper.js
Executable file
85
scripts/development/cli-wrapper.js
Executable file
|
|
@ -0,0 +1,85 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* CLI Wrapper Script
|
||||
*
|
||||
* This script serves as a wrapper for the Brainy CLI, ensuring that command-line arguments
|
||||
* are properly passed to the CLI when invoked through npm scripts.
|
||||
*/
|
||||
|
||||
import { spawn, execSync } from 'child_process'
|
||||
import { fileURLToPath } from 'url'
|
||||
import { dirname, join } from 'path'
|
||||
import fs from 'fs'
|
||||
|
||||
|
||||
// Get the directory of the current module
|
||||
const __filename = fileURLToPath(import.meta.url)
|
||||
const __dirname = dirname(__filename)
|
||||
|
||||
// Path to the actual CLI script
|
||||
const cliPath = join(__dirname, 'dist', 'cli.js')
|
||||
|
||||
// Check if the CLI script exists
|
||||
if (!fs.existsSync(cliPath)) {
|
||||
// Check if we're running in a global installation context
|
||||
const isGlobalInstall = __dirname.includes('node_modules') && !__dirname.includes('node_modules/.')
|
||||
|
||||
if (isGlobalInstall) {
|
||||
console.error(`Error: CLI script not found at ${cliPath}`)
|
||||
console.error('This is likely because the CLI was not built during package installation.')
|
||||
console.error('Please reinstall the package with:')
|
||||
console.error('npm uninstall -g @soulcraft/brainy')
|
||||
console.error('npm install -g @soulcraft/brainy --legacy-peer-deps')
|
||||
process.exit(1)
|
||||
} else {
|
||||
// In a local development context, try to build the CLI
|
||||
console.log(`CLI script not found at ${cliPath}. Building CLI...`)
|
||||
|
||||
try {
|
||||
// Run the build:cli script
|
||||
execSync('npm run build:cli', { stdio: 'inherit' })
|
||||
|
||||
// Check again if the CLI script exists after building
|
||||
if (!fs.existsSync(cliPath)) {
|
||||
console.error(`Error: Failed to build CLI script at ${cliPath}`)
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log('CLI built successfully.')
|
||||
} catch (error) {
|
||||
console.error(`Error building CLI: ${error.message}`)
|
||||
console.error('Make sure you have the necessary dependencies installed.')
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Special handling for version flags
|
||||
if (process.argv.includes('--version') || process.argv.includes('-V')) {
|
||||
// Read version directly from package.json to ensure it's always correct
|
||||
try {
|
||||
const packageJsonPath = join(__dirname, 'package.json')
|
||||
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'))
|
||||
console.log(packageJson.version)
|
||||
process.exit(0)
|
||||
} catch (error) {
|
||||
console.error('Error loading version information:', error.message)
|
||||
process.exit(1)
|
||||
}
|
||||
}
|
||||
|
||||
// Forward all arguments to the CLI script
|
||||
const args = process.argv.slice(2)
|
||||
|
||||
// Check if npm is passing --force flag
|
||||
// When npm runs with --force, it sets the npm_config_force environment variable
|
||||
if (process.env.npm_config_force === 'true' && args.includes('clear') && !args.includes('--force') && !args.includes('-f')) {
|
||||
args.push('--force')
|
||||
}
|
||||
|
||||
const cli = spawn('node', [cliPath, ...args], { stdio: 'inherit' })
|
||||
|
||||
cli.on('close', (code) => {
|
||||
process.exit(code)
|
||||
})
|
||||
1
scripts/development/encoded-image.html
Normal file
1
scripts/development/encoded-image.html
Normal file
File diff suppressed because one or more lines are too long
17
scripts/development/index.html
Normal file
17
scripts/development/index.html
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Brainy Interactive Demo - Redirecting...</title>
|
||||
<link rel="icon" href="brainy.png" type="image/png">
|
||||
<meta http-equiv="refresh" content="0;url=demo/index.html">
|
||||
<script>
|
||||
window.location.href = 'demo/index.html'
|
||||
</script>
|
||||
</head>
|
||||
<body>
|
||||
<p>Redirecting to <a href="demo/index.html">Brainy Interactive Demo</a>...</p>
|
||||
<p>If you are not redirected automatically, please click the link above.</p>
|
||||
</body>
|
||||
</html>
|
||||
78
scripts/development/test-browser-cache-detection.html
Normal file
78
scripts/development/test-browser-cache-detection.html
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Brainy Cache Detection Browser Test</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
#results {
|
||||
margin-top: 20px;
|
||||
padding: 10px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5px;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
.success {
|
||||
color: green;
|
||||
font-weight: bold;
|
||||
}
|
||||
.error {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Brainy Cache Detection Browser Test</h1>
|
||||
<p>This page tests if Brainy's cache detection works properly in browser environments.</p>
|
||||
|
||||
<button id="runTest">Run Test</button>
|
||||
|
||||
<div id="results">
|
||||
<p>Test results will appear here...</p>
|
||||
</div>
|
||||
|
||||
<script type="module">
|
||||
import { BrainyData } from './dist/unified.js';
|
||||
|
||||
document.getElementById('runTest').addEventListener('click', async () => {
|
||||
const resultsDiv = document.getElementById('results');
|
||||
resultsDiv.innerHTML = '<p>Running test...</p>';
|
||||
|
||||
try {
|
||||
console.log('Creating BrainyData instance...');
|
||||
resultsDiv.innerHTML += '<p>Creating BrainyData instance...</p>';
|
||||
|
||||
const brainy = new BrainyData();
|
||||
|
||||
console.log('BrainyData instance created successfully!');
|
||||
resultsDiv.innerHTML += '<p class="success">BrainyData instance created successfully!</p>';
|
||||
|
||||
// Initialize to make sure all components are created
|
||||
await brainy.init();
|
||||
|
||||
console.log('BrainyData initialized successfully!');
|
||||
resultsDiv.innerHTML += '<p class="success">BrainyData initialized successfully!</p>';
|
||||
|
||||
// Add a simple item to verify everything works
|
||||
const id = await brainy.add("Test item for browser cache detection");
|
||||
|
||||
console.log('Added test item with ID:', id);
|
||||
resultsDiv.innerHTML += `<p class="success">Added test item with ID: ${id}</p>`;
|
||||
|
||||
resultsDiv.innerHTML += '<p class="success">✅ Test completed successfully! Cache detection works in browser environment.</p>';
|
||||
} catch (error) {
|
||||
console.error('Error during cache detection test:', error);
|
||||
resultsDiv.innerHTML += `<p class="error">❌ Error during test: ${error.message}</p>`;
|
||||
resultsDiv.innerHTML += `<p class="error">Stack trace: ${error.stack}</p>`;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
130
scripts/development/test-worker-cache-detection.html
Normal file
130
scripts/development/test-worker-cache-detection.html
Normal file
|
|
@ -0,0 +1,130 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Brainy Cache Detection Worker Test</title>
|
||||
<style>
|
||||
body {
|
||||
font-family: Arial, sans-serif;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
padding: 20px;
|
||||
}
|
||||
#results {
|
||||
margin-top: 20px;
|
||||
padding: 10px;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5px;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
.success {
|
||||
color: green;
|
||||
font-weight: bold;
|
||||
}
|
||||
.error {
|
||||
color: red;
|
||||
font-weight: bold;
|
||||
}
|
||||
.log {
|
||||
color: #333;
|
||||
margin: 5px 0;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Brainy Cache Detection Worker Test</h1>
|
||||
<p>This page tests if Brainy's cache detection works properly in Web Worker environments.</p>
|
||||
|
||||
<button id="runTest">Run Test</button>
|
||||
|
||||
<div id="results">
|
||||
<p>Test results will appear here...</p>
|
||||
</div>
|
||||
|
||||
<script type="module">
|
||||
document.getElementById('runTest').addEventListener('click', () => {
|
||||
const resultsDiv = document.getElementById('results');
|
||||
resultsDiv.innerHTML = '<p>Starting worker test...</p>';
|
||||
|
||||
try {
|
||||
// Create a blob URL for the worker script
|
||||
const workerScript = `
|
||||
// Worker script for testing cache detection
|
||||
import { BrainyData } from './dist/unified.js';
|
||||
|
||||
// Listen for messages from the main thread
|
||||
self.onmessage = async (event) => {
|
||||
if (event.data === 'start-test') {
|
||||
try {
|
||||
self.postMessage({ type: 'log', message: 'Creating BrainyData instance...' });
|
||||
|
||||
const brainy = new BrainyData();
|
||||
|
||||
self.postMessage({ type: 'log', message: 'BrainyData instance created successfully!' });
|
||||
|
||||
// Initialize to make sure all components are created
|
||||
await brainy.init();
|
||||
|
||||
self.postMessage({ type: 'log', message: 'BrainyData initialized successfully!' });
|
||||
|
||||
// Add a simple item to verify everything works
|
||||
const id = await brainy.add("Test item for worker cache detection");
|
||||
|
||||
self.postMessage({ type: 'log', message: \`Added test item with ID: \${id}\` });
|
||||
|
||||
self.postMessage({
|
||||
type: 'success',
|
||||
message: 'Test completed successfully! Cache detection works in worker environment.'
|
||||
});
|
||||
} catch (error) {
|
||||
self.postMessage({
|
||||
type: 'error',
|
||||
message: \`Error during test: \${error.message}\`,
|
||||
stack: error.stack
|
||||
});
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Notify that the worker is ready
|
||||
self.postMessage({ type: 'ready' });
|
||||
`;
|
||||
|
||||
const blob = new Blob([workerScript], { type: 'application/javascript' });
|
||||
const workerUrl = URL.createObjectURL(blob);
|
||||
|
||||
// Create the worker
|
||||
const worker = new Worker(workerUrl, { type: 'module' });
|
||||
|
||||
// Handle messages from the worker
|
||||
worker.onmessage = (event) => {
|
||||
const data = event.data;
|
||||
|
||||
if (data.type === 'ready') {
|
||||
resultsDiv.innerHTML += '<p class="log">Worker is ready. Starting test...</p>';
|
||||
worker.postMessage('start-test');
|
||||
} else if (data.type === 'log') {
|
||||
resultsDiv.innerHTML += `<p class="log">[Worker] ${data.message}</p>`;
|
||||
} else if (data.type === 'success') {
|
||||
resultsDiv.innerHTML += `<p class="success">✅ ${data.message}</p>`;
|
||||
} else if (data.type === 'error') {
|
||||
resultsDiv.innerHTML += `<p class="error">❌ ${data.message}</p>`;
|
||||
if (data.stack) {
|
||||
resultsDiv.innerHTML += `<p class="error">Stack trace: ${data.stack}</p>`;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Handle worker errors
|
||||
worker.onerror = (error) => {
|
||||
resultsDiv.innerHTML += `<p class="error">❌ Worker error: ${error.message}</p>`;
|
||||
};
|
||||
} catch (error) {
|
||||
resultsDiv.innerHTML += `<p class="error">❌ Error creating worker: ${error.message}</p>`;
|
||||
console.error('Error creating worker:', error);
|
||||
}
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Loading…
Add table
Add a link
Reference in a new issue