task-o-matic 0.0.3 → 0.0.6
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/README.md +96 -40
- package/dist/cli/bin.js +0 -0
- package/dist/commands/tasks/create.d.ts +3 -0
- package/dist/commands/tasks/create.d.ts.map +1 -0
- package/dist/commands/tasks/create.js +58 -0
- package/dist/commands/tasks/delete.d.ts +3 -0
- package/dist/commands/tasks/delete.d.ts.map +1 -0
- package/dist/commands/tasks/delete.js +40 -0
- package/dist/commands/tasks/document.d.ts +5 -0
- package/dist/commands/tasks/document.d.ts.map +1 -0
- package/dist/commands/tasks/document.js +118 -0
- package/dist/commands/tasks/enhance.d.ts +3 -0
- package/dist/commands/tasks/enhance.d.ts.map +1 -0
- package/dist/commands/tasks/enhance.js +86 -0
- package/dist/commands/tasks/execute.d.ts +3 -0
- package/dist/commands/tasks/execute.d.ts.map +1 -0
- package/dist/commands/tasks/execute.js +33 -0
- package/dist/commands/tasks/index.d.ts +16 -0
- package/dist/commands/tasks/index.d.ts.map +1 -0
- package/dist/commands/tasks/index.js +31 -0
- package/dist/commands/tasks/list.d.ts +3 -0
- package/dist/commands/tasks/list.d.ts.map +1 -0
- package/dist/commands/tasks/list.js +27 -0
- package/dist/commands/tasks/next.d.ts +3 -0
- package/dist/commands/tasks/next.d.ts.map +1 -0
- package/dist/commands/tasks/next.js +44 -0
- package/dist/commands/tasks/plan.d.ts +7 -0
- package/dist/commands/tasks/plan.d.ts.map +1 -0
- package/dist/commands/tasks/plan.js +131 -0
- package/dist/commands/tasks/show.d.ts +3 -0
- package/dist/commands/tasks/show.d.ts.map +1 -0
- package/dist/commands/tasks/show.js +23 -0
- package/dist/commands/tasks/split.d.ts +3 -0
- package/dist/commands/tasks/split.d.ts.map +1 -0
- package/dist/commands/tasks/split.js +95 -0
- package/dist/commands/tasks/status.d.ts +3 -0
- package/dist/commands/tasks/status.d.ts.map +1 -0
- package/dist/commands/tasks/status.js +26 -0
- package/dist/commands/tasks/subtasks.d.ts +3 -0
- package/dist/commands/tasks/subtasks.d.ts.map +1 -0
- package/dist/commands/tasks/subtasks.js +35 -0
- package/dist/commands/tasks/tags.d.ts +4 -0
- package/dist/commands/tasks/tags.d.ts.map +1 -0
- package/dist/commands/tasks/tags.js +37 -0
- package/dist/commands/tasks/tree.d.ts +3 -0
- package/dist/commands/tasks/tree.d.ts.map +1 -0
- package/dist/commands/tasks/tree.js +20 -0
- package/dist/commands/tasks/update.d.ts +3 -0
- package/dist/commands/tasks/update.d.ts.map +1 -0
- package/dist/commands/tasks/update.js +35 -0
- package/dist/commands/tasks.d.ts.map +1 -1
- package/dist/commands/tasks.js +23 -686
- package/dist/commands/workflow.d.ts +4 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +503 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/lib/ai-service/ai-operations.d.ts.map +1 -1
- package/dist/lib/ai-service/ai-operations.js +54 -22
- package/dist/lib/ai-service/research-tools.d.ts.map +1 -1
- package/dist/lib/ai-service/research-tools.js +2 -2
- package/dist/lib/better-t-stack-cli.d.ts +1 -0
- package/dist/lib/better-t-stack-cli.d.ts.map +1 -1
- package/dist/lib/better-t-stack-cli.js +8 -2
- package/dist/lib/context-builder.d.ts +2 -1
- package/dist/lib/context-builder.d.ts.map +1 -1
- package/dist/lib/context-builder.js +3 -8
- package/dist/lib/hooks/logger.d.ts +2 -0
- package/dist/lib/hooks/logger.d.ts.map +1 -0
- package/dist/lib/hooks/logger.js +27 -0
- package/dist/lib/hooks.d.ts +64 -0
- package/dist/lib/hooks.d.ts.map +1 -0
- package/dist/lib/hooks.js +60 -0
- package/dist/lib/index.d.ts +18 -17
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +3 -3
- package/dist/lib/prompt-builder.d.ts.map +1 -1
- package/dist/lib/prompt-builder.js +16 -8
- package/dist/lib/{storage.d.ts → storage/file-system.d.ts} +4 -3
- package/dist/lib/storage/file-system.d.ts.map +1 -0
- package/dist/lib/{storage.js → storage/file-system.js} +141 -152
- package/dist/lib/storage/types.d.ts +43 -0
- package/dist/lib/storage/types.d.ts.map +1 -0
- package/dist/lib/storage/types.js +2 -0
- package/dist/lib/task-execution.d.ts.map +1 -1
- package/dist/lib/task-execution.js +22 -3
- package/dist/mcp/server.js +0 -0
- package/dist/prompts/workflow-assistance.d.ts +32 -0
- package/dist/prompts/workflow-assistance.d.ts.map +1 -0
- package/dist/prompts/workflow-assistance.js +130 -0
- package/dist/services/tasks.d.ts +4 -6
- package/dist/services/tasks.d.ts.map +1 -1
- package/dist/services/tasks.js +115 -96
- package/dist/services/workflow-ai-assistant.d.ts +74 -0
- package/dist/services/workflow-ai-assistant.d.ts.map +1 -0
- package/dist/services/workflow-ai-assistant.js +223 -0
- package/dist/test/hooks.test.d.ts +2 -0
- package/dist/test/hooks.test.d.ts.map +1 -0
- package/dist/test/hooks.test.js +58 -0
- package/dist/test/storage.test.js +16 -16
- package/dist/types/options.d.ts +35 -0
- package/dist/types/options.d.ts.map +1 -1
- package/dist/utils/ai-service-factory.d.ts +5 -5
- package/dist/utils/ai-service-factory.d.ts.map +1 -1
- package/dist/utils/ai-service-factory.js +4 -3
- package/dist/utils/workflow-prompts.d.ts +17 -0
- package/dist/utils/workflow-prompts.d.ts.map +1 -0
- package/dist/utils/workflow-prompts.js +88 -0
- package/package.json +4 -4
- package/dist/lib/storage.d.ts.map +0 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Task, CreateTaskRequest, TaskAIMetadata } from "../../types";
|
|
2
|
+
export interface TaskRepository {
|
|
3
|
+
getTasks(): Promise<Task[]>;
|
|
4
|
+
getTopLevelTasks(): Promise<Task[]>;
|
|
5
|
+
getTask(id: string): Promise<Task | null>;
|
|
6
|
+
createTask(task: CreateTaskRequest, aiMetadata?: TaskAIMetadata): Promise<Task>;
|
|
7
|
+
updateTask(id: string, updates: Partial<Task>): Promise<Task | null>;
|
|
8
|
+
deleteTask(id: string): Promise<boolean>;
|
|
9
|
+
getSubtasks(parentId: string): Promise<Task[]>;
|
|
10
|
+
getTaskContent(taskId: string): Promise<string | null>;
|
|
11
|
+
saveTaskContent(taskId: string, content: string): Promise<string>;
|
|
12
|
+
saveEnhancedTaskContent(taskId: string, content: string): Promise<string>;
|
|
13
|
+
deleteTaskContent(taskId: string): Promise<void>;
|
|
14
|
+
migrateTaskContent(): Promise<number>;
|
|
15
|
+
cleanupOrphanedContent(): Promise<number>;
|
|
16
|
+
getTaskAIMetadata(taskId: string): Promise<TaskAIMetadata | null>;
|
|
17
|
+
saveTaskAIMetadata(metadata: TaskAIMetadata): Promise<void>;
|
|
18
|
+
deleteTaskAIMetadata(taskId: string): Promise<void>;
|
|
19
|
+
getTaskDocumentation(taskId: string): Promise<string | null>;
|
|
20
|
+
saveTaskDocumentation(taskId: string, content: string): Promise<string>;
|
|
21
|
+
saveContext7Documentation(library: string, query: string, content: string): Promise<string>;
|
|
22
|
+
getDocumentationFile(fileName: string): Promise<string | null>;
|
|
23
|
+
listDocumentationFiles(): Promise<string[]>;
|
|
24
|
+
getPlan(taskId: string): Promise<{
|
|
25
|
+
plan: string;
|
|
26
|
+
createdAt: number;
|
|
27
|
+
updatedAt: number;
|
|
28
|
+
} | null>;
|
|
29
|
+
savePlan(taskId: string, plan: string): Promise<void>;
|
|
30
|
+
listPlans(): Promise<Array<{
|
|
31
|
+
taskId: string;
|
|
32
|
+
plan: string;
|
|
33
|
+
createdAt: number;
|
|
34
|
+
updatedAt: number;
|
|
35
|
+
}>>;
|
|
36
|
+
deletePlan(taskId: string): Promise<boolean>;
|
|
37
|
+
sanitizeForFilename(name: string): string;
|
|
38
|
+
validateStorageIntegrity(): Promise<{
|
|
39
|
+
isValid: boolean;
|
|
40
|
+
issues: string[];
|
|
41
|
+
}>;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/storage/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-execution.d.ts","sourceRoot":"","sources":["../../src/lib/task-execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"task-execution.d.ts","sourceRoot":"","sources":["../../src/lib/task-execution.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAgB,MAAM,UAAU,CAAC;AA8L5D,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqE5E"}
|
|
@@ -7,7 +7,8 @@ exports.executeTask = executeTask;
|
|
|
7
7
|
const tasks_1 = require("../services/tasks");
|
|
8
8
|
const executor_factory_1 = require("./executors/executor-factory");
|
|
9
9
|
const validation_1 = require("./validation");
|
|
10
|
-
const
|
|
10
|
+
const ai_service_factory_1 = require("../utils/ai-service-factory");
|
|
11
|
+
const hooks_1 = require("./hooks");
|
|
11
12
|
const chalk_1 = __importDefault(require("chalk"));
|
|
12
13
|
async function executeSingleTask(taskId, tool, dry) {
|
|
13
14
|
// Load task
|
|
@@ -17,7 +18,7 @@ async function executeSingleTask(taskId, tool, dry) {
|
|
|
17
18
|
}
|
|
18
19
|
console.log(chalk_1.default.blue(`🎯 ${dry ? "DRY RUN" : "Executing"} task: ${task.title} (${taskId})`));
|
|
19
20
|
// Build comprehensive execution message with full context
|
|
20
|
-
const contextBuilder =
|
|
21
|
+
const contextBuilder = (0, ai_service_factory_1.getContextBuilder)();
|
|
21
22
|
const taskContext = await contextBuilder.buildContext(taskId);
|
|
22
23
|
// Build execution message with ALL context
|
|
23
24
|
const messageParts = [];
|
|
@@ -62,12 +63,14 @@ async function executeSingleTask(taskId, tool, dry) {
|
|
|
62
63
|
});
|
|
63
64
|
}
|
|
64
65
|
}
|
|
65
|
-
const executionMessage = messageParts.join(
|
|
66
|
+
const executionMessage = messageParts.join("");
|
|
66
67
|
if (!dry) {
|
|
67
68
|
// Update task status to in-progress
|
|
68
69
|
await tasks_1.taskService.setTaskStatus(taskId, "in-progress");
|
|
69
70
|
console.log(chalk_1.default.yellow("⏳ Task status updated to in-progress"));
|
|
70
71
|
}
|
|
72
|
+
// Emit execution:start event
|
|
73
|
+
await hooks_1.hooks.emit("execution:start", { taskId, tool });
|
|
71
74
|
try {
|
|
72
75
|
// Create executor and run
|
|
73
76
|
const executor = executor_factory_1.ExecutorFactory.create(tool);
|
|
@@ -77,8 +80,15 @@ async function executeSingleTask(taskId, tool, dry) {
|
|
|
77
80
|
await tasks_1.taskService.setTaskStatus(taskId, "completed");
|
|
78
81
|
console.log(chalk_1.default.green("✅ Task execution completed successfully"));
|
|
79
82
|
}
|
|
83
|
+
// Emit execution:end event
|
|
84
|
+
await hooks_1.hooks.emit("execution:end", { taskId, success: true });
|
|
80
85
|
}
|
|
81
86
|
catch (error) {
|
|
87
|
+
// Emit execution:error event
|
|
88
|
+
await hooks_1.hooks.emit("execution:error", {
|
|
89
|
+
taskId,
|
|
90
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
91
|
+
});
|
|
82
92
|
if (!dry) {
|
|
83
93
|
// Update task status back to todo on failure
|
|
84
94
|
await tasks_1.taskService.setTaskStatus(taskId, "todo");
|
|
@@ -134,6 +144,8 @@ async function executeTask(options) {
|
|
|
134
144
|
await tasks_1.taskService.setTaskStatus(taskId, "in-progress");
|
|
135
145
|
console.log(chalk_1.default.yellow("⏳ Task status updated to in-progress"));
|
|
136
146
|
}
|
|
147
|
+
// Emit execution:start event
|
|
148
|
+
await hooks_1.hooks.emit("execution:start", { taskId, tool });
|
|
137
149
|
try {
|
|
138
150
|
const executor = executor_factory_1.ExecutorFactory.create(tool);
|
|
139
151
|
await executor.execute(message, dry);
|
|
@@ -141,6 +153,8 @@ async function executeTask(options) {
|
|
|
141
153
|
await tasks_1.taskService.setTaskStatus(taskId, "completed");
|
|
142
154
|
console.log(chalk_1.default.green("✅ Task execution completed successfully"));
|
|
143
155
|
}
|
|
156
|
+
// Emit execution:end event
|
|
157
|
+
await hooks_1.hooks.emit("execution:end", { taskId, success: true });
|
|
144
158
|
// Run validations after task completion
|
|
145
159
|
await (0, validation_1.runValidations)(validate, dry);
|
|
146
160
|
}
|
|
@@ -149,6 +163,11 @@ async function executeTask(options) {
|
|
|
149
163
|
await tasks_1.taskService.setTaskStatus(taskId, "todo");
|
|
150
164
|
console.log(chalk_1.default.red("❌ Task execution failed, status reset to todo"));
|
|
151
165
|
}
|
|
166
|
+
// Emit execution:error event
|
|
167
|
+
await hooks_1.hooks.emit("execution:error", {
|
|
168
|
+
taskId,
|
|
169
|
+
error: error instanceof Error ? error : new Error(String(error)),
|
|
170
|
+
});
|
|
152
171
|
throw error;
|
|
153
172
|
}
|
|
154
173
|
return;
|
package/dist/mcp/server.js
CHANGED
|
File without changes
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt templates for workflow AI assistance
|
|
3
|
+
*/
|
|
4
|
+
export declare const initConfigPrompt: {
|
|
5
|
+
system: string;
|
|
6
|
+
template: (userDescription: string) => string;
|
|
7
|
+
};
|
|
8
|
+
export declare const prdCreationPrompt: {
|
|
9
|
+
system: string;
|
|
10
|
+
template: (userDescription: string) => string;
|
|
11
|
+
};
|
|
12
|
+
export declare const prdRefinementPrompt: {
|
|
13
|
+
system: string;
|
|
14
|
+
template: (currentPRD: string, feedback: string) => string;
|
|
15
|
+
};
|
|
16
|
+
export declare const taskGenerationPrompt: {
|
|
17
|
+
system: string;
|
|
18
|
+
template: (prdContent: string, customInstructions?: string) => string;
|
|
19
|
+
};
|
|
20
|
+
export declare const taskSplitPrompt: {
|
|
21
|
+
system: string;
|
|
22
|
+
template: (taskTitle: string, taskContent: string, customInstructions?: string) => string;
|
|
23
|
+
};
|
|
24
|
+
export declare const taskPrioritizationPrompt: {
|
|
25
|
+
system: string;
|
|
26
|
+
template: (tasks: Array<{
|
|
27
|
+
id: string;
|
|
28
|
+
title: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
}>, userGuidance: string) => string;
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=workflow-assistance.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow-assistance.d.ts","sourceRoot":"","sources":["../../src/prompts/workflow-assistance.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,gBAAgB;;gCAKC,MAAM;CAcnC,CAAC;AAEF,eAAO,MAAM,iBAAiB;;gCAIA,MAAM;CAiBnC,CAAC;AAEF,eAAO,MAAM,mBAAmB;;2BAIP,MAAM,YAAY,MAAM;CAYhD,CAAC;AAEF,eAAO,MAAM,oBAAoB;;2BAIR,MAAM,uBAAuB,MAAM;CAoB3D,CAAC;AAEF,eAAO,MAAM,eAAe;;0BAKb,MAAM,eACJ,MAAM,uBACE,MAAM;CAiB9B,CAAC;AAEF,eAAO,MAAM,wBAAwB;;sBAK1B,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,gBACnD,MAAM;CA0BvB,CAAC"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Prompt templates for workflow AI assistance
|
|
4
|
+
*/
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.taskPrioritizationPrompt = exports.taskSplitPrompt = exports.taskGenerationPrompt = exports.prdRefinementPrompt = exports.prdCreationPrompt = exports.initConfigPrompt = void 0;
|
|
7
|
+
exports.initConfigPrompt = {
|
|
8
|
+
system: `You are an expert developer assistant helping configure a new project.
|
|
9
|
+
Your role is to recommend appropriate technologies based on the user's description.
|
|
10
|
+
Always consider modern best practices, compatibility, and the user's experience level.`,
|
|
11
|
+
template: (userDescription) => `
|
|
12
|
+
Based on this project description, recommend a complete tech stack:
|
|
13
|
+
|
|
14
|
+
"${userDescription}"
|
|
15
|
+
|
|
16
|
+
Available options:
|
|
17
|
+
- AI Providers: openrouter, anthropic, openai, custom
|
|
18
|
+
- Frontend: next, tanstack-router, react-router, vite-react, remix
|
|
19
|
+
- Backend: hono, express, elysia, fastify
|
|
20
|
+
- Database: sqlite, postgres, mysql, mongodb, turso, neon
|
|
21
|
+
- Auth: better-auth, clerk, auth0, custom
|
|
22
|
+
|
|
23
|
+
Respond with JSON containing: projectName, aiProvider, aiModel, frontend, backend, database, auth (boolean), reasoning
|
|
24
|
+
`,
|
|
25
|
+
};
|
|
26
|
+
exports.prdCreationPrompt = {
|
|
27
|
+
system: `You are an experienced product manager creating Product Requirements Documents.
|
|
28
|
+
Your PRDs are clear, comprehensive, and actionable. You focus on MVP features while noting future enhancements.`,
|
|
29
|
+
template: (userDescription) => `
|
|
30
|
+
Create a comprehensive PRD for this product:
|
|
31
|
+
|
|
32
|
+
"${userDescription}"
|
|
33
|
+
|
|
34
|
+
Include these sections:
|
|
35
|
+
1. Overview - Brief product description
|
|
36
|
+
2. Objectives - Key goals
|
|
37
|
+
3. Target Audience - Who will use it
|
|
38
|
+
4. Core Features - Essential MVP features
|
|
39
|
+
5. Future Features - Nice-to-have additions
|
|
40
|
+
6. Technical Requirements - Tech constraints
|
|
41
|
+
7. Success Metrics - How to measure success
|
|
42
|
+
8. Timeline - Rough milestones
|
|
43
|
+
|
|
44
|
+
Be specific and actionable.
|
|
45
|
+
`,
|
|
46
|
+
};
|
|
47
|
+
exports.prdRefinementPrompt = {
|
|
48
|
+
system: `You are a senior product manager reviewing and improving PRDs.
|
|
49
|
+
You focus on clarity, completeness, feasibility, and measurable outcomes.`,
|
|
50
|
+
template: (currentPRD, feedback) => `
|
|
51
|
+
Improve this PRD based on the feedback:
|
|
52
|
+
|
|
53
|
+
Current PRD:
|
|
54
|
+
${currentPRD}
|
|
55
|
+
|
|
56
|
+
Feedback:
|
|
57
|
+
"${feedback}"
|
|
58
|
+
|
|
59
|
+
Return the improved PRD maintaining the same structure but incorporating the feedback.
|
|
60
|
+
Focus on making it more specific, actionable, and complete.
|
|
61
|
+
`,
|
|
62
|
+
};
|
|
63
|
+
exports.taskGenerationPrompt = {
|
|
64
|
+
system: `You are a technical lead breaking down PRDs into actionable tasks.
|
|
65
|
+
You create clear, well-scoped tasks with appropriate dependencies and effort estimates.`,
|
|
66
|
+
template: (prdContent, customInstructions) => `
|
|
67
|
+
Parse this PRD into actionable tasks:
|
|
68
|
+
|
|
69
|
+
${prdContent}
|
|
70
|
+
|
|
71
|
+
${customInstructions ? `Special Instructions:\n${customInstructions}\n` : ""}
|
|
72
|
+
|
|
73
|
+
For each task, provide:
|
|
74
|
+
- Clear title
|
|
75
|
+
- Detailed description
|
|
76
|
+
- Estimated effort (small/medium/large)
|
|
77
|
+
- Dependencies (if any)
|
|
78
|
+
- Tags for categorization
|
|
79
|
+
|
|
80
|
+
Focus on creating tasks that are:
|
|
81
|
+
1. Actionable and specific
|
|
82
|
+
2. Appropriately sized (not too big or small)
|
|
83
|
+
3. Properly ordered by dependencies
|
|
84
|
+
4. Tagged for easy filtering
|
|
85
|
+
`,
|
|
86
|
+
};
|
|
87
|
+
exports.taskSplitPrompt = {
|
|
88
|
+
system: `You are a technical lead breaking down complex tasks into manageable subtasks.
|
|
89
|
+
You create well-scoped subtasks that can be completed independently when possible.`,
|
|
90
|
+
template: (taskTitle, taskContent, customInstructions) => `
|
|
91
|
+
Break down this task into subtasks:
|
|
92
|
+
|
|
93
|
+
Task: ${taskTitle}
|
|
94
|
+
Description: ${taskContent}
|
|
95
|
+
|
|
96
|
+
${customInstructions ? `Special Instructions:\n${customInstructions}\n` : ""}
|
|
97
|
+
|
|
98
|
+
Create subtasks that are:
|
|
99
|
+
1. Independently completable when possible
|
|
100
|
+
2. Appropriately sized (2-4 hours each)
|
|
101
|
+
3. Logically ordered
|
|
102
|
+
4. Include testing/validation steps
|
|
103
|
+
|
|
104
|
+
For each subtask provide: title, description, estimated effort, dependencies
|
|
105
|
+
`,
|
|
106
|
+
};
|
|
107
|
+
exports.taskPrioritizationPrompt = {
|
|
108
|
+
system: `You are a project manager prioritizing tasks for optimal execution.
|
|
109
|
+
You consider dependencies, risk, MVP scope, and team efficiency.`,
|
|
110
|
+
template: (tasks, userGuidance) => `
|
|
111
|
+
Prioritize these tasks:
|
|
112
|
+
|
|
113
|
+
${tasks
|
|
114
|
+
.map((t, i) => `${i + 1}. [${t.id}] ${t.title}${t.description ? `: ${t.description}` : ""}`)
|
|
115
|
+
.join("\n")}
|
|
116
|
+
|
|
117
|
+
User's Guidance:
|
|
118
|
+
"${userGuidance}"
|
|
119
|
+
|
|
120
|
+
Respond with JSON containing:
|
|
121
|
+
- prioritizedTasks: array of {id, priority (1=highest), reasoning}
|
|
122
|
+
- recommendations: overall execution strategy
|
|
123
|
+
|
|
124
|
+
Consider:
|
|
125
|
+
1. Dependencies (what must be done first)
|
|
126
|
+
2. MVP vs. nice-to-have
|
|
127
|
+
3. Risk and complexity
|
|
128
|
+
4. User's specific guidance
|
|
129
|
+
`,
|
|
130
|
+
};
|
package/dist/services/tasks.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { AIOptions } from "../utils/ai-config-builder";
|
|
2
2
|
import { Task, StreamingOptions } from "../types";
|
|
3
|
-
import { ProgressCallback } from "../types/callbacks";
|
|
4
3
|
import { CreateTaskResult, EnhanceTaskResult, SplitTaskResult, PlanTaskResult, DocumentTaskResult, DeleteTaskResult } from "../types/results";
|
|
5
4
|
/**
|
|
6
5
|
* TaskService - Centralized business logic for all task operations
|
|
@@ -15,7 +14,6 @@ export declare class TaskService {
|
|
|
15
14
|
aiEnhance?: boolean;
|
|
16
15
|
aiOptions?: AIOptions;
|
|
17
16
|
streamingOptions?: StreamingOptions;
|
|
18
|
-
callbacks?: ProgressCallback;
|
|
19
17
|
}): Promise<CreateTaskResult>;
|
|
20
18
|
listTasks(filters: {
|
|
21
19
|
status?: string;
|
|
@@ -46,10 +44,10 @@ export declare class TaskService {
|
|
|
46
44
|
priority?: string;
|
|
47
45
|
}): Promise<Task | null>;
|
|
48
46
|
getTaskTree(rootId?: string): Promise<Task[]>;
|
|
49
|
-
enhanceTask(taskId: string, aiOptions?: AIOptions, streamingOptions?: StreamingOptions
|
|
50
|
-
splitTask(taskId: string, aiOptions?: AIOptions, promptOverride?: string, messageOverride?: string, streamingOptions?: StreamingOptions,
|
|
51
|
-
documentTask(taskId: string, force?: boolean, aiOptions?: AIOptions, streamingOptions?: StreamingOptions
|
|
52
|
-
planTask(taskId: string, aiOptions?: AIOptions, streamingOptions?: StreamingOptions
|
|
47
|
+
enhanceTask(taskId: string, aiOptions?: AIOptions, streamingOptions?: StreamingOptions): Promise<EnhanceTaskResult>;
|
|
48
|
+
splitTask(taskId: string, aiOptions?: AIOptions, promptOverride?: string, messageOverride?: string, streamingOptions?: StreamingOptions, enableFilesystemTools?: boolean): Promise<SplitTaskResult>;
|
|
49
|
+
documentTask(taskId: string, force?: boolean, aiOptions?: AIOptions, streamingOptions?: StreamingOptions): Promise<DocumentTaskResult>;
|
|
50
|
+
planTask(taskId: string, aiOptions?: AIOptions, streamingOptions?: StreamingOptions): Promise<PlanTaskResult>;
|
|
53
51
|
getTaskDocumentation(taskId: string): Promise<string | null>;
|
|
54
52
|
addTaskDocumentationFromFile(taskId: string, filePath: string): Promise<{
|
|
55
53
|
filePath: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/services/tasks.ts"],"names":[],"mappings":"AAOA,OAAO,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EACL,IAAI,EACJ,gBAAgB,EAIjB,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/services/tasks.ts"],"names":[],"mappings":"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"}
|