digital-tasks 2.3.0 → 2.4.0

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/task.js ADDED
@@ -0,0 +1,383 @@
1
+ /**
2
+ * Task - Core task creation and management functions
3
+ *
4
+ * @packageDocumentation
5
+ */
6
+ import { taskQueue } from './queue.js';
7
+ /**
8
+ * Generate a unique task ID
9
+ */
10
+ function generateTaskId() {
11
+ return `task_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
12
+ }
13
+ /**
14
+ * Create a new task from a function definition
15
+ *
16
+ * @example
17
+ * ```ts
18
+ * const task = await createTask({
19
+ * tool: {
20
+ * type: 'generative',
21
+ * name: 'summarize',
22
+ * args: { text: 'The text to summarize' },
23
+ * output: 'string',
24
+ * promptTemplate: 'Summarize: {{text}}',
25
+ * },
26
+ * input: { text: 'Long article content...' },
27
+ * priority: 'high',
28
+ * })
29
+ * ```
30
+ */
31
+ export async function createTask(options) {
32
+ const now = new Date();
33
+ // Resolve the underlying Tool from either `tool` (preferred) or
34
+ // the legacy `function` alias. Exactly one path is required; throw
35
+ // a clear error if neither is set so callers see this at runtime.
36
+ const tool = options.tool ?? options.function;
37
+ if (!tool) {
38
+ throw new Error("createTask requires a 'tool' (preferred) or legacy 'function' option");
39
+ }
40
+ // Convert string dependencies to TaskDependency array
41
+ let dependencies;
42
+ if (options.dependencies && options.dependencies.length > 0) {
43
+ dependencies = options.dependencies.map((taskId) => ({
44
+ type: 'blocked_by',
45
+ taskId,
46
+ satisfied: false,
47
+ }));
48
+ }
49
+ // Determine allowed workers from the Tool's function type
50
+ let allowedWorkers = options.allowedWorkers;
51
+ if (!allowedWorkers) {
52
+ const funcType = tool.type;
53
+ if (funcType === 'human') {
54
+ allowedWorkers = ['human'];
55
+ }
56
+ else if (funcType === 'agentic') {
57
+ allowedWorkers = ['agent'];
58
+ }
59
+ else {
60
+ allowedWorkers = ['any'];
61
+ }
62
+ }
63
+ const task = {
64
+ id: generateTaskId(),
65
+ $type: 'Task',
66
+ // Action supertype: every Task is an Action of some Verb. Default
67
+ // the verb to the underlying Tool's name when not supplied.
68
+ verb: tool.name,
69
+ // Tool is the canonical field (CONTEXT.md). The legacy `function`
70
+ // alias is populated alongside for the duration of the deprecation
71
+ // window so older readers continue to work.
72
+ tool,
73
+ function: tool,
74
+ status: options.scheduledFor ? 'pending' : 'queued',
75
+ priority: options.priority || 'normal',
76
+ allowedWorkers,
77
+ createdAt: now,
78
+ events: [],
79
+ };
80
+ if (options.input !== undefined) {
81
+ task.input = options.input;
82
+ }
83
+ if (dependencies !== undefined) {
84
+ task.dependencies = dependencies;
85
+ }
86
+ if (options.scheduledFor !== undefined) {
87
+ task.scheduledFor = options.scheduledFor;
88
+ }
89
+ if (options.deadline !== undefined) {
90
+ task.deadline = options.deadline;
91
+ }
92
+ if (options.timeout !== undefined) {
93
+ task.timeout = options.timeout;
94
+ }
95
+ if (options.tags !== undefined) {
96
+ task.tags = options.tags;
97
+ }
98
+ if (options.parentId !== undefined) {
99
+ task.parentId = options.parentId;
100
+ }
101
+ if (options.projectId !== undefined) {
102
+ task.projectId = options.projectId;
103
+ }
104
+ if (options.metadata !== undefined) {
105
+ task.metadata = options.metadata;
106
+ }
107
+ // Issue-shaped fields (SVO co-design)
108
+ if (options.title !== undefined) {
109
+ task.title = options.title;
110
+ }
111
+ if (options.body !== undefined) {
112
+ task.body = options.body;
113
+ }
114
+ if (options.labels !== undefined) {
115
+ task.labels = options.labels;
116
+ }
117
+ if (options.project !== undefined) {
118
+ task.project = options.project;
119
+ }
120
+ if (options.assignees !== undefined) {
121
+ task.assignees = options.assignees;
122
+ }
123
+ // Auto-assign if specified (single primary worker takes precedence)
124
+ const primaryAssignee = options.assignTo ?? options.assignees?.[0];
125
+ if (primaryAssignee) {
126
+ task.assignment = {
127
+ worker: primaryAssignee,
128
+ assignedAt: now,
129
+ };
130
+ task.status = 'assigned';
131
+ }
132
+ // Check if blocked by dependencies
133
+ if (dependencies && dependencies.length > 0) {
134
+ const hasPendingDeps = dependencies.some((d) => d.type === 'blocked_by' && !d.satisfied);
135
+ if (hasPendingDeps) {
136
+ task.status = 'blocked';
137
+ }
138
+ }
139
+ // Add to queue
140
+ await taskQueue.add(task);
141
+ return task;
142
+ }
143
+ /**
144
+ * Get a task by ID
145
+ */
146
+ export async function getTask(id) {
147
+ return taskQueue.get(id);
148
+ }
149
+ /**
150
+ * Start working on a task
151
+ */
152
+ export async function startTask(taskId, worker) {
153
+ const task = await taskQueue.get(taskId);
154
+ if (!task)
155
+ return undefined;
156
+ // Claim the task if not already assigned
157
+ if (!task.assignment) {
158
+ const claimed = await taskQueue.claim(taskId, worker);
159
+ if (!claimed)
160
+ return undefined;
161
+ }
162
+ // Update status to in_progress
163
+ return taskQueue.update(taskId, {
164
+ status: 'in_progress',
165
+ event: {
166
+ type: 'started',
167
+ actor: worker,
168
+ message: `Started by ${worker.name || worker.id}`,
169
+ },
170
+ });
171
+ }
172
+ /**
173
+ * Update task progress
174
+ */
175
+ export async function updateProgress(taskId, percent, step) {
176
+ const progressUpdate = {
177
+ percent,
178
+ updatedAt: new Date(),
179
+ };
180
+ if (step !== undefined) {
181
+ progressUpdate.step = step;
182
+ }
183
+ return taskQueue.update(taskId, {
184
+ progress: progressUpdate,
185
+ event: {
186
+ type: 'progress',
187
+ message: step || `Progress: ${percent}%`,
188
+ data: { percent, step },
189
+ },
190
+ });
191
+ }
192
+ /**
193
+ * Complete a task with output
194
+ */
195
+ export async function completeTask(taskId, output) {
196
+ const task = await taskQueue.get(taskId);
197
+ if (!task) {
198
+ return {
199
+ taskId,
200
+ success: false,
201
+ error: {
202
+ code: 'TASK_NOT_FOUND',
203
+ message: `Task "${taskId}" not found`,
204
+ },
205
+ };
206
+ }
207
+ await taskQueue.complete(taskId, output);
208
+ const metadata = {
209
+ duration: task.startedAt ? Date.now() - task.startedAt.getTime() : 0,
210
+ startedAt: task.startedAt || new Date(),
211
+ completedAt: new Date(),
212
+ };
213
+ if (task.assignment?.worker !== undefined) {
214
+ metadata.worker = task.assignment.worker;
215
+ }
216
+ return {
217
+ taskId,
218
+ success: true,
219
+ output,
220
+ metadata,
221
+ };
222
+ }
223
+ /**
224
+ * Fail a task with error
225
+ */
226
+ export async function failTask(taskId, error) {
227
+ const task = await taskQueue.get(taskId);
228
+ if (!task) {
229
+ return {
230
+ taskId,
231
+ success: false,
232
+ error: {
233
+ code: 'TASK_NOT_FOUND',
234
+ message: `Task "${taskId}" not found`,
235
+ },
236
+ };
237
+ }
238
+ const errorMessage = error instanceof Error ? error.message : error;
239
+ await taskQueue.fail(taskId, errorMessage);
240
+ const failMetadata = {
241
+ duration: task.startedAt ? Date.now() - task.startedAt.getTime() : 0,
242
+ startedAt: task.startedAt || new Date(),
243
+ completedAt: new Date(),
244
+ };
245
+ if (task.assignment?.worker !== undefined) {
246
+ failMetadata.worker = task.assignment.worker;
247
+ }
248
+ return {
249
+ taskId,
250
+ success: false,
251
+ error: {
252
+ code: 'TASK_FAILED',
253
+ message: errorMessage,
254
+ details: error instanceof Error ? { stack: error.stack } : undefined,
255
+ },
256
+ metadata: failMetadata,
257
+ };
258
+ }
259
+ /**
260
+ * Cancel a task
261
+ */
262
+ export async function cancelTask(taskId, reason) {
263
+ const task = await taskQueue.get(taskId);
264
+ if (!task)
265
+ return false;
266
+ await taskQueue.update(taskId, {
267
+ status: 'cancelled',
268
+ event: {
269
+ type: 'cancelled',
270
+ message: reason || 'Task cancelled',
271
+ },
272
+ });
273
+ return true;
274
+ }
275
+ /**
276
+ * Add a comment to a task
277
+ */
278
+ export async function addComment(taskId, comment, author) {
279
+ const event = {
280
+ type: 'comment',
281
+ message: comment,
282
+ };
283
+ if (author !== undefined) {
284
+ event.actor = author;
285
+ }
286
+ return taskQueue.update(taskId, { event });
287
+ }
288
+ /**
289
+ * Create a subtask
290
+ */
291
+ export async function createSubtask(parentTaskId, options) {
292
+ return createTask({
293
+ ...options,
294
+ parentId: parentTaskId,
295
+ });
296
+ }
297
+ /**
298
+ * Get subtasks of a task
299
+ */
300
+ export async function getSubtasks(parentTaskId) {
301
+ return taskQueue.query({ parentId: parentTaskId });
302
+ }
303
+ /**
304
+ * Wait for a task to complete
305
+ */
306
+ export async function waitForTask(taskId, options) {
307
+ const timeout = options?.timeout ?? 5 * 60 * 1000; // 5 minutes
308
+ const pollInterval = options?.pollInterval ?? 1000; // 1 second
309
+ const startTime = Date.now();
310
+ while (Date.now() - startTime < timeout) {
311
+ const task = await taskQueue.get(taskId);
312
+ if (!task) {
313
+ return {
314
+ taskId,
315
+ success: false,
316
+ error: {
317
+ code: 'TASK_NOT_FOUND',
318
+ message: `Task "${taskId}" not found`,
319
+ },
320
+ };
321
+ }
322
+ if (task.status === 'completed') {
323
+ const completedMeta = {
324
+ duration: task.completedAt && task.startedAt
325
+ ? task.completedAt.getTime() - task.startedAt.getTime()
326
+ : 0,
327
+ startedAt: task.startedAt || task.createdAt,
328
+ completedAt: task.completedAt || new Date(),
329
+ };
330
+ if (task.assignment?.worker !== undefined) {
331
+ completedMeta.worker = task.assignment.worker;
332
+ }
333
+ return {
334
+ taskId,
335
+ success: true,
336
+ output: task.output,
337
+ metadata: completedMeta,
338
+ };
339
+ }
340
+ if (task.status === 'failed') {
341
+ const failedMeta = {
342
+ duration: task.completedAt && task.startedAt
343
+ ? task.completedAt.getTime() - task.startedAt.getTime()
344
+ : 0,
345
+ startedAt: task.startedAt || task.createdAt,
346
+ completedAt: task.completedAt || new Date(),
347
+ };
348
+ if (task.assignment?.worker !== undefined) {
349
+ failedMeta.worker = task.assignment.worker;
350
+ }
351
+ return {
352
+ taskId,
353
+ success: false,
354
+ error: {
355
+ code: 'TASK_FAILED',
356
+ message: task.error || 'Task failed',
357
+ },
358
+ metadata: failedMeta,
359
+ };
360
+ }
361
+ if (task.status === 'cancelled') {
362
+ return {
363
+ taskId,
364
+ success: false,
365
+ error: {
366
+ code: 'TASK_CANCELLED',
367
+ message: 'Task was cancelled',
368
+ },
369
+ };
370
+ }
371
+ // Wait before polling again
372
+ await new Promise((resolve) => setTimeout(resolve, pollInterval));
373
+ }
374
+ return {
375
+ taskId,
376
+ success: false,
377
+ error: {
378
+ code: 'TIMEOUT',
379
+ message: `Task did not complete within ${timeout}ms`,
380
+ },
381
+ };
382
+ }
383
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"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"}