task logs: migrate from filesystem to postgresql; refactor sidecars into submodules
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
+42
-1
@@ -56,6 +56,12 @@ const sidecarWebsocket = {
|
||||
return;
|
||||
}
|
||||
|
||||
// Handle queue commands from sidecars (e.g., email sidecar enqueuing jobs)
|
||||
if (typeof msg.type === 'string' && msg.type.startsWith('queue:') && msg.id) {
|
||||
handleSidecarQueueCommand(ws, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
const id = sidecarConnections.get(ws);
|
||||
if (id) {
|
||||
handleSidecarMessage(id, msg);
|
||||
@@ -74,6 +80,39 @@ const sidecarWebsocket = {
|
||||
drain() {},
|
||||
};
|
||||
|
||||
// Handle queue commands from sidecars (e.g., email sidecar enqueuing jobs)
|
||||
async function handleSidecarQueueCommand(ws: ServerWebSocket<WSData>, msg: Record<string, unknown>) {
|
||||
const id = msg.id as string;
|
||||
try {
|
||||
switch (msg.type) {
|
||||
case 'queue:enqueue': {
|
||||
const job = await queueEnqueue(msg.params as import('./servers/queue/types').EnqueueParams);
|
||||
ws.send(JSON.stringify({ type: 'queue:enqueued', id, job }));
|
||||
break;
|
||||
}
|
||||
case 'queue:cancel': {
|
||||
const job = await queueCancel(msg.jobId as string);
|
||||
ws.send(JSON.stringify({ type: 'queue:cancelled', id, job }));
|
||||
break;
|
||||
}
|
||||
case 'queue:list': {
|
||||
const jobs = await queueList();
|
||||
ws.send(JSON.stringify({ type: 'queue:list', id, jobs }));
|
||||
break;
|
||||
}
|
||||
case 'queue:get': {
|
||||
const job = await queueGet(msg.jobId as string);
|
||||
ws.send(JSON.stringify({ type: 'queue:get', id, job }));
|
||||
break;
|
||||
}
|
||||
default:
|
||||
ws.send(JSON.stringify({ type: 'queue:error', id, error: `Unknown queue command: ${msg.type}` }));
|
||||
}
|
||||
} catch (err) {
|
||||
ws.send(JSON.stringify({ type: 'queue:error', id, error: err instanceof Error ? err.message : String(err) }));
|
||||
}
|
||||
}
|
||||
|
||||
const handlers: Record<string, any> = {
|
||||
terminal: terminalWebsocket,
|
||||
pi: piWebsocket,
|
||||
@@ -274,7 +313,9 @@ try {
|
||||
console.error('[browser-relay] failed to start:', err instanceof Error ? err.message : err);
|
||||
}
|
||||
|
||||
// Sidecars connect to us via /api/sidecar/register — no init needed
|
||||
// Initialize queue engine in API server process
|
||||
import { initQueue, enqueueJob as queueEnqueue, cancelJob as queueCancel, listAllJobs as queueList, readJob as queueGet } from './servers/queue/init';
|
||||
initQueue().catch((err) => console.error('[queue] failed to initialize:', err));
|
||||
|
||||
// Ensure PulseAudio is running with virtual sink for cliamp audio streaming
|
||||
(async () => {
|
||||
|
||||
Reference in New Issue
Block a user