Research Chat: Web-Chatoberfläche für den Research-Agent (DeepSeek v4 Flash + Playwright, Docker/Podman)
This commit is contained in:
commit
a0243d494c
23 files changed
+2253
No files matched your search
@@ -0,0 +1,48 @@
|
||||
const { EventEmitter } = require('node:events');
|
||||
|
||||
const events = new EventEmitter();
|
||||
events.setMaxListeners(100);
|
||||
|
||||
let queue = [];
|
||||
let running = false;
|
||||
|
||||
/** Einen Job anmelden. Läuft sofort, wenn nichts anderes läuft, sonst wartet er. */
|
||||
function enqueue(job) {
|
||||
queue.push(job);
|
||||
events.emit('job-queued', job.sessionId);
|
||||
processNext();
|
||||
}
|
||||
|
||||
/** Job aus der Warteschlange holen und ausführen. */
|
||||
async function processNext() {
|
||||
if (running || queue.length === 0) return;
|
||||
const job = queue.shift();
|
||||
running = true;
|
||||
try {
|
||||
await job.run();
|
||||
} catch (e) {
|
||||
job.onError?.(e);
|
||||
} finally {
|
||||
running = false;
|
||||
events.emit('job-finished', job.sessionId);
|
||||
processNext();
|
||||
}
|
||||
}
|
||||
|
||||
function queuedBefore(sessionId) {
|
||||
return queue.findIndex((j) => j.sessionId === sessionId);
|
||||
}
|
||||
|
||||
function isRunning(sessionId) {
|
||||
return running;
|
||||
}
|
||||
|
||||
function cancelQueued(sessionId) {
|
||||
queue = queue.filter((j) => j.sessionId !== sessionId);
|
||||
}
|
||||
|
||||
function state() {
|
||||
return { running, queued: queue.map((j) => j.sessionId) };
|
||||
}
|
||||
|
||||
module.exports = { events, enqueue, queuedBefore, isRunning, cancelQueued, state };
|
||||
Reference in new issue
Block a user