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/.turbo/turbo-build.log +5 -0
- package/CHANGELOG.md +10 -0
- package/dist/function-task.d.ts +319 -0
- package/dist/function-task.d.ts.map +1 -0
- package/dist/function-task.js +286 -0
- package/dist/function-task.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -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 +510 -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 +397 -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 +347 -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 +321 -0
- package/dist/task.js.map +1 -0
- package/dist/types.d.ts +292 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +15 -0
- package/dist/types.js.map +1 -0
- package/package.json +41 -0
- package/src/index.ts +161 -0
- package/src/markdown.ts +622 -0
- package/src/project.ts +571 -0
- package/src/queue.ts +424 -0
- package/src/task.ts +389 -0
- package/src/types.ts +403 -0
- package/test/markdown.test.ts +550 -0
- package/test/project.test.ts +562 -0
- package/test/queue.test.ts +482 -0
- package/test/task.test.ts +464 -0
- package/tsconfig.json +20 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Management - Task workflows, dependencies, and execution modes
|
|
3
|
+
*
|
|
4
|
+
* Provides project management primitives for organizing tasks:
|
|
5
|
+
* - Projects/TaskLists as containers
|
|
6
|
+
* - Parallel vs Sequential execution
|
|
7
|
+
* - Dependencies and dependants (bidirectional)
|
|
8
|
+
* - Subtasks with inheritance
|
|
9
|
+
*
|
|
10
|
+
* ## Execution Modes
|
|
11
|
+
*
|
|
12
|
+
* Tasks can be organized for parallel or sequential execution:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Parallel - all can run simultaneously
|
|
16
|
+
* parallel(
|
|
17
|
+
* task('Design UI'),
|
|
18
|
+
* task('Write API specs'),
|
|
19
|
+
* task('Set up infrastructure'),
|
|
20
|
+
* )
|
|
21
|
+
*
|
|
22
|
+
* // Sequential - must run in order
|
|
23
|
+
* sequential(
|
|
24
|
+
* task('Implement backend'),
|
|
25
|
+
* task('Implement frontend'),
|
|
26
|
+
* task('Integration testing'),
|
|
27
|
+
* )
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* ## Markdown Syntax
|
|
31
|
+
*
|
|
32
|
+
* Tasks map to markdown checklists:
|
|
33
|
+
* - `- [ ]` = Parallel/unordered tasks
|
|
34
|
+
* - `1. [ ]` = Sequential/ordered tasks
|
|
35
|
+
*
|
|
36
|
+
* @packageDocumentation
|
|
37
|
+
*/
|
|
38
|
+
import type { AnyTask, TaskPriority, WorkerRef } from './types.js';
|
|
39
|
+
/**
|
|
40
|
+
* How tasks should be executed relative to each other
|
|
41
|
+
*/
|
|
42
|
+
export type ExecutionMode = 'parallel' | 'sequential';
|
|
43
|
+
/**
|
|
44
|
+
* Task node in a workflow - can be a single task or a group
|
|
45
|
+
*/
|
|
46
|
+
export type TaskNode = TaskDefinition | ParallelGroup | SequentialGroup;
|
|
47
|
+
/**
|
|
48
|
+
* Function type for the DSL
|
|
49
|
+
*/
|
|
50
|
+
export type FunctionType = 'code' | 'generative' | 'agentic' | 'human';
|
|
51
|
+
/**
|
|
52
|
+
* A single task definition
|
|
53
|
+
*/
|
|
54
|
+
export interface TaskDefinition {
|
|
55
|
+
__type: 'task';
|
|
56
|
+
title: string;
|
|
57
|
+
description?: string;
|
|
58
|
+
functionType?: FunctionType;
|
|
59
|
+
priority?: TaskPriority;
|
|
60
|
+
assignTo?: WorkerRef;
|
|
61
|
+
tags?: string[];
|
|
62
|
+
subtasks?: TaskNode[];
|
|
63
|
+
metadata?: Record<string, unknown>;
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A group of tasks that can run in parallel
|
|
67
|
+
*/
|
|
68
|
+
export interface ParallelGroup {
|
|
69
|
+
__type: 'parallel';
|
|
70
|
+
tasks: TaskNode[];
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* A group of tasks that must run sequentially
|
|
74
|
+
*/
|
|
75
|
+
export interface SequentialGroup {
|
|
76
|
+
__type: 'sequential';
|
|
77
|
+
tasks: TaskNode[];
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Project status
|
|
81
|
+
*/
|
|
82
|
+
export type ProjectStatus = 'draft' | 'active' | 'paused' | 'completed' | 'cancelled';
|
|
83
|
+
/**
|
|
84
|
+
* Project definition
|
|
85
|
+
*/
|
|
86
|
+
export interface Project {
|
|
87
|
+
/** Unique project ID */
|
|
88
|
+
id: string;
|
|
89
|
+
/** Project name */
|
|
90
|
+
name: string;
|
|
91
|
+
/** Project description */
|
|
92
|
+
description?: string;
|
|
93
|
+
/** Project status */
|
|
94
|
+
status: ProjectStatus;
|
|
95
|
+
/** Root task nodes */
|
|
96
|
+
tasks: TaskNode[];
|
|
97
|
+
/** Default execution mode for top-level tasks */
|
|
98
|
+
defaultMode?: ExecutionMode;
|
|
99
|
+
/** Project owner */
|
|
100
|
+
owner?: WorkerRef;
|
|
101
|
+
/** Project tags */
|
|
102
|
+
tags?: string[];
|
|
103
|
+
/** Created timestamp */
|
|
104
|
+
createdAt: Date;
|
|
105
|
+
/** Updated timestamp */
|
|
106
|
+
updatedAt: Date;
|
|
107
|
+
/** Project metadata */
|
|
108
|
+
metadata?: Record<string, unknown>;
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Options for creating a project
|
|
112
|
+
*/
|
|
113
|
+
export interface CreateProjectOptions {
|
|
114
|
+
name: string;
|
|
115
|
+
description?: string;
|
|
116
|
+
tasks?: TaskNode[];
|
|
117
|
+
defaultMode?: ExecutionMode;
|
|
118
|
+
owner?: WorkerRef;
|
|
119
|
+
tags?: string[];
|
|
120
|
+
metadata?: Record<string, unknown>;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Create a task definition
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```ts
|
|
127
|
+
* task('Implement feature')
|
|
128
|
+
* task('Review PR', { priority: 'high', assignTo: { type: 'human', id: 'user_123' } })
|
|
129
|
+
* task('Parent task', {
|
|
130
|
+
* subtasks: [
|
|
131
|
+
* task('Subtask 1'),
|
|
132
|
+
* task('Subtask 2'),
|
|
133
|
+
* ]
|
|
134
|
+
* })
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
export declare function task(title: string, options?: Partial<Omit<TaskDefinition, '__type' | 'title'>>): TaskDefinition;
|
|
138
|
+
/**
|
|
139
|
+
* Create a group of tasks that can run in parallel
|
|
140
|
+
*
|
|
141
|
+
* @example
|
|
142
|
+
* ```ts
|
|
143
|
+
* parallel(
|
|
144
|
+
* task('Design UI'),
|
|
145
|
+
* task('Write API specs'),
|
|
146
|
+
* task('Set up infrastructure'),
|
|
147
|
+
* )
|
|
148
|
+
* ```
|
|
149
|
+
*/
|
|
150
|
+
export declare function parallel(...tasks: TaskNode[]): ParallelGroup;
|
|
151
|
+
/**
|
|
152
|
+
* Create a group of tasks that must run sequentially
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```ts
|
|
156
|
+
* sequential(
|
|
157
|
+
* task('Implement backend'),
|
|
158
|
+
* task('Implement frontend'),
|
|
159
|
+
* task('Integration testing'),
|
|
160
|
+
* )
|
|
161
|
+
* ```
|
|
162
|
+
*/
|
|
163
|
+
export declare function sequential(...tasks: TaskNode[]): SequentialGroup;
|
|
164
|
+
/**
|
|
165
|
+
* Create a new project
|
|
166
|
+
*
|
|
167
|
+
* @example
|
|
168
|
+
* ```ts
|
|
169
|
+
* const project = createProject({
|
|
170
|
+
* name: 'Launch New Feature',
|
|
171
|
+
* description: 'Ship the new dashboard feature',
|
|
172
|
+
* tasks: [
|
|
173
|
+
* parallel(
|
|
174
|
+
* task('Design mockups'),
|
|
175
|
+
* task('Write technical spec'),
|
|
176
|
+
* ),
|
|
177
|
+
* sequential(
|
|
178
|
+
* task('Implement backend API'),
|
|
179
|
+
* task('Implement frontend UI'),
|
|
180
|
+
* task('Write tests'),
|
|
181
|
+
* task('Deploy to staging'),
|
|
182
|
+
* ),
|
|
183
|
+
* task('QA testing'),
|
|
184
|
+
* task('Deploy to production'),
|
|
185
|
+
* ],
|
|
186
|
+
* })
|
|
187
|
+
* ```
|
|
188
|
+
*/
|
|
189
|
+
export declare function createProject(options: CreateProjectOptions): Project;
|
|
190
|
+
/**
|
|
191
|
+
* Workflow builder for fluent task definition
|
|
192
|
+
*
|
|
193
|
+
* @example
|
|
194
|
+
* ```ts
|
|
195
|
+
* const workflow = workflow('Feature Launch')
|
|
196
|
+
* .parallel(
|
|
197
|
+
* task('Design'),
|
|
198
|
+
* task('Spec'),
|
|
199
|
+
* )
|
|
200
|
+
* .then(task('Implement'))
|
|
201
|
+
* .then(task('Test'))
|
|
202
|
+
* .parallel(
|
|
203
|
+
* task('Deploy staging'),
|
|
204
|
+
* task('Update docs'),
|
|
205
|
+
* )
|
|
206
|
+
* .then(task('Deploy production'))
|
|
207
|
+
* .build()
|
|
208
|
+
* ```
|
|
209
|
+
*/
|
|
210
|
+
export declare function workflow(name: string, description?: string): {
|
|
211
|
+
/**
|
|
212
|
+
* Add tasks that can run in parallel
|
|
213
|
+
*/
|
|
214
|
+
parallel(...nodes: TaskNode[]): /*elided*/ any;
|
|
215
|
+
/**
|
|
216
|
+
* Add tasks that must run sequentially
|
|
217
|
+
*/
|
|
218
|
+
sequential(...nodes: TaskNode[]): /*elided*/ any;
|
|
219
|
+
/**
|
|
220
|
+
* Add a single task (sequential with previous)
|
|
221
|
+
*/
|
|
222
|
+
then(...nodes: TaskNode[]): /*elided*/ any;
|
|
223
|
+
/**
|
|
224
|
+
* Add a task (alias for then)
|
|
225
|
+
*/
|
|
226
|
+
task(title: string, options?: Partial<Omit<TaskDefinition, "__type" | "title">>): /*elided*/ any;
|
|
227
|
+
/**
|
|
228
|
+
* Build the project
|
|
229
|
+
*/
|
|
230
|
+
build(options?: Partial<Omit<CreateProjectOptions, "name" | "tasks">>): Project;
|
|
231
|
+
};
|
|
232
|
+
/**
|
|
233
|
+
* Flatten task nodes into actual Task objects with dependencies
|
|
234
|
+
*/
|
|
235
|
+
export declare function materializeProject(project: Project): Promise<{
|
|
236
|
+
project: Project;
|
|
237
|
+
tasks: AnyTask[];
|
|
238
|
+
}>;
|
|
239
|
+
/**
|
|
240
|
+
* Get all tasks that depend on a given task (dependants)
|
|
241
|
+
*/
|
|
242
|
+
export declare function getDependants(taskId: string, allTasks: AnyTask[]): AnyTask[];
|
|
243
|
+
/**
|
|
244
|
+
* Get all tasks that a given task depends on (dependencies)
|
|
245
|
+
*/
|
|
246
|
+
export declare function getDependencies(task: AnyTask, allTasks: AnyTask[]): AnyTask[];
|
|
247
|
+
/**
|
|
248
|
+
* Get tasks that are ready to execute (no unsatisfied dependencies)
|
|
249
|
+
*/
|
|
250
|
+
export declare function getReadyTasks(allTasks: AnyTask[]): AnyTask[];
|
|
251
|
+
/**
|
|
252
|
+
* Check if a task graph has cycles
|
|
253
|
+
*/
|
|
254
|
+
export declare function hasCycles(allTasks: AnyTask[]): boolean;
|
|
255
|
+
/**
|
|
256
|
+
* Sort tasks by their dependencies (tasks with no dependencies first)
|
|
257
|
+
*/
|
|
258
|
+
export declare function sortTasks(allTasks: AnyTask[]): AnyTask[];
|
|
259
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
package/dist/project.js
ADDED
|
@@ -0,0 +1,397 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project Management - Task workflows, dependencies, and execution modes
|
|
3
|
+
*
|
|
4
|
+
* Provides project management primitives for organizing tasks:
|
|
5
|
+
* - Projects/TaskLists as containers
|
|
6
|
+
* - Parallel vs Sequential execution
|
|
7
|
+
* - Dependencies and dependants (bidirectional)
|
|
8
|
+
* - Subtasks with inheritance
|
|
9
|
+
*
|
|
10
|
+
* ## Execution Modes
|
|
11
|
+
*
|
|
12
|
+
* Tasks can be organized for parallel or sequential execution:
|
|
13
|
+
*
|
|
14
|
+
* ```ts
|
|
15
|
+
* // Parallel - all can run simultaneously
|
|
16
|
+
* parallel(
|
|
17
|
+
* task('Design UI'),
|
|
18
|
+
* task('Write API specs'),
|
|
19
|
+
* task('Set up infrastructure'),
|
|
20
|
+
* )
|
|
21
|
+
*
|
|
22
|
+
* // Sequential - must run in order
|
|
23
|
+
* sequential(
|
|
24
|
+
* task('Implement backend'),
|
|
25
|
+
* task('Implement frontend'),
|
|
26
|
+
* task('Integration testing'),
|
|
27
|
+
* )
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* ## Markdown Syntax
|
|
31
|
+
*
|
|
32
|
+
* Tasks map to markdown checklists:
|
|
33
|
+
* - `- [ ]` = Parallel/unordered tasks
|
|
34
|
+
* - `1. [ ]` = Sequential/ordered tasks
|
|
35
|
+
*
|
|
36
|
+
* @packageDocumentation
|
|
37
|
+
*/
|
|
38
|
+
import { createTask as createBaseTask } from './task.js';
|
|
39
|
+
// ============================================================================
|
|
40
|
+
// Task DSL Functions
|
|
41
|
+
// ============================================================================
|
|
42
|
+
/**
|
|
43
|
+
* Create a task definition
|
|
44
|
+
*
|
|
45
|
+
* @example
|
|
46
|
+
* ```ts
|
|
47
|
+
* task('Implement feature')
|
|
48
|
+
* task('Review PR', { priority: 'high', assignTo: { type: 'human', id: 'user_123' } })
|
|
49
|
+
* task('Parent task', {
|
|
50
|
+
* subtasks: [
|
|
51
|
+
* task('Subtask 1'),
|
|
52
|
+
* task('Subtask 2'),
|
|
53
|
+
* ]
|
|
54
|
+
* })
|
|
55
|
+
* ```
|
|
56
|
+
*/
|
|
57
|
+
export function task(title, options) {
|
|
58
|
+
return {
|
|
59
|
+
__type: 'task',
|
|
60
|
+
title,
|
|
61
|
+
...options,
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Create a group of tasks that can run in parallel
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```ts
|
|
69
|
+
* parallel(
|
|
70
|
+
* task('Design UI'),
|
|
71
|
+
* task('Write API specs'),
|
|
72
|
+
* task('Set up infrastructure'),
|
|
73
|
+
* )
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
export function parallel(...tasks) {
|
|
77
|
+
return {
|
|
78
|
+
__type: 'parallel',
|
|
79
|
+
tasks,
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Create a group of tasks that must run sequentially
|
|
84
|
+
*
|
|
85
|
+
* @example
|
|
86
|
+
* ```ts
|
|
87
|
+
* sequential(
|
|
88
|
+
* task('Implement backend'),
|
|
89
|
+
* task('Implement frontend'),
|
|
90
|
+
* task('Integration testing'),
|
|
91
|
+
* )
|
|
92
|
+
* ```
|
|
93
|
+
*/
|
|
94
|
+
export function sequential(...tasks) {
|
|
95
|
+
return {
|
|
96
|
+
__type: 'sequential',
|
|
97
|
+
tasks,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
// ============================================================================
|
|
101
|
+
// Project DSL Functions
|
|
102
|
+
// ============================================================================
|
|
103
|
+
/**
|
|
104
|
+
* Generate a unique project ID
|
|
105
|
+
*/
|
|
106
|
+
function generateProjectId() {
|
|
107
|
+
return `proj_${Date.now()}_${Math.random().toString(36).slice(2, 9)}`;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Create a new project
|
|
111
|
+
*
|
|
112
|
+
* @example
|
|
113
|
+
* ```ts
|
|
114
|
+
* const project = createProject({
|
|
115
|
+
* name: 'Launch New Feature',
|
|
116
|
+
* description: 'Ship the new dashboard feature',
|
|
117
|
+
* tasks: [
|
|
118
|
+
* parallel(
|
|
119
|
+
* task('Design mockups'),
|
|
120
|
+
* task('Write technical spec'),
|
|
121
|
+
* ),
|
|
122
|
+
* sequential(
|
|
123
|
+
* task('Implement backend API'),
|
|
124
|
+
* task('Implement frontend UI'),
|
|
125
|
+
* task('Write tests'),
|
|
126
|
+
* task('Deploy to staging'),
|
|
127
|
+
* ),
|
|
128
|
+
* task('QA testing'),
|
|
129
|
+
* task('Deploy to production'),
|
|
130
|
+
* ],
|
|
131
|
+
* })
|
|
132
|
+
* ```
|
|
133
|
+
*/
|
|
134
|
+
export function createProject(options) {
|
|
135
|
+
const now = new Date();
|
|
136
|
+
return {
|
|
137
|
+
id: generateProjectId(),
|
|
138
|
+
name: options.name,
|
|
139
|
+
description: options.description,
|
|
140
|
+
status: 'draft',
|
|
141
|
+
tasks: options.tasks || [],
|
|
142
|
+
defaultMode: options.defaultMode || 'sequential',
|
|
143
|
+
owner: options.owner,
|
|
144
|
+
tags: options.tags,
|
|
145
|
+
createdAt: now,
|
|
146
|
+
updatedAt: now,
|
|
147
|
+
metadata: options.metadata,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// ============================================================================
|
|
151
|
+
// Workflow Builder (Fluent API)
|
|
152
|
+
// ============================================================================
|
|
153
|
+
/**
|
|
154
|
+
* Workflow builder for fluent task definition
|
|
155
|
+
*
|
|
156
|
+
* @example
|
|
157
|
+
* ```ts
|
|
158
|
+
* const workflow = workflow('Feature Launch')
|
|
159
|
+
* .parallel(
|
|
160
|
+
* task('Design'),
|
|
161
|
+
* task('Spec'),
|
|
162
|
+
* )
|
|
163
|
+
* .then(task('Implement'))
|
|
164
|
+
* .then(task('Test'))
|
|
165
|
+
* .parallel(
|
|
166
|
+
* task('Deploy staging'),
|
|
167
|
+
* task('Update docs'),
|
|
168
|
+
* )
|
|
169
|
+
* .then(task('Deploy production'))
|
|
170
|
+
* .build()
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
export function workflow(name, description) {
|
|
174
|
+
const tasks = [];
|
|
175
|
+
const builder = {
|
|
176
|
+
/**
|
|
177
|
+
* Add tasks that can run in parallel
|
|
178
|
+
*/
|
|
179
|
+
parallel(...nodes) {
|
|
180
|
+
tasks.push(parallel(...nodes));
|
|
181
|
+
return builder;
|
|
182
|
+
},
|
|
183
|
+
/**
|
|
184
|
+
* Add tasks that must run sequentially
|
|
185
|
+
*/
|
|
186
|
+
sequential(...nodes) {
|
|
187
|
+
tasks.push(sequential(...nodes));
|
|
188
|
+
return builder;
|
|
189
|
+
},
|
|
190
|
+
/**
|
|
191
|
+
* Add a single task (sequential with previous)
|
|
192
|
+
*/
|
|
193
|
+
then(...nodes) {
|
|
194
|
+
if (nodes.length === 1) {
|
|
195
|
+
tasks.push(nodes[0]);
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
tasks.push(sequential(...nodes));
|
|
199
|
+
}
|
|
200
|
+
return builder;
|
|
201
|
+
},
|
|
202
|
+
/**
|
|
203
|
+
* Add a task (alias for then)
|
|
204
|
+
*/
|
|
205
|
+
task(title, options) {
|
|
206
|
+
tasks.push(task(title, options));
|
|
207
|
+
return builder;
|
|
208
|
+
},
|
|
209
|
+
/**
|
|
210
|
+
* Build the project
|
|
211
|
+
*/
|
|
212
|
+
build(options) {
|
|
213
|
+
return createProject({
|
|
214
|
+
name,
|
|
215
|
+
description,
|
|
216
|
+
tasks,
|
|
217
|
+
...options,
|
|
218
|
+
});
|
|
219
|
+
},
|
|
220
|
+
};
|
|
221
|
+
return builder;
|
|
222
|
+
}
|
|
223
|
+
// ============================================================================
|
|
224
|
+
// Task Materialization
|
|
225
|
+
// ============================================================================
|
|
226
|
+
/**
|
|
227
|
+
* Flatten task nodes into actual Task objects with dependencies
|
|
228
|
+
*/
|
|
229
|
+
export async function materializeProject(project) {
|
|
230
|
+
const tasks = [];
|
|
231
|
+
let taskIndex = 0;
|
|
232
|
+
async function processNode(node, parentId, previousIds = [], mode = 'sequential') {
|
|
233
|
+
if (node.__type === 'task') {
|
|
234
|
+
const taskDef = node;
|
|
235
|
+
const taskId = `${project.id}_task_${taskIndex++}`;
|
|
236
|
+
// Create dependencies based on mode (as string array for CreateTaskOptions)
|
|
237
|
+
const dependencies = mode === 'sequential' && previousIds.length > 0
|
|
238
|
+
? previousIds
|
|
239
|
+
: undefined;
|
|
240
|
+
// Create a FunctionDefinition from the task definition
|
|
241
|
+
// Default to generative function type for DSL tasks
|
|
242
|
+
const functionDef = {
|
|
243
|
+
type: taskDef.functionType || 'generative',
|
|
244
|
+
name: taskDef.title,
|
|
245
|
+
description: taskDef.description,
|
|
246
|
+
args: {},
|
|
247
|
+
output: 'string',
|
|
248
|
+
};
|
|
249
|
+
const newTask = await createBaseTask({
|
|
250
|
+
function: functionDef,
|
|
251
|
+
priority: taskDef.priority || 'normal',
|
|
252
|
+
assignTo: taskDef.assignTo,
|
|
253
|
+
tags: taskDef.tags,
|
|
254
|
+
parentId,
|
|
255
|
+
projectId: project.id,
|
|
256
|
+
dependencies,
|
|
257
|
+
metadata: {
|
|
258
|
+
...taskDef.metadata,
|
|
259
|
+
_taskNodeIndex: taskIndex - 1,
|
|
260
|
+
},
|
|
261
|
+
});
|
|
262
|
+
newTask.id = taskId;
|
|
263
|
+
tasks.push(newTask);
|
|
264
|
+
// Process subtasks
|
|
265
|
+
if (taskDef.subtasks && taskDef.subtasks.length > 0) {
|
|
266
|
+
let subtaskPrevIds = [];
|
|
267
|
+
for (const subtask of taskDef.subtasks) {
|
|
268
|
+
subtaskPrevIds = await processNode(subtask, taskId, subtaskPrevIds, 'sequential');
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return [taskId];
|
|
272
|
+
}
|
|
273
|
+
if (node.__type === 'parallel') {
|
|
274
|
+
const group = node;
|
|
275
|
+
const allIds = [];
|
|
276
|
+
// All tasks in parallel group can start simultaneously
|
|
277
|
+
// They don't depend on each other, only on previousIds
|
|
278
|
+
for (const child of group.tasks) {
|
|
279
|
+
const childIds = await processNode(child, parentId, previousIds, 'parallel');
|
|
280
|
+
allIds.push(...childIds);
|
|
281
|
+
}
|
|
282
|
+
return allIds;
|
|
283
|
+
}
|
|
284
|
+
if (node.__type === 'sequential') {
|
|
285
|
+
const group = node;
|
|
286
|
+
let currentPrevIds = previousIds;
|
|
287
|
+
// Each task depends on the previous one
|
|
288
|
+
for (const child of group.tasks) {
|
|
289
|
+
currentPrevIds = await processNode(child, parentId, currentPrevIds, 'sequential');
|
|
290
|
+
}
|
|
291
|
+
return currentPrevIds;
|
|
292
|
+
}
|
|
293
|
+
return [];
|
|
294
|
+
}
|
|
295
|
+
// Process all root-level tasks
|
|
296
|
+
let previousIds = [];
|
|
297
|
+
for (const node of project.tasks) {
|
|
298
|
+
previousIds = await processNode(node, undefined, previousIds, project.defaultMode || 'sequential');
|
|
299
|
+
}
|
|
300
|
+
return { project, tasks };
|
|
301
|
+
}
|
|
302
|
+
// ============================================================================
|
|
303
|
+
// Dependency Graph Utilities
|
|
304
|
+
// ============================================================================
|
|
305
|
+
/**
|
|
306
|
+
* Get all tasks that depend on a given task (dependants)
|
|
307
|
+
*/
|
|
308
|
+
export function getDependants(taskId, allTasks) {
|
|
309
|
+
return allTasks.filter(t => t.dependencies?.some(d => d.taskId === taskId && d.type === 'blocked_by'));
|
|
310
|
+
}
|
|
311
|
+
/**
|
|
312
|
+
* Get all tasks that a given task depends on (dependencies)
|
|
313
|
+
*/
|
|
314
|
+
export function getDependencies(task, allTasks) {
|
|
315
|
+
if (!task.dependencies)
|
|
316
|
+
return [];
|
|
317
|
+
const depIds = task.dependencies
|
|
318
|
+
.filter(d => d.type === 'blocked_by')
|
|
319
|
+
.map(d => d.taskId);
|
|
320
|
+
return allTasks.filter(t => depIds.includes(t.id));
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Get tasks that are ready to execute (no unsatisfied dependencies)
|
|
324
|
+
*/
|
|
325
|
+
export function getReadyTasks(allTasks) {
|
|
326
|
+
return allTasks.filter(t => {
|
|
327
|
+
if (t.status !== 'queued' && t.status !== 'pending')
|
|
328
|
+
return false;
|
|
329
|
+
if (!t.dependencies || t.dependencies.length === 0)
|
|
330
|
+
return true;
|
|
331
|
+
return t.dependencies
|
|
332
|
+
.filter(d => d.type === 'blocked_by')
|
|
333
|
+
.every(d => d.satisfied);
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Check if a task graph has cycles
|
|
338
|
+
*/
|
|
339
|
+
export function hasCycles(allTasks) {
|
|
340
|
+
const visited = new Set();
|
|
341
|
+
const recStack = new Set();
|
|
342
|
+
function dfs(taskId) {
|
|
343
|
+
visited.add(taskId);
|
|
344
|
+
recStack.add(taskId);
|
|
345
|
+
const task = allTasks.find(t => t.id === taskId);
|
|
346
|
+
if (task?.dependencies) {
|
|
347
|
+
for (const dep of task.dependencies) {
|
|
348
|
+
if (dep.type === 'blocked_by') {
|
|
349
|
+
if (!visited.has(dep.taskId)) {
|
|
350
|
+
if (dfs(dep.taskId))
|
|
351
|
+
return true;
|
|
352
|
+
}
|
|
353
|
+
else if (recStack.has(dep.taskId)) {
|
|
354
|
+
return true;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
recStack.delete(taskId);
|
|
360
|
+
return false;
|
|
361
|
+
}
|
|
362
|
+
for (const task of allTasks) {
|
|
363
|
+
if (!visited.has(task.id)) {
|
|
364
|
+
if (dfs(task.id))
|
|
365
|
+
return true;
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
return false;
|
|
369
|
+
}
|
|
370
|
+
/**
|
|
371
|
+
* Sort tasks by their dependencies (tasks with no dependencies first)
|
|
372
|
+
*/
|
|
373
|
+
export function sortTasks(allTasks) {
|
|
374
|
+
const result = [];
|
|
375
|
+
const visited = new Set();
|
|
376
|
+
function visit(task) {
|
|
377
|
+
if (visited.has(task.id))
|
|
378
|
+
return;
|
|
379
|
+
visited.add(task.id);
|
|
380
|
+
// Visit dependencies first
|
|
381
|
+
if (task.dependencies) {
|
|
382
|
+
for (const dep of task.dependencies) {
|
|
383
|
+
if (dep.type === 'blocked_by') {
|
|
384
|
+
const depTask = allTasks.find(t => t.id === dep.taskId);
|
|
385
|
+
if (depTask)
|
|
386
|
+
visit(depTask);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
result.push(task);
|
|
391
|
+
}
|
|
392
|
+
for (const task of allTasks) {
|
|
393
|
+
visit(task);
|
|
394
|
+
}
|
|
395
|
+
return result;
|
|
396
|
+
}
|
|
397
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
package/dist/queue.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Task Queue - In-memory task queue implementation
|
|
3
|
+
*
|
|
4
|
+
* Provides task queuing, assignment, and execution management.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import type { TaskQueue, TaskQueueOptions } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Global task queue instance
|
|
11
|
+
*/
|
|
12
|
+
export declare const taskQueue: TaskQueue;
|
|
13
|
+
/**
|
|
14
|
+
* Create a new task queue instance
|
|
15
|
+
*/
|
|
16
|
+
export declare function createTaskQueue(options?: TaskQueueOptions): TaskQueue;
|
|
17
|
+
//# sourceMappingURL=queue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../src/queue.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,SAAS,EACT,gBAAgB,EASjB,MAAM,YAAY,CAAA;AAyYnB;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,SAAmC,CAAA;AAE3D;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAErE"}
|