gemini-code-flow
Version:
AI-powered development orchestration for Gemini CLI - adapted from Claude Code Flow by ruvnet
88 lines • 2.48 kB
JavaScript
;
/**
* Task Queue for Gemini Code Flow
* Adapted from Claude Code Flow by ruvnet
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.TaskQueue = void 0;
class TaskQueue {
tasks = new Map();
priorityQueue = [];
/**
* Add a task to the queue
*/
add(task) {
this.tasks.set(task.id, task);
this.priorityQueue.push(task);
this.sortByPriority();
}
/**
* Get the next available task
*/
async getNext() {
// Find the highest priority task with met dependencies
for (let i = 0; i < this.priorityQueue.length; i++) {
const task = this.priorityQueue[i];
if (task.status === 'pending' && this.areDependenciesMet(task)) {
// Remove from queue and return
this.priorityQueue.splice(i, 1);
task.status = 'running';
return task;
}
}
return null;
}
/**
* Get task by ID
*/
getById(id) {
return this.tasks.get(id);
}
/**
* Get queue size
*/
size() {
return this.priorityQueue.filter(t => t.status === 'pending').length;
}
/**
* Check if dependencies are met
*/
areDependenciesMet(task) {
return task.dependencies.every(depId => {
const depTask = this.tasks.get(depId);
return depTask && depTask.status === 'completed';
});
}
/**
* Sort queue by priority
*/
sortByPriority() {
const priorityOrder = { high: 3, medium: 2, low: 1 };
this.priorityQueue.sort((a, b) => {
return priorityOrder[b.priority] - priorityOrder[a.priority];
});
}
/**
* Get all tasks
*/
getAllTasks() {
return Array.from(this.tasks.values());
}
/**
* Remove completed tasks older than specified time
*/
cleanup(maxAge = 24 * 60 * 60 * 1000) {
const cutoff = Date.now() - maxAge;
for (const [id, task] of this.tasks.entries()) {
if (task.status === 'completed' && Date.now() - cutoff > maxAge) {
this.tasks.delete(id);
const index = this.priorityQueue.findIndex(t => t.id === id);
if (index !== -1) {
this.priorityQueue.splice(index, 1);
}
}
}
}
}
exports.TaskQueue = TaskQueue;
//# sourceMappingURL=task-queue.js.map