task-o-matic 0.0.2 → 0.0.4

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.
Files changed (129) hide show
  1. package/README.md +96 -40
  2. package/dist/commands/prd.js +4 -0
  3. package/dist/commands/prompt.d.ts.map +1 -1
  4. package/dist/commands/prompt.js +69 -61
  5. package/dist/commands/tasks/create.d.ts +3 -0
  6. package/dist/commands/tasks/create.d.ts.map +1 -0
  7. package/dist/commands/tasks/create.js +58 -0
  8. package/dist/commands/tasks/delete.d.ts +3 -0
  9. package/dist/commands/tasks/delete.d.ts.map +1 -0
  10. package/dist/commands/tasks/delete.js +40 -0
  11. package/dist/commands/tasks/document.d.ts +5 -0
  12. package/dist/commands/tasks/document.d.ts.map +1 -0
  13. package/dist/commands/tasks/document.js +118 -0
  14. package/dist/commands/tasks/enhance.d.ts +3 -0
  15. package/dist/commands/tasks/enhance.d.ts.map +1 -0
  16. package/dist/commands/tasks/enhance.js +86 -0
  17. package/dist/commands/tasks/execute.d.ts +3 -0
  18. package/dist/commands/tasks/execute.d.ts.map +1 -0
  19. package/dist/commands/tasks/execute.js +33 -0
  20. package/dist/commands/tasks/index.d.ts +16 -0
  21. package/dist/commands/tasks/index.d.ts.map +1 -0
  22. package/dist/commands/tasks/index.js +31 -0
  23. package/dist/commands/tasks/list.d.ts +3 -0
  24. package/dist/commands/tasks/list.d.ts.map +1 -0
  25. package/dist/commands/tasks/list.js +27 -0
  26. package/dist/commands/tasks/next.d.ts +3 -0
  27. package/dist/commands/tasks/next.d.ts.map +1 -0
  28. package/dist/commands/tasks/next.js +44 -0
  29. package/dist/commands/tasks/plan.d.ts +7 -0
  30. package/dist/commands/tasks/plan.d.ts.map +1 -0
  31. package/dist/commands/tasks/plan.js +131 -0
  32. package/dist/commands/tasks/show.d.ts +3 -0
  33. package/dist/commands/tasks/show.d.ts.map +1 -0
  34. package/dist/commands/tasks/show.js +23 -0
  35. package/dist/commands/tasks/split.d.ts +3 -0
  36. package/dist/commands/tasks/split.d.ts.map +1 -0
  37. package/dist/commands/tasks/split.js +95 -0
  38. package/dist/commands/tasks/status.d.ts +3 -0
  39. package/dist/commands/tasks/status.d.ts.map +1 -0
  40. package/dist/commands/tasks/status.js +26 -0
  41. package/dist/commands/tasks/subtasks.d.ts +3 -0
  42. package/dist/commands/tasks/subtasks.d.ts.map +1 -0
  43. package/dist/commands/tasks/subtasks.js +35 -0
  44. package/dist/commands/tasks/tags.d.ts +4 -0
  45. package/dist/commands/tasks/tags.d.ts.map +1 -0
  46. package/dist/commands/tasks/tags.js +37 -0
  47. package/dist/commands/tasks/tree.d.ts +3 -0
  48. package/dist/commands/tasks/tree.d.ts.map +1 -0
  49. package/dist/commands/tasks/tree.js +20 -0
  50. package/dist/commands/tasks/update.d.ts +3 -0
  51. package/dist/commands/tasks/update.d.ts.map +1 -0
  52. package/dist/commands/tasks/update.js +35 -0
  53. package/dist/commands/tasks.d.ts.map +1 -1
  54. package/dist/commands/tasks.js +23 -594
  55. package/dist/commands/workflow.d.ts +4 -0
  56. package/dist/commands/workflow.d.ts.map +1 -0
  57. package/dist/commands/workflow.js +434 -0
  58. package/dist/index.d.ts.map +1 -1
  59. package/dist/index.js +3 -1
  60. package/dist/lib/ai-service/ai-operations.d.ts +5 -3
  61. package/dist/lib/ai-service/ai-operations.d.ts.map +1 -1
  62. package/dist/lib/ai-service/ai-operations.js +231 -30
  63. package/dist/lib/ai-service/filesystem-tools.d.ts +69 -0
  64. package/dist/lib/ai-service/filesystem-tools.d.ts.map +1 -0
  65. package/dist/lib/ai-service/filesystem-tools.js +70 -0
  66. package/dist/lib/ai-service/research-tools.d.ts.map +1 -1
  67. package/dist/lib/ai-service/research-tools.js +2 -2
  68. package/dist/lib/context-builder.d.ts +2 -1
  69. package/dist/lib/context-builder.d.ts.map +1 -1
  70. package/dist/lib/context-builder.js +3 -8
  71. package/dist/lib/executors/claude-code-executor.d.ts +6 -0
  72. package/dist/lib/executors/claude-code-executor.d.ts.map +1 -0
  73. package/dist/lib/executors/claude-code-executor.js +41 -0
  74. package/dist/lib/executors/codex-executor.d.ts +6 -0
  75. package/dist/lib/executors/codex-executor.d.ts.map +1 -0
  76. package/dist/lib/executors/codex-executor.js +41 -0
  77. package/dist/lib/executors/executor-factory.d.ts.map +1 -1
  78. package/dist/lib/executors/executor-factory.js +6 -3
  79. package/dist/lib/executors/gemini-executor.d.ts +6 -0
  80. package/dist/lib/executors/gemini-executor.d.ts.map +1 -0
  81. package/dist/lib/executors/gemini-executor.js +41 -0
  82. package/dist/lib/executors/opencode-executor.d.ts.map +1 -1
  83. package/dist/lib/executors/opencode-executor.js +2 -3
  84. package/dist/lib/hooks/logger.d.ts +2 -0
  85. package/dist/lib/hooks/logger.d.ts.map +1 -0
  86. package/dist/lib/hooks/logger.js +27 -0
  87. package/dist/lib/hooks.d.ts +64 -0
  88. package/dist/lib/hooks.d.ts.map +1 -0
  89. package/dist/lib/hooks.js +60 -0
  90. package/dist/lib/index.d.ts +18 -17
  91. package/dist/lib/index.d.ts.map +1 -1
  92. package/dist/lib/index.js +3 -3
  93. package/dist/lib/prompt-builder.d.ts +8 -0
  94. package/dist/lib/prompt-builder.d.ts.map +1 -1
  95. package/dist/lib/prompt-builder.js +110 -4
  96. package/dist/lib/{storage.d.ts → storage/file-system.d.ts} +4 -3
  97. package/dist/lib/storage/file-system.d.ts.map +1 -0
  98. package/dist/lib/{storage.js → storage/file-system.js} +141 -152
  99. package/dist/lib/storage/types.d.ts +43 -0
  100. package/dist/lib/storage/types.d.ts.map +1 -0
  101. package/dist/lib/storage/types.js +2 -0
  102. package/dist/lib/task-execution.d.ts.map +1 -1
  103. package/dist/lib/task-execution.js +63 -14
  104. package/dist/prompts/workflow-assistance.d.ts +32 -0
  105. package/dist/prompts/workflow-assistance.d.ts.map +1 -0
  106. package/dist/prompts/workflow-assistance.js +130 -0
  107. package/dist/services/prd.d.ts +2 -0
  108. package/dist/services/prd.d.ts.map +1 -1
  109. package/dist/services/prd.js +4 -4
  110. package/dist/services/tasks.d.ts +13 -6
  111. package/dist/services/tasks.d.ts.map +1 -1
  112. package/dist/services/tasks.js +202 -88
  113. package/dist/services/workflow-ai-assistant.d.ts +74 -0
  114. package/dist/services/workflow-ai-assistant.d.ts.map +1 -0
  115. package/dist/services/workflow-ai-assistant.js +223 -0
  116. package/dist/test/hooks.test.d.ts +2 -0
  117. package/dist/test/hooks.test.d.ts.map +1 -0
  118. package/dist/test/hooks.test.js +58 -0
  119. package/dist/test/storage.test.js +16 -16
  120. package/dist/types/options.d.ts +35 -0
  121. package/dist/types/options.d.ts.map +1 -1
  122. package/dist/utils/ai-service-factory.d.ts +5 -5
  123. package/dist/utils/ai-service-factory.d.ts.map +1 -1
  124. package/dist/utils/ai-service-factory.js +4 -3
  125. package/dist/utils/workflow-prompts.d.ts +17 -0
  126. package/dist/utils/workflow-prompts.d.ts.map +1 -0
  127. package/dist/utils/workflow-prompts.js +88 -0
  128. package/package.json +2 -2
  129. 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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"}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -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;AA2H5D,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D5E"}
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,6 +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 ai_service_factory_1 = require("../utils/ai-service-factory");
11
+ const hooks_1 = require("./hooks");
10
12
  const chalk_1 = __importDefault(require("chalk"));
11
13
  async function executeSingleTask(taskId, tool, dry) {
12
14
  // Load task
@@ -15,35 +17,78 @@ async function executeSingleTask(taskId, tool, dry) {
15
17
  throw new Error(`Task with ID ${taskId} not found`);
16
18
  }
17
19
  console.log(chalk_1.default.blue(`🎯 ${dry ? "DRY RUN" : "Executing"} task: ${task.title} (${taskId})`));
18
- // Build execution message
19
- let executionMessage;
20
+ // Build comprehensive execution message with full context
21
+ const contextBuilder = (0, ai_service_factory_1.getContextBuilder)();
22
+ const taskContext = await contextBuilder.buildContext(taskId);
23
+ // Build execution message with ALL context
24
+ const messageParts = [];
25
+ // Add task plan if available
20
26
  const planData = await tasks_1.taskService.getTaskPlan(taskId);
21
27
  if (planData) {
22
- executionMessage = `Execute this task plan:\n\n${planData.plan}`;
28
+ messageParts.push(`# Task Plan\n\n${planData.plan}\n`);
23
29
  }
24
30
  else {
25
- executionMessage = `Execute this task: ${task.title}\n\nDescription: ${task.description || "No description"}`;
31
+ messageParts.push(`# Task: ${task.title}\n\n${task.description || "No description"}\n`);
26
32
  }
33
+ // Add PRD context if available
34
+ if (taskContext.prdContent) {
35
+ messageParts.push(`\n# Product Requirements Document\n\n${taskContext.prdContent}\n`);
36
+ }
37
+ // Add stack/technology context
38
+ if (taskContext.stack) {
39
+ messageParts.push(`\n# Technology Stack\n\n`);
40
+ messageParts.push(`- **Project**: ${taskContext.stack.projectName}\n`);
41
+ messageParts.push(`- **Frontend**: ${taskContext.stack.frontend}\n`);
42
+ messageParts.push(`- **Backend**: ${taskContext.stack.backend}\n`);
43
+ if (taskContext.stack.database !== "none") {
44
+ messageParts.push(`- **Database**: ${taskContext.stack.database}\n`);
45
+ }
46
+ if (taskContext.stack.orm !== "none") {
47
+ messageParts.push(`- **ORM**: ${taskContext.stack.orm}\n`);
48
+ }
49
+ messageParts.push(`- **Auth**: ${taskContext.stack.auth}\n`);
50
+ if (taskContext.stack.addons.length > 0) {
51
+ messageParts.push(`- **Addons**: ${taskContext.stack.addons.join(", ")}\n`);
52
+ }
53
+ messageParts.push(`- **Package Manager**: ${taskContext.stack.packageManager}\n`);
54
+ }
55
+ // Add documentation context if available
56
+ if (taskContext.documentation) {
57
+ messageParts.push(`\n# Documentation Context\n\n`);
58
+ messageParts.push(`${taskContext.documentation.recap}\n`);
59
+ if (taskContext.documentation.files.length > 0) {
60
+ messageParts.push(`\n**Relevant Documentation Files**:\n`);
61
+ taskContext.documentation.files.forEach((file) => {
62
+ messageParts.push(`- ${file.path}\n`);
63
+ });
64
+ }
65
+ }
66
+ const executionMessage = messageParts.join("");
27
67
  if (!dry) {
28
- // console.log(chalk.yellow(`📝 Message that would be sent:`));
29
- // console.log(chalk.cyan(executionMessage));
30
- // } else {
31
68
  // Update task status to in-progress
32
69
  await tasks_1.taskService.setTaskStatus(taskId, "in-progress");
33
70
  console.log(chalk_1.default.yellow("⏳ Task status updated to in-progress"));
34
71
  }
72
+ // Emit execution:start event
73
+ await hooks_1.hooks.emit("execution:start", { taskId, tool });
35
74
  try {
36
75
  // Create executor and run
37
76
  const executor = executor_factory_1.ExecutorFactory.create(tool);
38
- console.log(chalk_1.default.cyan(`🔧 Using executor: ${executor.name}`));
39
77
  await executor.execute(executionMessage, dry);
40
78
  if (!dry) {
41
79
  // Update task status to completed
42
80
  await tasks_1.taskService.setTaskStatus(taskId, "completed");
43
81
  console.log(chalk_1.default.green("✅ Task execution completed successfully"));
44
82
  }
83
+ // Emit execution:end event
84
+ await hooks_1.hooks.emit("execution:end", { taskId, success: true });
45
85
  }
46
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
+ });
47
92
  if (!dry) {
48
93
  // Update task status back to todo on failure
49
94
  await tasks_1.taskService.setTaskStatus(taskId, "todo");
@@ -95,22 +140,21 @@ async function executeTask(options) {
95
140
  throw new Error(`Task with ID ${taskId} not found`);
96
141
  }
97
142
  console.log(chalk_1.default.blue(`🎯 ${dry ? "DRY RUN - Would execute" : "Executing"} task with custom message: ${task.title} (${taskId})`));
98
- if (dry) {
99
- console.log(chalk_1.default.yellow(`📝 Custom message that would be sent:`));
100
- console.log(chalk_1.default.cyan(message));
101
- }
102
- else {
143
+ if (!dry) {
103
144
  await tasks_1.taskService.setTaskStatus(taskId, "in-progress");
104
145
  console.log(chalk_1.default.yellow("⏳ Task status updated to in-progress"));
105
146
  }
147
+ // Emit execution:start event
148
+ await hooks_1.hooks.emit("execution:start", { taskId, tool });
106
149
  try {
107
150
  const executor = executor_factory_1.ExecutorFactory.create(tool);
108
- console.log(chalk_1.default.cyan(`🔧 Using executor: ${executor.name}`));
109
151
  await executor.execute(message, dry);
110
152
  if (!dry) {
111
153
  await tasks_1.taskService.setTaskStatus(taskId, "completed");
112
154
  console.log(chalk_1.default.green("✅ Task execution completed successfully"));
113
155
  }
156
+ // Emit execution:end event
157
+ await hooks_1.hooks.emit("execution:end", { taskId, success: true });
114
158
  // Run validations after task completion
115
159
  await (0, validation_1.runValidations)(validate, dry);
116
160
  }
@@ -119,6 +163,11 @@ async function executeTask(options) {
119
163
  await tasks_1.taskService.setTaskStatus(taskId, "todo");
120
164
  console.log(chalk_1.default.red("❌ Task execution failed, status reset to todo"));
121
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
+ });
122
171
  throw error;
123
172
  }
124
173
  return;
@@ -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
+ };
@@ -10,6 +10,7 @@ export declare class PRDService {
10
10
  parsePRD(input: {
11
11
  file: string;
12
12
  workingDirectory?: string;
13
+ enableFilesystemTools?: boolean;
13
14
  aiOptions?: AIOptions;
14
15
  promptOverride?: string;
15
16
  messageOverride?: string;
@@ -21,6 +22,7 @@ export declare class PRDService {
21
22
  feedback: string;
22
23
  output?: string;
23
24
  workingDirectory?: string;
25
+ enableFilesystemTools?: boolean;
24
26
  aiOptions?: AIOptions;
25
27
  promptOverride?: string;
26
28
  messageOverride?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../src/services/prd.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAY,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,UAAU;IAEf,QAAQ,CAAC,KAAK,EAAE;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,SAAS,CAAC,EAAE,gBAAgB,CAAC;KAC9B,GAAG,OAAO,CAAC,cAAc,CAAC;IA+KrB,SAAS,CAAC,KAAK,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,SAAS,CAAC,EAAE,gBAAgB,CAAC;KAC9B,GAAG,OAAO,CAAC,MAAM,CAAC;CA4DpB;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
1
+ {"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../src/services/prd.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,EAAY,gBAAgB,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAGlD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEtD;;;GAGG;AACH,qBAAa,UAAU;IAEf,QAAQ,CAAC,KAAK,EAAE;QACpB,IAAI,EAAE,MAAM,CAAC;QACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,SAAS,CAAC,EAAE,gBAAgB,CAAC;KAC9B,GAAG,OAAO,CAAC,cAAc,CAAC;IAgLrB,SAAS,CAAC,KAAK,EAAE;QACrB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,gBAAgB,CAAC,EAAE,MAAM,CAAC;QAC1B,qBAAqB,CAAC,EAAE,OAAO,CAAC;QAChC,SAAS,CAAC,EAAE,SAAS,CAAC;QACtB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;QACpC,SAAS,CAAC,EAAE,gBAAgB,CAAC;KAC9B,GAAG,OAAO,CAAC,MAAM,CAAC;CA6DpB;AAGD,eAAO,MAAM,UAAU,YAAmB,CAAC"}
@@ -69,8 +69,8 @@ class PRDService {
69
69
  });
70
70
  const stepStart2 = Date.now();
71
71
  const result = await (0, ai_service_factory_1.getAIOperations)().parsePRD(prdContent, aiConfig, input.promptOverride, input.messageOverride, input.streamingOptions, undefined, // retryConfig
72
- workingDir // Pass working directory to AI operations
73
- );
72
+ workingDir, // Pass working directory to AI operations
73
+ input.enableFilesystemTools);
74
74
  steps.push({
75
75
  step: 'AI Parsing',
76
76
  status: 'completed',
@@ -171,8 +171,8 @@ class PRDService {
171
171
  message: 'Calling AI to improve PRD...',
172
172
  });
173
173
  const improvedPRD = await (0, ai_service_factory_1.getAIOperations)().reworkPRD(prdContent, input.feedback, aiConfig, input.promptOverride, input.messageOverride, input.streamingOptions, undefined, // retryConfig
174
- workingDir // Pass working directory to AI operations
175
- );
174
+ workingDir, // Pass working directory to AI operations
175
+ input.enableFilesystemTools);
176
176
  input.callbacks?.onProgress?.({
177
177
  type: 'progress',
178
178
  message: 'Saving improved PRD...',
@@ -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,19 @@ 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, callbacks?: ProgressCallback): Promise<EnhanceTaskResult>;
50
- splitTask(taskId: string, aiOptions?: AIOptions, promptOverride?: string, messageOverride?: string, streamingOptions?: StreamingOptions, callbacks?: ProgressCallback): Promise<SplitTaskResult>;
51
- documentTask(taskId: string, force?: boolean, aiOptions?: AIOptions, streamingOptions?: StreamingOptions, callbacks?: ProgressCallback): Promise<DocumentTaskResult>;
52
- planTask(taskId: string, aiOptions?: AIOptions, streamingOptions?: StreamingOptions, callbacks?: ProgressCallback): Promise<PlanTaskResult>;
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>;
51
+ getTaskDocumentation(taskId: string): Promise<string | null>;
52
+ addTaskDocumentationFromFile(taskId: string, filePath: string): Promise<{
53
+ filePath: string;
54
+ task: Task;
55
+ }>;
56
+ setTaskPlan(taskId: string, planText?: string, planFilePath?: string): Promise<{
57
+ planFile: string;
58
+ task: Task;
59
+ }>;
53
60
  getTaskPlan(taskId: string): Promise<{
54
61
  plan: string;
55
62
  createdAt: number;
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/services/tasks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/services/tasks.ts"],"names":[],"mappings":"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"}