digital-tasks 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/queue.js ADDED
@@ -0,0 +1,347 @@
1
+ /**
2
+ * Task Queue - In-memory task queue implementation
3
+ *
4
+ * Provides task queuing, assignment, and execution management.
5
+ *
6
+ * @packageDocumentation
7
+ */
8
+ /**
9
+ * Priority values for sorting
10
+ */
11
+ const priorityOrder = {
12
+ critical: 5,
13
+ urgent: 4,
14
+ high: 3,
15
+ normal: 2,
16
+ low: 1,
17
+ };
18
+ /**
19
+ * In-memory task queue implementation
20
+ */
21
+ class InMemoryTaskQueue {
22
+ tasks = new Map();
23
+ options;
24
+ constructor(options = {}) {
25
+ this.options = {
26
+ name: 'default',
27
+ concurrency: 10,
28
+ defaultTimeout: 5 * 60 * 1000, // 5 minutes
29
+ persistent: false,
30
+ ...options,
31
+ };
32
+ }
33
+ async add(task) {
34
+ // Add created event
35
+ const event = {
36
+ id: `evt_${Date.now()}`,
37
+ type: 'created',
38
+ timestamp: new Date(),
39
+ message: `Task created: ${task.function.name}`,
40
+ };
41
+ const taskWithEvent = {
42
+ ...task,
43
+ events: [...(task.events || []), event],
44
+ };
45
+ this.tasks.set(task.id, taskWithEvent);
46
+ }
47
+ async get(id) {
48
+ return this.tasks.get(id);
49
+ }
50
+ async update(id, options) {
51
+ const task = this.tasks.get(id);
52
+ if (!task)
53
+ return undefined;
54
+ const events = [...(task.events || [])];
55
+ // Add event if provided
56
+ if (options.event) {
57
+ events.push({
58
+ ...options.event,
59
+ id: `evt_${Date.now()}`,
60
+ timestamp: new Date(),
61
+ });
62
+ }
63
+ // Add status change event
64
+ if (options.status && options.status !== task.status) {
65
+ events.push({
66
+ id: `evt_${Date.now()}_status`,
67
+ type: options.status === 'completed' ? 'completed' :
68
+ options.status === 'failed' ? 'failed' :
69
+ options.status === 'in_progress' ? 'started' :
70
+ options.status === 'blocked' ? 'blocked' : 'progress',
71
+ timestamp: new Date(),
72
+ message: `Status changed from ${task.status} to ${options.status}`,
73
+ });
74
+ }
75
+ // Build progress update if provided
76
+ let progressUpdate = task.progress;
77
+ if (options.progress) {
78
+ progressUpdate = {
79
+ percent: options.progress.percent ?? task.progress?.percent ?? 0,
80
+ step: options.progress.step ?? task.progress?.step,
81
+ totalSteps: options.progress.totalSteps ?? task.progress?.totalSteps,
82
+ currentStep: options.progress.currentStep ?? task.progress?.currentStep,
83
+ estimatedTimeRemaining: options.progress.estimatedTimeRemaining ?? task.progress?.estimatedTimeRemaining,
84
+ updatedAt: new Date(),
85
+ };
86
+ }
87
+ const updated = {
88
+ ...task,
89
+ ...(options.status && { status: options.status }),
90
+ ...(options.priority && { priority: options.priority }),
91
+ ...(options.assignment && { assignment: options.assignment }),
92
+ ...(progressUpdate && { progress: progressUpdate }),
93
+ ...(options.metadata && {
94
+ metadata: { ...task.metadata, ...options.metadata },
95
+ }),
96
+ events,
97
+ };
98
+ this.tasks.set(id, updated);
99
+ return updated;
100
+ }
101
+ async remove(id) {
102
+ return this.tasks.delete(id);
103
+ }
104
+ async query(options) {
105
+ let results = Array.from(this.tasks.values());
106
+ // Filter by status
107
+ if (options.status) {
108
+ const statuses = Array.isArray(options.status) ? options.status : [options.status];
109
+ results = results.filter((t) => statuses.includes(t.status));
110
+ }
111
+ // Filter by priority
112
+ if (options.priority) {
113
+ const priorities = Array.isArray(options.priority) ? options.priority : [options.priority];
114
+ results = results.filter((t) => priorities.includes(t.priority));
115
+ }
116
+ // Filter by function type
117
+ if (options.functionType) {
118
+ results = results.filter((t) => t.function.type === options.functionType);
119
+ }
120
+ // Filter by assigned worker
121
+ if (options.assignedTo) {
122
+ results = results.filter((t) => t.assignment?.worker.id === options.assignedTo);
123
+ }
124
+ // Filter by tags
125
+ if (options.tags && options.tags.length > 0) {
126
+ results = results.filter((t) => t.tags && options.tags.some((tag) => t.tags.includes(tag)));
127
+ }
128
+ // Filter by project
129
+ if (options.projectId) {
130
+ results = results.filter((t) => t.projectId === options.projectId);
131
+ }
132
+ // Filter by parent
133
+ if (options.parentId) {
134
+ results = results.filter((t) => t.parentId === options.parentId);
135
+ }
136
+ // Text search
137
+ if (options.search) {
138
+ const search = options.search.toLowerCase();
139
+ results = results.filter((t) => t.function.name.toLowerCase().includes(search) ||
140
+ t.function.description?.toLowerCase().includes(search));
141
+ }
142
+ // Sort
143
+ if (options.sortBy) {
144
+ results.sort((a, b) => {
145
+ let aVal;
146
+ let bVal;
147
+ switch (options.sortBy) {
148
+ case 'createdAt':
149
+ aVal = a.createdAt.getTime();
150
+ bVal = b.createdAt.getTime();
151
+ break;
152
+ case 'priority':
153
+ aVal = priorityOrder[a.priority];
154
+ bVal = priorityOrder[b.priority];
155
+ break;
156
+ case 'deadline':
157
+ aVal = a.deadline?.getTime() || Infinity;
158
+ bVal = b.deadline?.getTime() || Infinity;
159
+ break;
160
+ case 'status':
161
+ aVal = a.status.charCodeAt(0);
162
+ bVal = b.status.charCodeAt(0);
163
+ break;
164
+ default:
165
+ return 0;
166
+ }
167
+ return options.sortOrder === 'desc' ? bVal - aVal : aVal - bVal;
168
+ });
169
+ }
170
+ // Pagination
171
+ const offset = options.offset ?? 0;
172
+ const limit = options.limit ?? results.length;
173
+ results = results.slice(offset, offset + limit);
174
+ return results;
175
+ }
176
+ async getNextForWorker(worker) {
177
+ // Get queued tasks sorted by priority, then by deadline
178
+ const queuedTasks = await this.query({
179
+ status: ['pending', 'queued'],
180
+ sortBy: 'priority',
181
+ sortOrder: 'desc',
182
+ });
183
+ // Find first task the worker can handle
184
+ for (const task of queuedTasks) {
185
+ // Check if worker type is allowed
186
+ if (task.allowedWorkers && !task.allowedWorkers.includes(worker.type) && !task.allowedWorkers.includes('any')) {
187
+ continue;
188
+ }
189
+ // Note: Could check worker skills against task requirements in the future
190
+ // Check if task is scheduled for later
191
+ if (task.scheduledFor && task.scheduledFor > new Date()) {
192
+ continue;
193
+ }
194
+ // Check dependencies
195
+ if (task.dependencies && task.dependencies.length > 0) {
196
+ const unblockedDeps = task.dependencies.filter((d) => d.type === 'blocked_by' && !d.satisfied);
197
+ if (unblockedDeps.length > 0) {
198
+ continue;
199
+ }
200
+ }
201
+ return task;
202
+ }
203
+ return undefined;
204
+ }
205
+ async claim(taskId, worker) {
206
+ const task = await this.get(taskId);
207
+ if (!task)
208
+ return false;
209
+ // Check if already assigned
210
+ if (task.assignment) {
211
+ return false;
212
+ }
213
+ // Update task with assignment
214
+ await this.update(taskId, {
215
+ status: 'assigned',
216
+ assignment: {
217
+ worker,
218
+ assignedAt: new Date(),
219
+ },
220
+ event: {
221
+ type: 'assigned',
222
+ actor: worker,
223
+ message: `Assigned to ${worker.name || worker.id}`,
224
+ },
225
+ });
226
+ return true;
227
+ }
228
+ async complete(taskId, output) {
229
+ const task = await this.get(taskId);
230
+ if (!task)
231
+ return;
232
+ await this.update(taskId, {
233
+ status: 'completed',
234
+ event: {
235
+ type: 'completed',
236
+ actor: task.assignment?.worker,
237
+ message: 'Task completed successfully',
238
+ data: { output },
239
+ },
240
+ });
241
+ // Update task output separately since it's not in UpdateTaskOptions
242
+ const updated = await this.get(taskId);
243
+ if (updated) {
244
+ this.tasks.set(taskId, {
245
+ ...updated,
246
+ output: {
247
+ value: output,
248
+ producedAt: new Date(),
249
+ },
250
+ completedAt: new Date(),
251
+ });
252
+ }
253
+ // Satisfy dependencies in other tasks
254
+ for (const [, otherTask] of this.tasks) {
255
+ if (otherTask.dependencies) {
256
+ const hasDep = otherTask.dependencies.find((d) => d.taskId === taskId && d.type === 'blocked_by');
257
+ if (hasDep) {
258
+ const updatedDeps = otherTask.dependencies.map((d) => d.taskId === taskId ? { ...d, satisfied: true } : d);
259
+ this.tasks.set(otherTask.id, {
260
+ ...otherTask,
261
+ dependencies: updatedDeps,
262
+ });
263
+ // Unblock if all dependencies satisfied
264
+ const allSatisfied = updatedDeps.filter((d) => d.type === 'blocked_by').every((d) => d.satisfied);
265
+ if (allSatisfied && otherTask.status === 'blocked') {
266
+ await this.update(otherTask.id, {
267
+ status: 'queued',
268
+ event: {
269
+ type: 'unblocked',
270
+ message: 'All dependencies satisfied',
271
+ },
272
+ });
273
+ }
274
+ }
275
+ }
276
+ }
277
+ }
278
+ async fail(taskId, error) {
279
+ const task = await this.get(taskId);
280
+ if (!task)
281
+ return;
282
+ await this.update(taskId, {
283
+ status: 'failed',
284
+ event: {
285
+ type: 'failed',
286
+ actor: task.assignment?.worker,
287
+ message: `Task failed: ${error}`,
288
+ data: { error },
289
+ },
290
+ });
291
+ }
292
+ async stats() {
293
+ const tasks = Array.from(this.tasks.values());
294
+ const byStatus = {
295
+ pending: 0,
296
+ queued: 0,
297
+ assigned: 0,
298
+ in_progress: 0,
299
+ blocked: 0,
300
+ review: 0,
301
+ completed: 0,
302
+ failed: 0,
303
+ cancelled: 0,
304
+ };
305
+ const byPriority = {
306
+ low: 0,
307
+ normal: 0,
308
+ high: 0,
309
+ urgent: 0,
310
+ critical: 0,
311
+ };
312
+ let totalWaitTime = 0;
313
+ let waitTimeCount = 0;
314
+ let totalCompletionTime = 0;
315
+ let completionTimeCount = 0;
316
+ for (const task of tasks) {
317
+ byStatus[task.status]++;
318
+ byPriority[task.priority]++;
319
+ if (task.startedAt && task.createdAt) {
320
+ totalWaitTime += task.startedAt.getTime() - task.createdAt.getTime();
321
+ waitTimeCount++;
322
+ }
323
+ if (task.completedAt && task.startedAt) {
324
+ totalCompletionTime += task.completedAt.getTime() - task.startedAt.getTime();
325
+ completionTimeCount++;
326
+ }
327
+ }
328
+ return {
329
+ total: tasks.length,
330
+ byStatus,
331
+ byPriority,
332
+ avgWaitTime: waitTimeCount > 0 ? totalWaitTime / waitTimeCount : undefined,
333
+ avgCompletionTime: completionTimeCount > 0 ? totalCompletionTime / completionTimeCount : undefined,
334
+ };
335
+ }
336
+ }
337
+ /**
338
+ * Global task queue instance
339
+ */
340
+ export const taskQueue = new InMemoryTaskQueue();
341
+ /**
342
+ * Create a new task queue instance
343
+ */
344
+ export function createTaskQueue(options) {
345
+ return new InMemoryTaskQueue(options);
346
+ }
347
+ //# sourceMappingURL=queue.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queue.js","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"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"}
package/dist/task.d.ts ADDED
@@ -0,0 +1,69 @@
1
+ /**
2
+ * Task - Core task creation and management functions
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import type { Task, AnyTask, CreateTaskOptions, WorkerRef, TaskResult } from './types.js';
7
+ /**
8
+ * Create a new task from a function definition
9
+ *
10
+ * @example
11
+ * ```ts
12
+ * const task = await createTask({
13
+ * function: {
14
+ * type: 'generative',
15
+ * name: 'summarize',
16
+ * args: { text: 'The text to summarize' },
17
+ * output: 'string',
18
+ * promptTemplate: 'Summarize: {{text}}',
19
+ * },
20
+ * input: { text: 'Long article content...' },
21
+ * priority: 'high',
22
+ * })
23
+ * ```
24
+ */
25
+ export declare function createTask<TInput = unknown, TOutput = unknown>(options: CreateTaskOptions<TInput, TOutput>): Promise<Task<TInput, TOutput>>;
26
+ /**
27
+ * Get a task by ID
28
+ */
29
+ export declare function getTask(id: string): Promise<AnyTask | undefined>;
30
+ /**
31
+ * Start working on a task
32
+ */
33
+ export declare function startTask(taskId: string, worker: WorkerRef): Promise<AnyTask | undefined>;
34
+ /**
35
+ * Update task progress
36
+ */
37
+ export declare function updateProgress(taskId: string, percent: number, step?: string): Promise<AnyTask | undefined>;
38
+ /**
39
+ * Complete a task with output
40
+ */
41
+ export declare function completeTask<TOutput>(taskId: string, output: TOutput): Promise<TaskResult<TOutput>>;
42
+ /**
43
+ * Fail a task with error
44
+ */
45
+ export declare function failTask(taskId: string, error: string | Error): Promise<TaskResult>;
46
+ /**
47
+ * Cancel a task
48
+ */
49
+ export declare function cancelTask(taskId: string, reason?: string): Promise<boolean>;
50
+ /**
51
+ * Add a comment to a task
52
+ */
53
+ export declare function addComment(taskId: string, comment: string, author?: WorkerRef): Promise<AnyTask | undefined>;
54
+ /**
55
+ * Create a subtask
56
+ */
57
+ export declare function createSubtask<TInput = unknown, TOutput = unknown>(parentTaskId: string, options: Omit<CreateTaskOptions<TInput, TOutput>, 'parentId'>): Promise<Task<TInput, TOutput>>;
58
+ /**
59
+ * Get subtasks of a task
60
+ */
61
+ export declare function getSubtasks(parentTaskId: string): Promise<AnyTask[]>;
62
+ /**
63
+ * Wait for a task to complete
64
+ */
65
+ export declare function waitForTask(taskId: string, options?: {
66
+ timeout?: number;
67
+ pollInterval?: number;
68
+ }): Promise<TaskResult>;
69
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,IAAI,EACJ,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,UAAU,EAEX,MAAM,YAAY,CAAA;AAUnB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,UAAU,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EAClE,OAAO,EAAE,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,GAC1C,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAoEhC;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAEtE;AAED;;GAEG;AACH,wBAAsB,SAAS,CAC7B,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,GAChB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAmB9B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAa9B;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EACxC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,OAAO,GACd,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CA4B9B;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,GAAG,KAAK,GACpB,OAAO,CAAC,UAAU,CAAC,CAkCrB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CAalB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,SAAS,GACjB,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC,CAQ9B;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,MAAM,GAAG,OAAO,EAAE,OAAO,GAAG,OAAO,EACrE,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,CAAC,GAC5D,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAKhC;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAE1E;AAED;;GAEG;AACH,wBAAsB,WAAW,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,OAAO,CAAC,UAAU,CAAC,CA6ErB"}