task-o-matic 0.0.3 → 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 (105) hide show
  1. package/README.md +96 -40
  2. package/dist/commands/tasks/create.d.ts +3 -0
  3. package/dist/commands/tasks/create.d.ts.map +1 -0
  4. package/dist/commands/tasks/create.js +58 -0
  5. package/dist/commands/tasks/delete.d.ts +3 -0
  6. package/dist/commands/tasks/delete.d.ts.map +1 -0
  7. package/dist/commands/tasks/delete.js +40 -0
  8. package/dist/commands/tasks/document.d.ts +5 -0
  9. package/dist/commands/tasks/document.d.ts.map +1 -0
  10. package/dist/commands/tasks/document.js +118 -0
  11. package/dist/commands/tasks/enhance.d.ts +3 -0
  12. package/dist/commands/tasks/enhance.d.ts.map +1 -0
  13. package/dist/commands/tasks/enhance.js +86 -0
  14. package/dist/commands/tasks/execute.d.ts +3 -0
  15. package/dist/commands/tasks/execute.d.ts.map +1 -0
  16. package/dist/commands/tasks/execute.js +33 -0
  17. package/dist/commands/tasks/index.d.ts +16 -0
  18. package/dist/commands/tasks/index.d.ts.map +1 -0
  19. package/dist/commands/tasks/index.js +31 -0
  20. package/dist/commands/tasks/list.d.ts +3 -0
  21. package/dist/commands/tasks/list.d.ts.map +1 -0
  22. package/dist/commands/tasks/list.js +27 -0
  23. package/dist/commands/tasks/next.d.ts +3 -0
  24. package/dist/commands/tasks/next.d.ts.map +1 -0
  25. package/dist/commands/tasks/next.js +44 -0
  26. package/dist/commands/tasks/plan.d.ts +7 -0
  27. package/dist/commands/tasks/plan.d.ts.map +1 -0
  28. package/dist/commands/tasks/plan.js +131 -0
  29. package/dist/commands/tasks/show.d.ts +3 -0
  30. package/dist/commands/tasks/show.d.ts.map +1 -0
  31. package/dist/commands/tasks/show.js +23 -0
  32. package/dist/commands/tasks/split.d.ts +3 -0
  33. package/dist/commands/tasks/split.d.ts.map +1 -0
  34. package/dist/commands/tasks/split.js +95 -0
  35. package/dist/commands/tasks/status.d.ts +3 -0
  36. package/dist/commands/tasks/status.d.ts.map +1 -0
  37. package/dist/commands/tasks/status.js +26 -0
  38. package/dist/commands/tasks/subtasks.d.ts +3 -0
  39. package/dist/commands/tasks/subtasks.d.ts.map +1 -0
  40. package/dist/commands/tasks/subtasks.js +35 -0
  41. package/dist/commands/tasks/tags.d.ts +4 -0
  42. package/dist/commands/tasks/tags.d.ts.map +1 -0
  43. package/dist/commands/tasks/tags.js +37 -0
  44. package/dist/commands/tasks/tree.d.ts +3 -0
  45. package/dist/commands/tasks/tree.d.ts.map +1 -0
  46. package/dist/commands/tasks/tree.js +20 -0
  47. package/dist/commands/tasks/update.d.ts +3 -0
  48. package/dist/commands/tasks/update.d.ts.map +1 -0
  49. package/dist/commands/tasks/update.js +35 -0
  50. package/dist/commands/tasks.d.ts.map +1 -1
  51. package/dist/commands/tasks.js +23 -686
  52. package/dist/commands/workflow.d.ts +4 -0
  53. package/dist/commands/workflow.d.ts.map +1 -0
  54. package/dist/commands/workflow.js +434 -0
  55. package/dist/index.d.ts.map +1 -1
  56. package/dist/index.js +3 -1
  57. package/dist/lib/ai-service/ai-operations.d.ts.map +1 -1
  58. package/dist/lib/ai-service/ai-operations.js +54 -22
  59. package/dist/lib/ai-service/research-tools.d.ts.map +1 -1
  60. package/dist/lib/ai-service/research-tools.js +2 -2
  61. package/dist/lib/context-builder.d.ts +2 -1
  62. package/dist/lib/context-builder.d.ts.map +1 -1
  63. package/dist/lib/context-builder.js +3 -8
  64. package/dist/lib/hooks/logger.d.ts +2 -0
  65. package/dist/lib/hooks/logger.d.ts.map +1 -0
  66. package/dist/lib/hooks/logger.js +27 -0
  67. package/dist/lib/hooks.d.ts +64 -0
  68. package/dist/lib/hooks.d.ts.map +1 -0
  69. package/dist/lib/hooks.js +60 -0
  70. package/dist/lib/index.d.ts +18 -17
  71. package/dist/lib/index.d.ts.map +1 -1
  72. package/dist/lib/index.js +3 -3
  73. package/dist/lib/prompt-builder.d.ts.map +1 -1
  74. package/dist/lib/prompt-builder.js +16 -8
  75. package/dist/lib/{storage.d.ts → storage/file-system.d.ts} +4 -3
  76. package/dist/lib/storage/file-system.d.ts.map +1 -0
  77. package/dist/lib/{storage.js → storage/file-system.js} +141 -152
  78. package/dist/lib/storage/types.d.ts +43 -0
  79. package/dist/lib/storage/types.d.ts.map +1 -0
  80. package/dist/lib/storage/types.js +2 -0
  81. package/dist/lib/task-execution.d.ts.map +1 -1
  82. package/dist/lib/task-execution.js +22 -3
  83. package/dist/prompts/workflow-assistance.d.ts +32 -0
  84. package/dist/prompts/workflow-assistance.d.ts.map +1 -0
  85. package/dist/prompts/workflow-assistance.js +130 -0
  86. package/dist/services/tasks.d.ts +4 -6
  87. package/dist/services/tasks.d.ts.map +1 -1
  88. package/dist/services/tasks.js +115 -96
  89. package/dist/services/workflow-ai-assistant.d.ts +74 -0
  90. package/dist/services/workflow-ai-assistant.d.ts.map +1 -0
  91. package/dist/services/workflow-ai-assistant.js +223 -0
  92. package/dist/test/hooks.test.d.ts +2 -0
  93. package/dist/test/hooks.test.d.ts.map +1 -0
  94. package/dist/test/hooks.test.js +58 -0
  95. package/dist/test/storage.test.js +16 -16
  96. package/dist/types/options.d.ts +35 -0
  97. package/dist/types/options.d.ts.map +1 -1
  98. package/dist/utils/ai-service-factory.d.ts +5 -5
  99. package/dist/utils/ai-service-factory.d.ts.map +1 -1
  100. package/dist/utils/ai-service-factory.js +4 -3
  101. package/dist/utils/workflow-prompts.d.ts +17 -0
  102. package/dist/utils/workflow-prompts.d.ts.map +1 -0
  103. package/dist/utils/workflow-prompts.js +88 -0
  104. package/package.json +2 -2
  105. 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;AAoK5D,wBAAsB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD5E"}
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 context_builder_1 = require("./context-builder");
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 = new context_builder_1.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;
@@ -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
+ };
@@ -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, callbacks?: ProgressCallback): Promise<EnhanceTaskResult>;
50
- splitTask(taskId: string, aiOptions?: AIOptions, promptOverride?: string, messageOverride?: string, streamingOptions?: StreamingOptions, callbacks?: ProgressCallback, enableFilesystemTools?: boolean): 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>;
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":"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"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/services/tasks.ts"],"names":[],"mappings":"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"}