task-o-matic 0.0.1 → 0.0.3
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/commands/prd.js +4 -0
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +69 -61
- package/dist/commands/tasks.js +93 -1
- package/dist/lib/ai-service/ai-operations.d.ts +5 -3
- package/dist/lib/ai-service/ai-operations.d.ts.map +1 -1
- package/dist/lib/ai-service/ai-operations.js +189 -20
- package/dist/lib/ai-service/filesystem-tools.d.ts +69 -0
- package/dist/lib/ai-service/filesystem-tools.d.ts.map +1 -0
- package/dist/lib/ai-service/filesystem-tools.js +70 -0
- package/dist/lib/ai-service/json-parser.d.ts +13 -0
- package/dist/lib/ai-service/json-parser.d.ts.map +1 -1
- package/dist/lib/ai-service/json-parser.js +66 -5
- package/dist/lib/executors/claude-code-executor.d.ts +6 -0
- package/dist/lib/executors/claude-code-executor.d.ts.map +1 -0
- package/dist/lib/executors/claude-code-executor.js +41 -0
- package/dist/lib/executors/codex-executor.d.ts +6 -0
- package/dist/lib/executors/codex-executor.d.ts.map +1 -0
- package/dist/lib/executors/codex-executor.js +41 -0
- package/dist/lib/executors/executor-factory.d.ts.map +1 -1
- package/dist/lib/executors/executor-factory.js +6 -3
- package/dist/lib/executors/gemini-executor.d.ts +6 -0
- package/dist/lib/executors/gemini-executor.d.ts.map +1 -0
- package/dist/lib/executors/gemini-executor.js +41 -0
- package/dist/lib/executors/opencode-executor.d.ts.map +1 -1
- package/dist/lib/executors/opencode-executor.js +2 -3
- package/dist/lib/prompt-builder.d.ts +8 -0
- package/dist/lib/prompt-builder.d.ts.map +1 -1
- package/dist/lib/prompt-builder.js +98 -0
- package/dist/lib/task-execution.d.ts.map +1 -1
- package/dist/lib/task-execution.js +44 -14
- package/dist/services/prd.d.ts +2 -0
- package/dist/services/prd.d.ts.map +1 -1
- package/dist/services/prd.js +4 -4
- package/dist/services/tasks.d.ts +10 -1
- package/dist/services/tasks.d.ts.map +1 -1
- package/dist/services/tasks.js +97 -2
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ 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
11
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
12
|
async function executeSingleTask(taskId, tool, dry) {
|
|
12
13
|
// Load task
|
|
@@ -15,19 +16,54 @@ async function executeSingleTask(taskId, tool, dry) {
|
|
|
15
16
|
throw new Error(`Task with ID ${taskId} not found`);
|
|
16
17
|
}
|
|
17
18
|
console.log(chalk_1.default.blue(`🎯 ${dry ? "DRY RUN" : "Executing"} task: ${task.title} (${taskId})`));
|
|
18
|
-
// Build execution message
|
|
19
|
-
|
|
19
|
+
// Build comprehensive execution message with full context
|
|
20
|
+
const contextBuilder = new context_builder_1.ContextBuilder();
|
|
21
|
+
const taskContext = await contextBuilder.buildContext(taskId);
|
|
22
|
+
// Build execution message with ALL context
|
|
23
|
+
const messageParts = [];
|
|
24
|
+
// Add task plan if available
|
|
20
25
|
const planData = await tasks_1.taskService.getTaskPlan(taskId);
|
|
21
26
|
if (planData) {
|
|
22
|
-
|
|
27
|
+
messageParts.push(`# Task Plan\n\n${planData.plan}\n`);
|
|
23
28
|
}
|
|
24
29
|
else {
|
|
25
|
-
|
|
30
|
+
messageParts.push(`# Task: ${task.title}\n\n${task.description || "No description"}\n`);
|
|
26
31
|
}
|
|
32
|
+
// Add PRD context if available
|
|
33
|
+
if (taskContext.prdContent) {
|
|
34
|
+
messageParts.push(`\n# Product Requirements Document\n\n${taskContext.prdContent}\n`);
|
|
35
|
+
}
|
|
36
|
+
// Add stack/technology context
|
|
37
|
+
if (taskContext.stack) {
|
|
38
|
+
messageParts.push(`\n# Technology Stack\n\n`);
|
|
39
|
+
messageParts.push(`- **Project**: ${taskContext.stack.projectName}\n`);
|
|
40
|
+
messageParts.push(`- **Frontend**: ${taskContext.stack.frontend}\n`);
|
|
41
|
+
messageParts.push(`- **Backend**: ${taskContext.stack.backend}\n`);
|
|
42
|
+
if (taskContext.stack.database !== "none") {
|
|
43
|
+
messageParts.push(`- **Database**: ${taskContext.stack.database}\n`);
|
|
44
|
+
}
|
|
45
|
+
if (taskContext.stack.orm !== "none") {
|
|
46
|
+
messageParts.push(`- **ORM**: ${taskContext.stack.orm}\n`);
|
|
47
|
+
}
|
|
48
|
+
messageParts.push(`- **Auth**: ${taskContext.stack.auth}\n`);
|
|
49
|
+
if (taskContext.stack.addons.length > 0) {
|
|
50
|
+
messageParts.push(`- **Addons**: ${taskContext.stack.addons.join(", ")}\n`);
|
|
51
|
+
}
|
|
52
|
+
messageParts.push(`- **Package Manager**: ${taskContext.stack.packageManager}\n`);
|
|
53
|
+
}
|
|
54
|
+
// Add documentation context if available
|
|
55
|
+
if (taskContext.documentation) {
|
|
56
|
+
messageParts.push(`\n# Documentation Context\n\n`);
|
|
57
|
+
messageParts.push(`${taskContext.documentation.recap}\n`);
|
|
58
|
+
if (taskContext.documentation.files.length > 0) {
|
|
59
|
+
messageParts.push(`\n**Relevant Documentation Files**:\n`);
|
|
60
|
+
taskContext.documentation.files.forEach((file) => {
|
|
61
|
+
messageParts.push(`- ${file.path}\n`);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
const executionMessage = messageParts.join('');
|
|
27
66
|
if (!dry) {
|
|
28
|
-
// console.log(chalk.yellow(`📝 Message that would be sent:`));
|
|
29
|
-
// console.log(chalk.cyan(executionMessage));
|
|
30
|
-
// } else {
|
|
31
67
|
// Update task status to in-progress
|
|
32
68
|
await tasks_1.taskService.setTaskStatus(taskId, "in-progress");
|
|
33
69
|
console.log(chalk_1.default.yellow("⏳ Task status updated to in-progress"));
|
|
@@ -35,7 +71,6 @@ async function executeSingleTask(taskId, tool, dry) {
|
|
|
35
71
|
try {
|
|
36
72
|
// Create executor and run
|
|
37
73
|
const executor = executor_factory_1.ExecutorFactory.create(tool);
|
|
38
|
-
console.log(chalk_1.default.cyan(`🔧 Using executor: ${executor.name}`));
|
|
39
74
|
await executor.execute(executionMessage, dry);
|
|
40
75
|
if (!dry) {
|
|
41
76
|
// Update task status to completed
|
|
@@ -95,17 +130,12 @@ async function executeTask(options) {
|
|
|
95
130
|
throw new Error(`Task with ID ${taskId} not found`);
|
|
96
131
|
}
|
|
97
132
|
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 {
|
|
133
|
+
if (!dry) {
|
|
103
134
|
await tasks_1.taskService.setTaskStatus(taskId, "in-progress");
|
|
104
135
|
console.log(chalk_1.default.yellow("⏳ Task status updated to in-progress"));
|
|
105
136
|
}
|
|
106
137
|
try {
|
|
107
138
|
const executor = executor_factory_1.ExecutorFactory.create(tool);
|
|
108
|
-
console.log(chalk_1.default.cyan(`🔧 Using executor: ${executor.name}`));
|
|
109
139
|
await executor.execute(message, dry);
|
|
110
140
|
if (!dry) {
|
|
111
141
|
await tasks_1.taskService.setTaskStatus(taskId, "completed");
|
package/dist/services/prd.d.ts
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/services/prd.js
CHANGED
|
@@ -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...',
|
package/dist/services/tasks.d.ts
CHANGED
|
@@ -47,9 +47,18 @@ export declare class TaskService {
|
|
|
47
47
|
}): Promise<Task | null>;
|
|
48
48
|
getTaskTree(rootId?: string): Promise<Task[]>;
|
|
49
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>;
|
|
50
|
+
splitTask(taskId: string, aiOptions?: AIOptions, promptOverride?: string, messageOverride?: string, streamingOptions?: StreamingOptions, callbacks?: ProgressCallback, enableFilesystemTools?: boolean): Promise<SplitTaskResult>;
|
|
51
51
|
documentTask(taskId: string, force?: boolean, aiOptions?: AIOptions, streamingOptions?: StreamingOptions, callbacks?: ProgressCallback): Promise<DocumentTaskResult>;
|
|
52
52
|
planTask(taskId: string, aiOptions?: AIOptions, streamingOptions?: StreamingOptions, callbacks?: ProgressCallback): Promise<PlanTaskResult>;
|
|
53
|
+
getTaskDocumentation(taskId: string): Promise<string | null>;
|
|
54
|
+
addTaskDocumentationFromFile(taskId: string, filePath: string): Promise<{
|
|
55
|
+
filePath: string;
|
|
56
|
+
task: Task;
|
|
57
|
+
}>;
|
|
58
|
+
setTaskPlan(taskId: string, planText?: string, planFilePath?: string): Promise<{
|
|
59
|
+
planFile: string;
|
|
60
|
+
task: Task;
|
|
61
|
+
}>;
|
|
53
62
|
getTaskPlan(taskId: string): Promise<{
|
|
54
63
|
plan: string;
|
|
55
64
|
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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"}
|
package/dist/services/tasks.js
CHANGED
|
@@ -1,4 +1,37 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
2
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
36
|
exports.taskService = exports.TaskService = void 0;
|
|
4
37
|
const ai_service_factory_1 = require("../utils/ai-service-factory");
|
|
@@ -323,7 +356,7 @@ class TaskService {
|
|
|
323
356
|
},
|
|
324
357
|
};
|
|
325
358
|
}
|
|
326
|
-
async splitTask(taskId, aiOptions, promptOverride, messageOverride, streamingOptions, callbacks) {
|
|
359
|
+
async splitTask(taskId, aiOptions, promptOverride, messageOverride, streamingOptions, callbacks, enableFilesystemTools) {
|
|
327
360
|
const startTime = Date.now();
|
|
328
361
|
callbacks?.onProgress?.({
|
|
329
362
|
type: 'started',
|
|
@@ -353,7 +386,7 @@ class TaskService {
|
|
|
353
386
|
message: 'Calling AI to break down task...',
|
|
354
387
|
});
|
|
355
388
|
// Use AI service to break down the task with enhanced context
|
|
356
|
-
const subtaskData = await (0, ai_service_factory_1.getAIOperations)().breakdownTask(task, breakdownAIConfig, promptOverride, messageOverride, streamingOptions, undefined, fullContent, stackInfo, existingSubtasks);
|
|
389
|
+
const subtaskData = await (0, ai_service_factory_1.getAIOperations)().breakdownTask(task, breakdownAIConfig, promptOverride, messageOverride, streamingOptions, undefined, fullContent, stackInfo, existingSubtasks, enableFilesystemTools);
|
|
357
390
|
callbacks?.onProgress?.({
|
|
358
391
|
type: 'progress',
|
|
359
392
|
message: `Creating ${subtaskData.length} subtasks...`,
|
|
@@ -579,6 +612,68 @@ class TaskService {
|
|
|
579
612
|
};
|
|
580
613
|
}
|
|
581
614
|
// ============================================================================
|
|
615
|
+
// DOCUMENTATION OPERATIONS
|
|
616
|
+
// ============================================================================
|
|
617
|
+
async getTaskDocumentation(taskId) {
|
|
618
|
+
return (0, ai_service_factory_1.getStorage)().getTaskDocumentation(taskId);
|
|
619
|
+
}
|
|
620
|
+
async addTaskDocumentationFromFile(taskId, filePath) {
|
|
621
|
+
const task = await this.getTask(taskId);
|
|
622
|
+
if (!task) {
|
|
623
|
+
throw new Error(`Task with ID ${taskId} not found`);
|
|
624
|
+
}
|
|
625
|
+
try {
|
|
626
|
+
const { readFileSync, existsSync } = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
627
|
+
const { resolve } = await Promise.resolve().then(() => __importStar(require('path')));
|
|
628
|
+
const resolvedPath = resolve(filePath);
|
|
629
|
+
if (!existsSync(resolvedPath)) {
|
|
630
|
+
throw new Error(`Documentation file not found: ${filePath}`);
|
|
631
|
+
}
|
|
632
|
+
const content = readFileSync(resolvedPath, 'utf-8');
|
|
633
|
+
const savedPath = await (0, ai_service_factory_1.getStorage)().saveTaskDocumentation(taskId, content);
|
|
634
|
+
return {
|
|
635
|
+
filePath: savedPath,
|
|
636
|
+
task,
|
|
637
|
+
};
|
|
638
|
+
}
|
|
639
|
+
catch (error) {
|
|
640
|
+
throw new Error(`Failed to add documentation from file: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
641
|
+
}
|
|
642
|
+
}
|
|
643
|
+
async setTaskPlan(taskId, planText, planFilePath) {
|
|
644
|
+
const task = await this.getTask(taskId);
|
|
645
|
+
if (!task) {
|
|
646
|
+
throw new Error(`Task with ID ${taskId} not found`);
|
|
647
|
+
}
|
|
648
|
+
let plan;
|
|
649
|
+
if (planFilePath) {
|
|
650
|
+
try {
|
|
651
|
+
const { readFileSync, existsSync } = await Promise.resolve().then(() => __importStar(require('fs')));
|
|
652
|
+
const { resolve } = await Promise.resolve().then(() => __importStar(require('path')));
|
|
653
|
+
const resolvedPath = resolve(planFilePath);
|
|
654
|
+
if (!existsSync(resolvedPath)) {
|
|
655
|
+
throw new Error(`Plan file not found: ${planFilePath}`);
|
|
656
|
+
}
|
|
657
|
+
plan = readFileSync(resolvedPath, 'utf-8');
|
|
658
|
+
}
|
|
659
|
+
catch (error) {
|
|
660
|
+
throw new Error(`Failed to read plan file: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
else if (planText) {
|
|
664
|
+
plan = planText;
|
|
665
|
+
}
|
|
666
|
+
else {
|
|
667
|
+
throw new Error('Either planText or planFilePath must be provided');
|
|
668
|
+
}
|
|
669
|
+
await (0, ai_service_factory_1.getStorage)().savePlan(taskId, plan);
|
|
670
|
+
const planFile = `plans/${taskId}.md`;
|
|
671
|
+
return {
|
|
672
|
+
planFile,
|
|
673
|
+
task,
|
|
674
|
+
};
|
|
675
|
+
}
|
|
676
|
+
// ============================================================================
|
|
582
677
|
// PLAN OPERATIONS
|
|
583
678
|
// ============================================================================
|
|
584
679
|
async getTaskPlan(taskId) {
|