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/.turbo/turbo-build.log +4 -0
- package/CHANGELOG.md +9 -0
- package/dist/client.d.ts +202 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +85 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +74 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/markdown.d.ts +112 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +531 -0
- package/dist/markdown.js.map +1 -0
- package/dist/project.d.ts +259 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +415 -0
- package/dist/project.js.map +1 -0
- package/dist/queue.d.ts +17 -0
- package/dist/queue.d.ts.map +1 -0
- package/dist/queue.js +386 -0
- package/dist/queue.js.map +1 -0
- package/dist/task.d.ts +69 -0
- package/dist/task.d.ts.map +1 -0
- package/dist/task.js +383 -0
- package/dist/task.js.map +1 -0
- package/dist/types.d.ts +405 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +23 -0
- package/dist/types.js.map +1 -0
- package/dist/worker.d.ts +264 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +656 -0
- package/dist/worker.js.map +1 -0
- package/package.json +4 -4
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
|
package/dist/task.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../src/task.ts"],"names":[],"mappings":"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"}
|