feat: migrate scripts to Bun runtime

- Updated shebangs in user-message-hook.js, worker-cli.js, and worker-service.cjs to use Bun instead of Node.
- Modified build-hooks.js to generate Bun-compatible shebangs in built scripts.
- Enhanced sync-marketplace.cjs to trigger a worker restart after syncing files via an HTTP request.
- Improved worker-cli.ts to exit with appropriate status codes after executing commands.
- Added build-worker-binary.js to create a Windows executable for the worker service using Bun's compile feature.
This commit is contained in:
Alex Newman
2025-12-11 14:59:44 -05:00
parent ded9671a82
commit 807d1d6100
15 changed files with 79 additions and 34 deletions
+3 -3
View File
@@ -111,7 +111,7 @@ async function buildHooks() {
'__DEFAULT_PACKAGE_VERSION__': `"${version}"`
},
banner: {
js: '#!/usr/bin/env node'
js: '#!/usr/bin/env bun'
}
});
@@ -136,7 +136,7 @@ async function buildHooks() {
'__DEFAULT_PACKAGE_VERSION__': `"${version}"`
},
banner: {
js: '#!/usr/bin/env node'
js: '#!/usr/bin/env bun'
}
});
@@ -209,7 +209,7 @@ async function buildHooks() {
'__DEFAULT_PACKAGE_VERSION__': `"${version}"`
},
banner: {
js: '#!/usr/bin/env node'
js: '#!/usr/bin/env bun'
}
});
+26
View File
@@ -0,0 +1,26 @@
#!/usr/bin/env node
/**
* Build Windows executable for claude-mem worker service
* Uses Bun's compile feature to create a standalone exe
*/
import { execSync } from 'child_process';
import fs from 'fs';
const version = JSON.parse(fs.readFileSync('package.json', 'utf-8')).version;
const outDir = 'dist/binaries';
fs.mkdirSync(outDir, { recursive: true });
console.log(`Building Windows exe v${version}...`);
try {
execSync(
`bun build --compile --minify --target=bun-windows-x64 ./src/services/worker-service.ts --outfile ${outDir}/worker-service-v${version}-win-x64.exe`,
{ stdio: 'inherit' }
);
console.log(`\nBuilt: ${outDir}/worker-service-v${version}-win-x64.exe`);
} catch (error) {
console.error('Failed to build Windows binary:', error.message);
process.exit(1);
}
+26
View File
@@ -82,6 +82,32 @@ try {
);
console.log('\x1b[32m%s\x1b[0m', 'Sync complete!');
// Trigger worker restart after file sync
console.log('\n🔄 Triggering worker restart...');
const http = require('http');
const req = http.request({
hostname: '127.0.0.1',
port: 37777,
path: '/api/admin/restart',
method: 'POST',
timeout: 2000
}, (res) => {
if (res.statusCode === 200) {
console.log('\x1b[32m%s\x1b[0m', '✓ Worker restart triggered');
} else {
console.log('\x1b[33m%s\x1b[0m', ` Worker restart returned status ${res.statusCode}`);
}
});
req.on('error', () => {
console.log('\x1b[33m%s\x1b[0m', ' Worker not running, will start on next hook');
});
req.on('timeout', () => {
req.destroy();
console.log('\x1b[33m%s\x1b[0m', ' Worker restart timed out');
});
req.end();
} catch (error) {
console.error('\x1b[31m%s\x1b[0m', 'Sync failed:', error.message);
process.exit(1);