MCPcopy Index your code
hub / github.com/Xyntopia/taskyon / taskWorker

Function taskWorker

src/modules/taskWorker.ts:334–446  ·  view source on GitHub ↗
(chatState: ChatStateType, db: TaskyonDatabase)

Source from the content-addressed store, hash-verified

332}
333
334async function taskWorker(chatState: ChatStateType, db: TaskyonDatabase) {
335 let cancelAllTasks = false;
336 let cancelImmediately = false;
337 let cancelCurrenTask = false;
338
339 const cancelCurrentTaskListener = () => {
340 cancelCurrenTask = true;
341 console.log('Received signal to cancel current task');
342 };
343
344 const cancelTasksListener = () => {
345 cancelAllTasks = true;
346 console.log('Received signal to cancel all queued tasks');
347 };
348
349 const cancelImmediatelyListener = () => {
350 cancelImmediately = true;
351 console.log('Received signal for immediate cancellation');
352 document.removeEventListener(
353 RUNNING_TASK_WORKER_CANCELLATION_EVENT,
354 cancelImmediatelyListener
355 );
356 throw new Error('Task Worker immediately cancelled');
357 };
358
359 document.addEventListener(
360 CURRENT_TASK_CANCELLATION_EVENT,
361 cancelCurrentTaskListener
362 );
363 document.addEventListener(TASK_CANCELLATION_EVENT, cancelTasksListener);
364 document.addEventListener(
365 RUNNING_TASK_WORKER_CANCELLATION_EVENT,
366 cancelImmediatelyListener
367 );
368
369 window.addEventListener('beforeunload', () => {
370 processTasksQueue.clear().forEach((t) => (t.state = 'Cancelled'));
371 });
372
373 console.log('entering task worker loop...');
374 while (!cancelImmediately) {
375 console.log('waiting for next task!');
376 let task = await processTasksQueue.pop();
377 if (!processTasksQueue.count()) {
378 cancelAllTasks = false;
379 cancelCurrenTask = false;
380 } else if (cancelAllTasks) {
381 task.state = 'Cancelled';
382 continue;
383 }
384 task.state = 'In Progress';
385 console.log('processing task:', task);
386 try {
387 if (task.role == 'user') {
388 task = await processChatTask(task, chatState, db);
389 task.state = 'Completed';
390 } else if (task.role == 'function') {
391 // in the case of 'FunctionCall' result, we run it twice:

Callers 1

runFunction · 0.85

Calls 7

processChatTaskFunction · 0.85
processFunctionTaskFunction · 0.85
clearMethod · 0.80
popMethod · 0.80
countMethod · 0.80
pushMethod · 0.80

Tested by

no test coverage detected