task-o-matic 0.0.19 ā 0.0.21
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/cli/display/task.d.ts +28 -2
- package/dist/cli/display/task.d.ts.map +1 -1
- package/dist/cli/display/task.js +27 -21
- package/dist/commands/benchmark.js +203 -173
- package/dist/commands/tasks/show.d.ts.map +1 -1
- package/dist/commands/tasks/show.js +21 -1
- package/dist/commands/tasks/tree.d.ts.map +1 -1
- package/dist/commands/tasks/tree.js +21 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +59 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -0
- package/dist/lib/ai-service/model-provider.d.ts +4 -0
- package/dist/lib/ai-service/model-provider.d.ts.map +1 -1
- package/dist/lib/ai-service/model-provider.js +21 -5
- package/dist/lib/ai-service/prd-operations.d.ts.map +1 -1
- package/dist/lib/ai-service/prd-operations.js +1 -4
- package/dist/lib/config.d.ts +8 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +59 -23
- package/dist/lib/git-utils.d.ts +35 -0
- package/dist/lib/git-utils.d.ts.map +1 -1
- package/dist/lib/git-utils.js +81 -15
- package/dist/lib/hooks/logger.d.ts.map +1 -1
- package/dist/lib/hooks/logger.js +16 -0
- package/dist/lib/hooks.d.ts +10 -1
- package/dist/lib/hooks.d.ts.map +1 -1
- package/dist/lib/logger.d.ts +20 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +32 -0
- package/dist/lib/provider-defaults.json +22 -0
- package/dist/lib/task-execution-core.d.ts.map +1 -1
- package/dist/lib/task-execution-core.js +29 -33
- package/dist/lib/task-loop-execution.d.ts.map +1 -1
- package/dist/lib/task-loop-execution.js +5 -1
- package/dist/lib/task-planning.d.ts.map +1 -1
- package/dist/lib/task-planning.js +9 -9
- package/dist/lib/task-review.d.ts.map +1 -1
- package/dist/lib/task-review.js +10 -13
- package/dist/lib/validation.d.ts.map +1 -1
- package/dist/lib/validation.js +12 -15
- package/dist/services/benchmark.d.ts +14 -0
- package/dist/services/benchmark.d.ts.map +1 -1
- package/dist/services/benchmark.js +325 -0
- package/dist/services/workflow.d.ts +12 -0
- package/dist/services/workflow.d.ts.map +1 -1
- package/dist/services/workflow.js +20 -0
- package/dist/types/index.d.ts +1 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/workflow-options.d.ts +25 -0
- package/dist/types/workflow-options.d.ts.map +1 -1
- package/dist/utils/streaming-utils.d.ts.map +1 -1
- package/dist/utils/streaming-utils.js +4 -0
- package/package.json +1 -1
|
@@ -4,8 +4,30 @@ export interface TaskDisplayOptions {
|
|
|
4
4
|
showSubtasks?: boolean;
|
|
5
5
|
showMetadata?: boolean;
|
|
6
6
|
}
|
|
7
|
+
/**
|
|
8
|
+
* Data object for displayTaskDetails - makes the function pure
|
|
9
|
+
*/
|
|
10
|
+
export interface TaskDetailsData {
|
|
11
|
+
task: Task;
|
|
12
|
+
content?: string;
|
|
13
|
+
aiMetadata?: TaskAIMetadata;
|
|
14
|
+
subtasks?: Task[];
|
|
15
|
+
subtaskMetadata?: Map<string, TaskAIMetadata>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Data object for displayTaskTree - makes the function pure
|
|
19
|
+
*/
|
|
20
|
+
export interface TaskTreeData {
|
|
21
|
+
tasks: Task[];
|
|
22
|
+
subtasksMap: Map<string, Task[]>;
|
|
23
|
+
rootId?: string;
|
|
24
|
+
}
|
|
7
25
|
export declare function displayTask(task: Task, options?: TaskDisplayOptions): Promise<void>;
|
|
8
|
-
|
|
26
|
+
/**
|
|
27
|
+
* Display detailed task information.
|
|
28
|
+
* Pure function - accepts all data as arguments, no internal service calls.
|
|
29
|
+
*/
|
|
30
|
+
export declare function displayTaskDetails(data: TaskDetailsData): void;
|
|
9
31
|
export declare function displayTaskList(tasks: Task[]): void;
|
|
10
32
|
export declare function displayCreatedTask(task: Task, aiMetadata?: TaskAIMetadata): void;
|
|
11
33
|
export declare function displaySubtaskCreation(subtasks: Task[]): void;
|
|
@@ -14,5 +36,9 @@ export declare function displayTaskDelete(deleted: Task[], orphanedSubtasks: Tas
|
|
|
14
36
|
export declare function displayTaskStatusChange(task: Task, oldStatus: string, newStatus: string): void;
|
|
15
37
|
export declare function displayTagsUpdate(task: Task, addedTags: string[], removedTags: string[]): void;
|
|
16
38
|
export declare function displayNextTask(task: Task, criteria: string): void;
|
|
17
|
-
|
|
39
|
+
/**
|
|
40
|
+
* Display hierarchical task tree.
|
|
41
|
+
* Pure function - accepts all data as arguments, no internal service calls.
|
|
42
|
+
*/
|
|
43
|
+
export declare function displayTaskTree(data: TaskTreeData): void;
|
|
18
44
|
//# sourceMappingURL=task.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/cli/display/task.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../../src/cli/display/task.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,IAAI,CAAC;IACX,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC;IAClB,eAAe,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;CAC/C;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,WAAW,CAC/B,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAwBf;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,eAAe,GAAG,IAAI,CA8F9D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAKnD;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,IAAI,EACV,UAAU,CAAC,EAAE,cAAc,GAC1B,IAAI,CAUN;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,IAAI,EAAE,GAAG,IAAI,CAS7D;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,GAAG,IAAI,CAyBhE;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,IAAI,EAAE,EACf,gBAAgB,EAAE,IAAI,EAAE,GACvB,IAAI,CAeN;AAED,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,IAAI,CAaN;AAED,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,IAAI,EACV,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,EAAE,MAAM,EAAE,GACpB,IAAI,CAgBN;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAkClE;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAmExD"}
|
package/dist/cli/display/task.js
CHANGED
|
@@ -15,7 +15,6 @@ exports.displayTagsUpdate = displayTagsUpdate;
|
|
|
15
15
|
exports.displayNextTask = displayNextTask;
|
|
16
16
|
exports.displayTaskTree = displayTaskTree;
|
|
17
17
|
const chalk_1 = __importDefault(require("chalk"));
|
|
18
|
-
const tasks_1 = require("../../services/tasks");
|
|
19
18
|
async function displayTask(task, options = {}) {
|
|
20
19
|
const { indent = "", showSubtasks = true, showMetadata = false } = options;
|
|
21
20
|
const statusColor = task.status === "completed"
|
|
@@ -33,7 +32,12 @@ async function displayTask(task, options = {}) {
|
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
34
|
}
|
|
36
|
-
|
|
35
|
+
/**
|
|
36
|
+
* Display detailed task information.
|
|
37
|
+
* Pure function - accepts all data as arguments, no internal service calls.
|
|
38
|
+
*/
|
|
39
|
+
function displayTaskDetails(data) {
|
|
40
|
+
const { task, content, aiMetadata, subtasks = [], subtaskMetadata } = data;
|
|
37
41
|
console.log(chalk_1.default.blue("Task Details:"));
|
|
38
42
|
console.log(`${chalk_1.default.cyan("ID:")} ${task.id}`);
|
|
39
43
|
console.log(`${chalk_1.default.cyan("Title:")} ${chalk_1.default.bold(task.title)}`);
|
|
@@ -41,12 +45,9 @@ async function displayTaskDetails(task) {
|
|
|
41
45
|
if (task.description) {
|
|
42
46
|
console.log(`${chalk_1.default.cyan("Description:")} ${task.description}`);
|
|
43
47
|
}
|
|
44
|
-
if (
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
console.log(`${chalk_1.default.cyan("Full Content:")}`);
|
|
48
|
-
console.log(fullContent);
|
|
49
|
-
}
|
|
48
|
+
if (content) {
|
|
49
|
+
console.log(`${chalk_1.default.cyan("Full Content:")}`);
|
|
50
|
+
console.log(content);
|
|
50
51
|
}
|
|
51
52
|
if (task.estimatedEffort) {
|
|
52
53
|
console.log(`${chalk_1.default.cyan("Estimated Effort:")} ${task.estimatedEffort}`);
|
|
@@ -54,7 +55,6 @@ async function displayTaskDetails(task) {
|
|
|
54
55
|
if (task.tags && task.tags.length > 0) {
|
|
55
56
|
console.log(`${chalk_1.default.cyan("Tags:")} ${task.tags.join(", ")}`);
|
|
56
57
|
}
|
|
57
|
-
const aiMetadata = await tasks_1.taskService.getTaskAIMetadata(task.id);
|
|
58
58
|
if (aiMetadata?.aiGenerated) {
|
|
59
59
|
console.log(`${chalk_1.default.magenta("š¤ AI-generated")}`);
|
|
60
60
|
if (aiMetadata.aiProvider) {
|
|
@@ -76,7 +76,6 @@ async function displayTaskDetails(task) {
|
|
|
76
76
|
});
|
|
77
77
|
});
|
|
78
78
|
}
|
|
79
|
-
const subtasks = await tasks_1.taskService.getSubtasks(task.id);
|
|
80
79
|
if (subtasks.length > 0) {
|
|
81
80
|
console.log(chalk_1.default.blue(`\nš Subtasks (${subtasks.length}):`));
|
|
82
81
|
for (let i = 0; i < subtasks.length; i++) {
|
|
@@ -93,8 +92,8 @@ async function displayTaskDetails(task) {
|
|
|
93
92
|
if (subtask.estimatedEffort) {
|
|
94
93
|
console.log(chalk_1.default.cyan(` Effort: ${subtask.estimatedEffort}`));
|
|
95
94
|
}
|
|
96
|
-
const
|
|
97
|
-
if (
|
|
95
|
+
const subtaskAiMeta = subtaskMetadata?.get(subtask.id);
|
|
96
|
+
if (subtaskAiMeta?.aiGenerated) {
|
|
98
97
|
console.log(chalk_1.default.magenta(` š¤ AI-generated`));
|
|
99
98
|
}
|
|
100
99
|
if (i < subtasks.length - 1)
|
|
@@ -185,9 +184,11 @@ function displayTagsUpdate(task, addedTags, removedTags) {
|
|
|
185
184
|
function displayNextTask(task, criteria) {
|
|
186
185
|
console.log(chalk_1.default.blue(`\nšÆ Next task (${criteria}):`));
|
|
187
186
|
console.log(chalk_1.default.green(`ā ${task.title} (${task.id})`));
|
|
188
|
-
const statusColor = task.status === "completed"
|
|
189
|
-
|
|
190
|
-
|
|
187
|
+
const statusColor = task.status === "completed"
|
|
188
|
+
? chalk_1.default.green
|
|
189
|
+
: task.status === "in-progress"
|
|
190
|
+
? chalk_1.default.yellow
|
|
191
|
+
: chalk_1.default.gray;
|
|
191
192
|
console.log(statusColor(` Status: ${task.status}`));
|
|
192
193
|
if (task.description) {
|
|
193
194
|
console.log(chalk_1.default.cyan(` Description: ${task.description.substring(0, 100)}${task.description.length > 100 ? "..." : ""}`));
|
|
@@ -200,7 +201,12 @@ function displayNextTask(task, criteria) {
|
|
|
200
201
|
}
|
|
201
202
|
console.log(chalk_1.default.gray(` Created: ${new Date(task.createdAt).toLocaleString()}`));
|
|
202
203
|
}
|
|
203
|
-
|
|
204
|
+
/**
|
|
205
|
+
* Display hierarchical task tree.
|
|
206
|
+
* Pure function - accepts all data as arguments, no internal service calls.
|
|
207
|
+
*/
|
|
208
|
+
function displayTaskTree(data) {
|
|
209
|
+
const { tasks, subtasksMap, rootId } = data;
|
|
204
210
|
if (tasks.length === 0) {
|
|
205
211
|
console.log(chalk_1.default.yellow("No tasks found."));
|
|
206
212
|
return;
|
|
@@ -211,14 +217,14 @@ async function displayTaskTree(tasks, rootId) {
|
|
|
211
217
|
else {
|
|
212
218
|
console.log(chalk_1.default.blue(`\nš³ Complete Task Tree:`));
|
|
213
219
|
}
|
|
214
|
-
const displayTaskWithIndent =
|
|
220
|
+
const displayTaskWithIndent = (task, indent = "", isLast = false) => {
|
|
215
221
|
const statusColor = task.status === "completed"
|
|
216
222
|
? chalk_1.default.green
|
|
217
223
|
: task.status === "in-progress"
|
|
218
224
|
? chalk_1.default.yellow
|
|
219
225
|
: chalk_1.default.gray;
|
|
220
226
|
const connector = isLast ? "āāā " : "āāā ";
|
|
221
|
-
const subtasks =
|
|
227
|
+
const subtasks = subtasksMap.get(task.id) || [];
|
|
222
228
|
const hasSubtasks = subtasks.length > 0;
|
|
223
229
|
console.log(`${indent}${connector}${statusColor(`[${task.status}]`)} ${chalk_1.default.bold(task.title)} ${chalk_1.default.gray(`(${task.id})`)}`);
|
|
224
230
|
if (task.tags && task.tags.length > 0) {
|
|
@@ -228,7 +234,7 @@ async function displayTaskTree(tasks, rootId) {
|
|
|
228
234
|
const subtaskIndent = indent + (isLast ? " " : "ā ");
|
|
229
235
|
for (let i = 0; i < subtasks.length; i++) {
|
|
230
236
|
const isLastSubtask = i === subtasks.length - 1;
|
|
231
|
-
|
|
237
|
+
displayTaskWithIndent(subtasks[i], subtaskIndent, isLastSubtask);
|
|
232
238
|
}
|
|
233
239
|
}
|
|
234
240
|
};
|
|
@@ -236,7 +242,7 @@ async function displayTaskTree(tasks, rootId) {
|
|
|
236
242
|
if (rootId) {
|
|
237
243
|
const rootTask = tasks.find((t) => t.id === rootId);
|
|
238
244
|
if (rootTask) {
|
|
239
|
-
|
|
245
|
+
displayTaskWithIndent(rootTask, "", true);
|
|
240
246
|
}
|
|
241
247
|
}
|
|
242
248
|
else {
|
|
@@ -244,7 +250,7 @@ async function displayTaskTree(tasks, rootId) {
|
|
|
244
250
|
const topLevelTasks = tasks.filter((task) => !task.parentId);
|
|
245
251
|
for (let i = 0; i < topLevelTasks.length; i++) {
|
|
246
252
|
const isLast = i === topLevelTasks.length - 1;
|
|
247
|
-
|
|
253
|
+
displayTaskWithIndent(topLevelTasks[i], "", isLast);
|
|
248
254
|
}
|
|
249
255
|
}
|
|
250
256
|
}
|