61 lines
1.9 KiB
JavaScript
61 lines
1.9 KiB
JavaScript
|
|
import { existsSync, mkdirSync, writeFileSync } from 'fs';
|
||
|
|
import { join, dirname } from 'path';
|
||
|
|
import { tmpdir } from 'os';
|
||
|
|
|
||
|
|
// Import embedded static files
|
||
|
|
import { staticFiles } from './embedded-static.js';
|
||
|
|
|
||
|
|
// Import server statically
|
||
|
|
import * as serverModule from './server/index.js';
|
||
|
|
|
||
|
|
// Parse args
|
||
|
|
const args = process.argv.slice(2);
|
||
|
|
let port = 3000;
|
||
|
|
for (let i = 0; i < args.length; i++) {
|
||
|
|
if (args[i] === '--port' || args[i] === '-p') {
|
||
|
|
port = parseInt(args[++i]) || 3000;
|
||
|
|
} else if (args[i].startsWith('--port=')) {
|
||
|
|
port = parseInt(args[i].split('=')[1]) || 3000;
|
||
|
|
} else if (args[i] === '--help' || args[i] === '-h') {
|
||
|
|
console.log(`OpenChamber - Web UI for OpenCode
|
||
|
|
Usage: OpenChamber [options]
|
||
|
|
Options:
|
||
|
|
--port, -p Port (default: 3000)
|
||
|
|
--help, -h Show help`);
|
||
|
|
process.exit(0);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
// Extract static files to temp directory
|
||
|
|
const extractDir = join(tmpdir(), 'openchamber-static-' + process.pid);
|
||
|
|
const distPath = join(extractDir, 'dist');
|
||
|
|
|
||
|
|
console.log('Extracting static files...');
|
||
|
|
mkdirSync(distPath, { recursive: true });
|
||
|
|
|
||
|
|
let extractedCount = 0;
|
||
|
|
for (const [relPath, base64Content] of Object.entries(staticFiles)) {
|
||
|
|
const fullPath = join(distPath, relPath);
|
||
|
|
const dir = dirname(fullPath);
|
||
|
|
if (!existsSync(dir)) {
|
||
|
|
mkdirSync(dir, { recursive: true });
|
||
|
|
}
|
||
|
|
const content = Buffer.from(base64Content, 'base64');
|
||
|
|
writeFileSync(fullPath, content);
|
||
|
|
extractedCount++;
|
||
|
|
}
|
||
|
|
console.log(`Extracted ${extractedCount} files to ${distPath}`);
|
||
|
|
|
||
|
|
// Set environment
|
||
|
|
process.env.OPENCHAMBER_DIST_DIR = distPath;
|
||
|
|
process.env.OPENCHAMBER_PORT = String(port);
|
||
|
|
|
||
|
|
console.log(`Starting OpenChamber on port ${port}...`);
|
||
|
|
|
||
|
|
// Start server
|
||
|
|
if (typeof serverModule.startWebUiServer === 'function') {
|
||
|
|
await serverModule.startWebUiServer({ port, attachSignals: true, exitOnShutdown: true });
|
||
|
|
} else {
|
||
|
|
console.error('Error: startWebUiServer not found in server module');
|
||
|
|
process.exit(1);
|
||
|
|
}
|