task-o-matic 0.0.14 → 0.0.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/display/progress.d.ts +15 -2
- package/dist/cli/display/progress.d.ts.map +1 -1
- package/dist/cli/display/progress.js +72 -4
- package/dist/commands/benchmark.d.ts.map +1 -1
- package/dist/commands/benchmark.js +11 -3
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +19 -4
- package/dist/commands/prd.js +7 -1
- package/dist/commands/tasks/delete.d.ts.map +1 -1
- package/dist/commands/tasks/delete.js +2 -1
- package/dist/commands/tasks/document/add.d.ts.map +1 -1
- package/dist/commands/tasks/document/add.js +2 -1
- package/dist/commands/tasks/document/get.d.ts.map +1 -1
- package/dist/commands/tasks/document/get.js +2 -1
- package/dist/commands/tasks/plan/set.d.ts.map +1 -1
- package/dist/commands/tasks/plan/set.js +11 -3
- package/dist/commands/tasks/show.d.ts.map +1 -1
- package/dist/commands/tasks/show.js +2 -1
- package/dist/commands/tasks/status.d.ts.map +1 -1
- package/dist/commands/tasks/status.js +2 -1
- package/dist/commands/tasks/update.d.ts.map +1 -1
- package/dist/commands/tasks/update.js +7 -1
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +15 -2
- package/dist/lib/ai-service/base-operations.d.ts +8 -0
- package/dist/lib/ai-service/base-operations.d.ts.map +1 -1
- package/dist/lib/ai-service/base-operations.js +23 -10
- package/dist/lib/ai-service/model-provider.d.ts.map +1 -1
- package/dist/lib/ai-service/model-provider.js +37 -6
- package/dist/lib/ai-service/prd-operations.d.ts.map +1 -1
- package/dist/lib/ai-service/prd-operations.js +50 -7
- package/dist/lib/ai-service/task-operations.d.ts +1 -0
- package/dist/lib/ai-service/task-operations.d.ts.map +1 -1
- package/dist/lib/ai-service/task-operations.js +158 -171
- package/dist/lib/benchmark/registry.d.ts.map +1 -1
- package/dist/lib/benchmark/registry.js +6 -10
- package/dist/lib/config-validation.d.ts +215 -0
- package/dist/lib/config-validation.d.ts.map +1 -0
- package/dist/lib/config-validation.js +246 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +30 -7
- package/dist/lib/index.d.ts +1 -1
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/index.js +2 -1
- package/dist/lib/storage/file-system.d.ts.map +1 -1
- package/dist/lib/storage/file-system.js +81 -21
- package/dist/lib/task-execution-core.d.ts.map +1 -1
- package/dist/lib/task-execution-core.js +3 -2
- package/dist/services/prd.d.ts +17 -0
- package/dist/services/prd.d.ts.map +1 -1
- package/dist/services/prd.js +69 -84
- package/dist/services/tasks.d.ts +315 -1
- package/dist/services/tasks.d.ts.map +1 -1
- package/dist/services/tasks.js +486 -121
- package/dist/services/workflow-ai-assistant.d.ts.map +1 -1
- package/dist/services/workflow-ai-assistant.js +19 -6
- package/dist/services/workflow.d.ts.map +1 -1
- package/dist/services/workflow.js +7 -1
- package/dist/test/lib/ai-service/task-operations.test.d.ts +2 -0
- package/dist/test/lib/ai-service/task-operations.test.d.ts.map +1 -0
- package/dist/test/lib/ai-service/task-operations.test.js +362 -0
- package/dist/test/mocks/mock-ai-operations.d.ts +15 -0
- package/dist/test/mocks/mock-ai-operations.d.ts.map +1 -0
- package/dist/test/mocks/mock-ai-operations.js +107 -0
- package/dist/test/mocks/mock-context-builder.d.ts +10 -0
- package/dist/test/mocks/mock-context-builder.d.ts.map +1 -0
- package/dist/test/mocks/mock-context-builder.js +81 -0
- package/dist/test/mocks/mock-model-provider.d.ts +7 -0
- package/dist/test/mocks/mock-model-provider.d.ts.map +1 -0
- package/dist/test/mocks/mock-model-provider.js +21 -0
- package/dist/test/mocks/mock-service-factory.d.ts +11 -0
- package/dist/test/mocks/mock-service-factory.d.ts.map +1 -0
- package/dist/test/mocks/mock-service-factory.js +61 -0
- package/dist/test/mocks/mock-storage.d.ts +50 -0
- package/dist/test/mocks/mock-storage.d.ts.map +1 -0
- package/dist/test/mocks/mock-storage.js +145 -0
- package/dist/test/services/task-service.test.d.ts +2 -0
- package/dist/test/services/task-service.test.d.ts.map +1 -0
- package/dist/test/services/task-service.test.js +459 -0
- package/dist/test/test-mock-setup.d.ts +26 -0
- package/dist/test/test-mock-setup.d.ts.map +1 -0
- package/dist/test/test-mock-setup.js +41 -0
- package/dist/test/test-setup.d.ts +9 -0
- package/dist/test/test-setup.d.ts.map +1 -0
- package/dist/test/test-setup.js +44 -0
- package/dist/test/test-utils.d.ts +22 -0
- package/dist/test/test-utils.d.ts.map +1 -0
- package/dist/test/test-utils.js +37 -0
- package/dist/test/utils/ai-operation-utility.test.d.ts +2 -0
- package/dist/test/utils/ai-operation-utility.test.d.ts.map +1 -0
- package/dist/test/utils/ai-operation-utility.test.js +290 -0
- package/dist/test/utils/error-handling.test.d.ts +2 -0
- package/dist/test/utils/error-handling.test.d.ts.map +1 -0
- package/dist/test/utils/error-handling.test.js +231 -0
- package/dist/utils/ai-operation-utility.d.ts +142 -0
- package/dist/utils/ai-operation-utility.d.ts.map +1 -0
- package/dist/utils/ai-operation-utility.js +279 -0
- package/dist/utils/ai-service-factory.d.ts +10 -0
- package/dist/utils/ai-service-factory.d.ts.map +1 -1
- package/dist/utils/ai-service-factory.js +19 -1
- package/dist/utils/cli-validators.d.ts +2 -2
- package/dist/utils/cli-validators.d.ts.map +1 -1
- package/dist/utils/cli-validators.js +7 -6
- package/dist/utils/error-utils.d.ts +3 -3
- package/dist/utils/error-utils.d.ts.map +1 -1
- package/dist/utils/error-utils.js +5 -4
- package/dist/utils/file-utils.d.ts +27 -4
- package/dist/utils/file-utils.d.ts.map +1 -1
- package/dist/utils/file-utils.js +46 -6
- package/dist/utils/id-generator.d.ts +1 -1
- package/dist/utils/id-generator.d.ts.map +1 -1
- package/dist/utils/id-generator.js +8 -2
- package/dist/utils/metadata-utils.d.ts +40 -0
- package/dist/utils/metadata-utils.d.ts.map +1 -0
- package/dist/utils/metadata-utils.js +43 -0
- package/dist/utils/model-executor-parser.d.ts +1 -1
- package/dist/utils/model-executor-parser.d.ts.map +1 -1
- package/dist/utils/model-executor-parser.js +3 -2
- package/dist/utils/storage-utils.d.ts +3 -3
- package/dist/utils/storage-utils.d.ts.map +1 -1
- package/dist/utils/storage-utils.js +7 -6
- package/dist/utils/task-o-matic-error.d.ts +206 -0
- package/dist/utils/task-o-matic-error.d.ts.map +1 -0
- package/dist/utils/task-o-matic-error.js +304 -0
- package/package.json +7 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prd-operations.d.ts","sourceRoot":"","sources":["../../../src/lib/ai-service/prd-operations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAER,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EAIZ,MAAM,aAAa,CAAC;AAYrB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"prd-operations.d.ts","sourceRoot":"","sources":["../../../src/lib/ai-service/prd-operations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EAER,gBAAgB,EAChB,gBAAgB,EAChB,WAAW,EAIZ,MAAM,aAAa,CAAC;AAYrB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAMnD,qBAAa,aAAc,SAAQ,cAAc;IACzC,QAAQ,CACZ,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAClC,gBAAgB,CAAC,EAAE,MAAM,EACzB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CAAC,gBAAgB,CAAC;IA2LtB,SAAS,CACb,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAClC,gBAAgB,CAAC,EAAE,MAAM,EACzB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CAAC,MAAM,CAAC;IA+GZ,oBAAoB,CACxB,UAAU,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAClC,gBAAgB,CAAC,EAAE,MAAM,EACzB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CAAC,MAAM,EAAE,CAAC;IA2Hd,kBAAkB,CACtB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,WAAW,CAAC,EAAE;QACZ,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,kBAAkB,CAAC,EAAE,MAAM,CAAC;KAC7B,EACD,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA6F5B,WAAW,CACf,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC;IAqBZ,WAAW,CACf,IAAI,EAAE,MAAM,EAAE,EACd,mBAAmB,EAAE,MAAM,EAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC;CA0BnB"}
|
|
@@ -39,6 +39,7 @@ const prompt_builder_1 = require("../prompt-builder");
|
|
|
39
39
|
const prompts_1 = require("../../prompts");
|
|
40
40
|
const filesystem_tools_1 = require("./filesystem-tools");
|
|
41
41
|
const base_operations_1 = require("./base-operations");
|
|
42
|
+
const task_o_matic_error_1 = require("../../utils/task-o-matic-error");
|
|
42
43
|
class PRDOperations extends base_operations_1.BaseOperations {
|
|
43
44
|
async parsePRD(prdContent, config, promptOverride, userMessage, streamingOptions, retryConfig, workingDirectory, enableFilesystemTools) {
|
|
44
45
|
return this.retryHandler.executeWithRetry(async () => {
|
|
@@ -69,7 +70,13 @@ class PRDOperations extends base_operations_1.BaseOperations {
|
|
|
69
70
|
variables,
|
|
70
71
|
});
|
|
71
72
|
if (!promptResult.success) {
|
|
72
|
-
throw
|
|
73
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.PRD_PARSING_ERROR, `Failed to build PRD parsing prompt: ${promptResult.error}`, {
|
|
74
|
+
context: "Prompt building failed during PRD parsing",
|
|
75
|
+
suggestions: [
|
|
76
|
+
"Verify prompt template exists",
|
|
77
|
+
"Check variable substitution",
|
|
78
|
+
],
|
|
79
|
+
});
|
|
73
80
|
}
|
|
74
81
|
enhancedPrompt = promptResult.prompt;
|
|
75
82
|
}
|
|
@@ -125,7 +132,13 @@ Use these tools to understand the project structure, existing code patterns, and
|
|
|
125
132
|
}
|
|
126
133
|
const parseResult = this.jsonParser.parseJSONFromResponse(response);
|
|
127
134
|
if (!parseResult.success) {
|
|
128
|
-
throw
|
|
135
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.PRD_PARSING_ERROR, parseResult.error || "Failed to parse PRD response", {
|
|
136
|
+
context: "AI response parsing failed during PRD parsing",
|
|
137
|
+
suggestions: [
|
|
138
|
+
"Check AI response format",
|
|
139
|
+
"Verify JSON structure",
|
|
140
|
+
],
|
|
141
|
+
});
|
|
129
142
|
}
|
|
130
143
|
const parsed = parseResult.data;
|
|
131
144
|
const tasks = (parsed?.tasks || []).map((task, index) => {
|
|
@@ -195,7 +208,13 @@ Use these tools to understand the project structure, existing code patterns, and
|
|
|
195
208
|
variables,
|
|
196
209
|
});
|
|
197
210
|
if (!promptResult.success) {
|
|
198
|
-
throw
|
|
211
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.PRD_GENERATION_ERROR, `Failed to build PRD rework prompt: ${promptResult.error}`, {
|
|
212
|
+
context: "Prompt building failed during PRD rework",
|
|
213
|
+
suggestions: [
|
|
214
|
+
"Verify prompt template exists",
|
|
215
|
+
"Check variable substitution",
|
|
216
|
+
],
|
|
217
|
+
});
|
|
199
218
|
}
|
|
200
219
|
prompt = promptResult.prompt;
|
|
201
220
|
}
|
|
@@ -277,7 +296,13 @@ Use these tools to understand the current project structure, existing code patte
|
|
|
277
296
|
variables,
|
|
278
297
|
});
|
|
279
298
|
if (!promptResult.success) {
|
|
280
|
-
throw
|
|
299
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.PRD_GENERATION_ERROR, `Failed to build PRD question prompt: ${promptResult.error}`, {
|
|
300
|
+
context: "Prompt building failed during PRD question generation",
|
|
301
|
+
suggestions: [
|
|
302
|
+
"Verify prompt template exists",
|
|
303
|
+
"Check variable substitution",
|
|
304
|
+
],
|
|
305
|
+
});
|
|
281
306
|
}
|
|
282
307
|
prompt = promptResult.prompt;
|
|
283
308
|
}
|
|
@@ -324,7 +349,13 @@ Use these tools to understand the current project structure, existing code patte
|
|
|
324
349
|
}
|
|
325
350
|
const parseResult = this.jsonParser.parseJSONFromResponse(response);
|
|
326
351
|
if (!parseResult.success) {
|
|
327
|
-
throw
|
|
352
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.PRD_GENERATION_ERROR, parseResult.error || "Failed to parse PRD questions", {
|
|
353
|
+
context: "AI response parsing failed during PRD question generation",
|
|
354
|
+
suggestions: [
|
|
355
|
+
"Check AI response format",
|
|
356
|
+
"Verify JSON structure",
|
|
357
|
+
],
|
|
358
|
+
});
|
|
328
359
|
}
|
|
329
360
|
return parseResult.data?.questions || [];
|
|
330
361
|
}, retryConfig, "PRD questioning");
|
|
@@ -351,7 +382,13 @@ Use these tools to understand the current project structure, existing code patte
|
|
|
351
382
|
},
|
|
352
383
|
});
|
|
353
384
|
if (!promptResult.success) {
|
|
354
|
-
throw
|
|
385
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.PRD_GENERATION_ERROR, `Failed to build PRD question answer prompt: ${promptResult.error}`, {
|
|
386
|
+
context: "Prompt building failed during PRD answer generation",
|
|
387
|
+
suggestions: [
|
|
388
|
+
"Verify prompt template exists",
|
|
389
|
+
"Check variable substitution",
|
|
390
|
+
],
|
|
391
|
+
});
|
|
355
392
|
}
|
|
356
393
|
const systemPromptResult = prompt_builder_1.PromptBuilder.buildPrompt({
|
|
357
394
|
name: "prd-question-answer",
|
|
@@ -361,7 +398,13 @@ Use these tools to understand the current project structure, existing code patte
|
|
|
361
398
|
const response = await this.streamText("", config, systemPromptResult.prompt, promptResult.prompt, streamingOptions, { maxAttempts: 1 });
|
|
362
399
|
const parseResult = this.jsonParser.parseJSONFromResponse(response);
|
|
363
400
|
if (!parseResult.success) {
|
|
364
|
-
throw
|
|
401
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.PRD_GENERATION_ERROR, parseResult.error || "Failed to parse PRD answers response", {
|
|
402
|
+
context: "AI response parsing failed during PRD answer generation",
|
|
403
|
+
suggestions: [
|
|
404
|
+
"Check AI response format",
|
|
405
|
+
"Verify JSON structure",
|
|
406
|
+
],
|
|
407
|
+
});
|
|
365
408
|
}
|
|
366
409
|
const answers = {};
|
|
367
410
|
const numberedAnswers = parseResult.data?.answers || {};
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { AIConfig, Task, StreamingOptions, RetryConfig } from "../../types";
|
|
2
2
|
import { BaseOperations } from "./base-operations";
|
|
3
3
|
export declare class TaskOperations extends BaseOperations {
|
|
4
|
+
private aiOperationUtility;
|
|
4
5
|
breakdownTask(task: Task, config?: Partial<AIConfig>, promptOverride?: string, userMessage?: string, streamingOptions?: StreamingOptions, retryConfig?: Partial<RetryConfig>, fullContent?: string, stackInfo?: string, existingSubtasks?: Task[], enableFilesystemTools?: boolean): Promise<Array<{
|
|
5
6
|
title: string;
|
|
6
7
|
content: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task-operations.d.ts","sourceRoot":"","sources":["../../../src/lib/ai-service/task-operations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,gBAAgB,EAChB,WAAW,EAEZ,MAAM,aAAa,CAAC;AAUrB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"task-operations.d.ts","sourceRoot":"","sources":["../../../src/lib/ai-service/task-operations.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,QAAQ,EACR,IAAI,EACJ,gBAAgB,EAChB,WAAW,EAEZ,MAAM,aAAa,CAAC;AAUrB,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnD,qBAAa,cAAe,SAAQ,cAAc;IAChD,OAAO,CAAC,kBAAkB,CAA4B;IAChD,aAAa,CACjB,IAAI,EAAE,IAAI,EACV,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,EAClC,WAAW,CAAC,EAAE,MAAM,EACpB,SAAS,CAAC,EAAE,MAAM,EAClB,gBAAgB,CAAC,EAAE,IAAI,EAAE,EACzB,qBAAqB,CAAC,EAAE,OAAO,GAC9B,OAAO,CACR,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CACpE;IAmHK,WAAW,CACf,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,EACf,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC;IA4FZ,QAAQ,CACZ,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,EAC1B,cAAc,CAAC,EAAE,MAAM,EACvB,WAAW,CAAC,EAAE,MAAM,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,EACnC,WAAW,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC;CAoEnB"}
|
|
@@ -1,98 +1,78 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.TaskOperations = void 0;
|
|
4
|
-
const ai_1 = require("ai");
|
|
5
4
|
const prompt_builder_1 = require("../prompt-builder");
|
|
6
5
|
const stack_formatter_1 = require("../../utils/stack-formatter");
|
|
7
6
|
const prompts_1 = require("../../prompts");
|
|
8
7
|
const ai_service_factory_1 = require("../../utils/ai-service-factory");
|
|
9
8
|
const filesystem_tools_1 = require("./filesystem-tools");
|
|
10
9
|
const base_operations_1 = require("./base-operations");
|
|
10
|
+
const ai_operation_utility_1 = require("../../utils/ai-operation-utility");
|
|
11
|
+
const task_o_matic_error_1 = require("../../utils/task-o-matic-error");
|
|
11
12
|
class TaskOperations extends base_operations_1.BaseOperations {
|
|
13
|
+
aiOperationUtility = new ai_operation_utility_1.AIOperationUtility();
|
|
12
14
|
async breakdownTask(task, config, promptOverride, userMessage, streamingOptions, retryConfig, fullContent, stackInfo, existingSubtasks, enableFilesystemTools) {
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
// Build prompt
|
|
16
|
+
let prompt;
|
|
17
|
+
if (promptOverride) {
|
|
18
|
+
prompt = promptOverride;
|
|
19
|
+
}
|
|
20
|
+
else {
|
|
21
|
+
const variables = {
|
|
22
|
+
TASK_TITLE: task.title,
|
|
23
|
+
TASK_DESCRIPTION: task.description || "No description",
|
|
24
|
+
};
|
|
25
|
+
if (fullContent) {
|
|
26
|
+
variables.TASK_CONTENT = fullContent;
|
|
17
27
|
}
|
|
18
|
-
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (fullContent) {
|
|
24
|
-
variables.TASK_CONTENT = fullContent;
|
|
25
|
-
}
|
|
26
|
-
if (existingSubtasks && existingSubtasks.length > 0) {
|
|
27
|
-
const existingSubtasksText = existingSubtasks
|
|
28
|
-
.map((subtask, index) => `${index + 1}. ${subtask.title}: ${subtask.description || "No description"}`)
|
|
29
|
-
.join("\n");
|
|
30
|
-
variables.EXISTING_SUBTASKS = existingSubtasksText;
|
|
31
|
-
}
|
|
32
|
-
if (stackInfo) {
|
|
33
|
-
variables.STACK_INFO = stackInfo;
|
|
34
|
-
}
|
|
35
|
-
const promptResult = prompt_builder_1.PromptBuilder.buildPrompt({
|
|
36
|
-
name: "task-breakdown",
|
|
37
|
-
type: "user",
|
|
38
|
-
variables,
|
|
39
|
-
});
|
|
40
|
-
if (!promptResult.success) {
|
|
41
|
-
throw new Error(`Failed to build task breakdown prompt: ${promptResult.error}`);
|
|
42
|
-
}
|
|
43
|
-
prompt = promptResult.prompt;
|
|
28
|
+
if (existingSubtasks && existingSubtasks.length > 0) {
|
|
29
|
+
const existingSubtasksText = existingSubtasks
|
|
30
|
+
.map((subtask, index) => `${index + 1}. ${subtask.title}: ${subtask.description || "No description"}`)
|
|
31
|
+
.join("\n");
|
|
32
|
+
variables.EXISTING_SUBTASKS = existingSubtasksText;
|
|
44
33
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
34
|
+
if (stackInfo) {
|
|
35
|
+
variables.STACK_INFO = stackInfo;
|
|
36
|
+
}
|
|
37
|
+
const promptResult = prompt_builder_1.PromptBuilder.buildPrompt({
|
|
38
|
+
name: "task-breakdown",
|
|
39
|
+
type: "user",
|
|
40
|
+
variables,
|
|
41
|
+
});
|
|
42
|
+
if (!promptResult.success) {
|
|
43
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.AI_OPERATION_FAILED, `Failed to build task breakdown prompt: ${promptResult.error}`, {
|
|
44
|
+
context: "Prompt building failed during task breakdown operation",
|
|
45
|
+
suggestions: [
|
|
46
|
+
"Verify prompt template exists",
|
|
47
|
+
"Check variable substitution",
|
|
48
|
+
],
|
|
50
49
|
});
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
50
|
+
}
|
|
51
|
+
prompt = promptResult.prompt;
|
|
52
|
+
}
|
|
53
|
+
// Execute AI operation with proper error handling
|
|
54
|
+
const result = await this.aiOperationUtility.executeAIOperation("Task breakdown", async () => {
|
|
55
|
+
// Prepare tools if filesystem tools are enabled
|
|
56
|
+
const tools = enableFilesystemTools ? filesystem_tools_1.filesystemTools : undefined;
|
|
57
|
+
const response = await this.aiOperationUtility.streamTextWithTools(prompts_1.TASK_BREAKDOWN_SYSTEM_PROMPT +
|
|
58
|
+
(enableFilesystemTools
|
|
59
|
+
? `
|
|
59
60
|
|
|
60
61
|
You have access to filesystem tools that allow you to:
|
|
61
62
|
- readFile: Read the contents of any file in the project
|
|
62
63
|
- listDirectory: List contents of directories
|
|
63
64
|
|
|
64
|
-
Use these tools to understand the project structure, existing code, and dependencies when breaking down tasks into subtasks
|
|
65
|
-
|
|
66
|
-
maxRetries: 0,
|
|
67
|
-
onChunk: streamingOptions?.onChunk
|
|
68
|
-
? ({ chunk }) => {
|
|
69
|
-
if (chunk.type === "text-delta") {
|
|
70
|
-
streamingOptions.onChunk(chunk.text);
|
|
71
|
-
}
|
|
72
|
-
else if (chunk.type === "reasoning-delta") {
|
|
73
|
-
streamingOptions.onReasoning?.(chunk.text);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
: undefined,
|
|
77
|
-
onFinish: streamingOptions?.onFinish
|
|
78
|
-
? ({ text, finishReason, usage }) => {
|
|
79
|
-
streamingOptions.onFinish({
|
|
80
|
-
text,
|
|
81
|
-
finishReason,
|
|
82
|
-
usage,
|
|
83
|
-
isAborted: false,
|
|
84
|
-
});
|
|
85
|
-
}
|
|
86
|
-
: undefined,
|
|
87
|
-
});
|
|
88
|
-
response = await result.text;
|
|
89
|
-
}
|
|
90
|
-
else {
|
|
91
|
-
response = await this.streamText("", config, prompts_1.TASK_BREAKDOWN_SYSTEM_PROMPT, userMessage || prompt, streamingOptions, { maxAttempts: 1 });
|
|
92
|
-
}
|
|
65
|
+
Use these tools to understand the project structure, existing code, and dependencies when breaking down tasks into subtasks.`
|
|
66
|
+
: ""), userMessage || prompt, config, streamingOptions, tools);
|
|
93
67
|
const parseResult = this.jsonParser.parseJSONFromResponse(response);
|
|
94
68
|
if (!parseResult.success) {
|
|
95
|
-
throw
|
|
69
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.AI_OPERATION_FAILED, parseResult.error || "Failed to parse task breakdown response", {
|
|
70
|
+
context: "AI response parsing failed during task breakdown",
|
|
71
|
+
suggestions: [
|
|
72
|
+
"Check AI response format",
|
|
73
|
+
"Verify JSON structure",
|
|
74
|
+
],
|
|
75
|
+
});
|
|
96
76
|
}
|
|
97
77
|
const parsed = parseResult.data;
|
|
98
78
|
return (parsed?.subtasks || []).map((subtask) => ({
|
|
@@ -100,126 +80,133 @@ Use these tools to understand the project structure, existing code, and dependen
|
|
|
100
80
|
content: subtask.description || "",
|
|
101
81
|
estimatedEffort: subtask.effort,
|
|
102
82
|
}));
|
|
103
|
-
},
|
|
83
|
+
}, {
|
|
84
|
+
streamingOptions,
|
|
85
|
+
retryConfig,
|
|
86
|
+
aiConfig: config,
|
|
87
|
+
maxRetries: retryConfig?.maxAttempts || 2,
|
|
88
|
+
});
|
|
89
|
+
// Return the result directly (errors are thrown, not returned)
|
|
90
|
+
return result.result;
|
|
104
91
|
}
|
|
105
92
|
async enhanceTask(title, description, config, promptOverride, userMessage, taskId, streamingOptions, retryConfig) {
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
if (context.prdContent) {
|
|
127
|
-
prdContent = context.prdContent;
|
|
93
|
+
// Build context
|
|
94
|
+
let contextInfo = "";
|
|
95
|
+
let prdContent = "";
|
|
96
|
+
if (taskId) {
|
|
97
|
+
const contextBuilder = (0, ai_service_factory_1.getContextBuilder)();
|
|
98
|
+
try {
|
|
99
|
+
const context = await contextBuilder.buildContext(taskId);
|
|
100
|
+
if (context.documentation || context.stack || context.prdContent) {
|
|
101
|
+
contextInfo = "\n\nAvailable Context:\n";
|
|
102
|
+
if (context.stack) {
|
|
103
|
+
contextInfo += (0, stack_formatter_1.formatStackForContext)(context.stack) + "\n";
|
|
104
|
+
}
|
|
105
|
+
if (context.documentation) {
|
|
106
|
+
contextInfo += `Documentation Available: ${context.documentation.recap}\n`;
|
|
107
|
+
if (context.documentation.files.length > 0) {
|
|
108
|
+
contextInfo += `Documentation Files: ${context.documentation.files
|
|
109
|
+
.map((f) => f.path)
|
|
110
|
+
.join(", ")}\n`;
|
|
128
111
|
}
|
|
129
112
|
}
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
113
|
+
if (context.prdContent) {
|
|
114
|
+
prdContent = context.prdContent;
|
|
115
|
+
}
|
|
133
116
|
}
|
|
134
117
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
prompt = promptOverride;
|
|
118
|
+
catch (error) {
|
|
119
|
+
throw error;
|
|
138
120
|
}
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
121
|
+
}
|
|
122
|
+
// Build prompt
|
|
123
|
+
let prompt;
|
|
124
|
+
if (promptOverride) {
|
|
125
|
+
prompt = promptOverride;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
const promptResult = prompt_builder_1.PromptBuilder.buildPrompt({
|
|
129
|
+
name: "task-enhancement",
|
|
130
|
+
type: "user",
|
|
131
|
+
variables: {
|
|
132
|
+
TASK_TITLE: title,
|
|
133
|
+
TASK_DESCRIPTION: description || "None",
|
|
134
|
+
CONTEXT_INFO: contextInfo,
|
|
135
|
+
PRD_CONTENT: prdContent || "No PRD content available",
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
if (!promptResult.success) {
|
|
139
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.AI_OPERATION_FAILED, `Failed to build task enhancement prompt: ${promptResult.error}`, {
|
|
140
|
+
context: "Prompt building failed during task enhancement operation",
|
|
141
|
+
suggestions: [
|
|
142
|
+
"Verify prompt template exists",
|
|
143
|
+
"Check variable substitution",
|
|
144
|
+
],
|
|
149
145
|
});
|
|
150
|
-
if (!promptResult.success) {
|
|
151
|
-
throw new Error(`Failed to build task enhancement prompt: ${promptResult.error}`);
|
|
152
|
-
}
|
|
153
|
-
prompt = promptResult.prompt;
|
|
154
146
|
}
|
|
155
|
-
|
|
156
|
-
}
|
|
147
|
+
prompt = promptResult.prompt;
|
|
148
|
+
}
|
|
149
|
+
// Execute AI operation with proper error handling
|
|
150
|
+
const result = await this.aiOperationUtility.executeAIOperation("Task enhancement", async () => {
|
|
151
|
+
return await this.aiOperationUtility.streamText("", config, prompts_1.TASK_ENHANCEMENT_SYSTEM_PROMPT, userMessage || prompt, streamingOptions, { maxAttempts: 1 });
|
|
152
|
+
}, {
|
|
153
|
+
streamingOptions,
|
|
154
|
+
retryConfig,
|
|
155
|
+
aiConfig: config,
|
|
156
|
+
maxRetries: retryConfig?.maxAttempts || 2,
|
|
157
|
+
});
|
|
158
|
+
// Return the result directly (errors are thrown, not returned)
|
|
159
|
+
return result.result;
|
|
157
160
|
}
|
|
158
161
|
async planTask(taskContext, taskDetails, config, promptOverride, userMessage, streamingOptions, retryConfig) {
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
162
|
+
// Build prompt
|
|
163
|
+
let prompt;
|
|
164
|
+
if (promptOverride) {
|
|
165
|
+
prompt = promptOverride;
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
const promptResult = prompt_builder_1.PromptBuilder.buildPrompt({
|
|
169
|
+
name: "task-planning",
|
|
170
|
+
type: "user",
|
|
171
|
+
variables: {
|
|
172
|
+
TASK_CONTEXT: taskContext,
|
|
173
|
+
TASK_DETAILS: taskDetails,
|
|
174
|
+
},
|
|
175
|
+
});
|
|
176
|
+
if (!promptResult.success) {
|
|
177
|
+
throw (0, task_o_matic_error_1.createStandardError)(task_o_matic_error_1.TaskOMaticErrorCodes.AI_OPERATION_FAILED, `Failed to build task planning prompt: ${promptResult.error}`, {
|
|
178
|
+
context: "Prompt building failed during task planning operation",
|
|
179
|
+
suggestions: [
|
|
180
|
+
"Verify prompt template exists",
|
|
181
|
+
"Check variable substitution",
|
|
182
|
+
],
|
|
172
183
|
});
|
|
173
|
-
if (!promptResult.success) {
|
|
174
|
-
throw new Error(`Failed to build task planning prompt: ${promptResult.error}`);
|
|
175
|
-
}
|
|
176
|
-
prompt = promptResult.prompt;
|
|
177
184
|
}
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
185
|
+
prompt = promptResult.prompt;
|
|
186
|
+
}
|
|
187
|
+
// Execute AI operation with proper error handling
|
|
188
|
+
const result = await this.aiOperationUtility.executeAIOperation("Task planning", async () => {
|
|
182
189
|
const mcpTools = await this.context7Client.getMCPTools();
|
|
183
190
|
const allTools = {
|
|
184
191
|
...mcpTools,
|
|
185
192
|
...filesystem_tools_1.filesystemTools,
|
|
186
193
|
};
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
tools: allTools,
|
|
190
|
-
system: prompts_1.TASK_PLANNING_SYSTEM_PROMPT +
|
|
191
|
-
`
|
|
194
|
+
return await this.aiOperationUtility.streamTextWithTools(prompts_1.TASK_PLANNING_SYSTEM_PROMPT +
|
|
195
|
+
`
|
|
192
196
|
|
|
193
197
|
You have access to filesystem tools that allow you to:
|
|
194
198
|
- readFile: Read the contents of any file in the project
|
|
195
199
|
- listDirectory: List contents of directories
|
|
196
200
|
|
|
197
|
-
Use these tools to understand the project structure, existing code, and dependencies when creating implementation plans.`,
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
streamingOptions.onReasoning?.(chunk.text);
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
: undefined,
|
|
210
|
-
onFinish: streamingOptions?.onFinish
|
|
211
|
-
? ({ text, finishReason, usage }) => {
|
|
212
|
-
streamingOptions.onFinish({
|
|
213
|
-
text,
|
|
214
|
-
finishReason,
|
|
215
|
-
usage,
|
|
216
|
-
isAborted: false,
|
|
217
|
-
});
|
|
218
|
-
}
|
|
219
|
-
: undefined,
|
|
220
|
-
});
|
|
221
|
-
return (await result).text;
|
|
222
|
-
}, retryConfig, "Task planning");
|
|
201
|
+
Use these tools to understand the project structure, existing code, and dependencies when creating implementation plans.`, userMessage || prompt, config, streamingOptions, allTools);
|
|
202
|
+
}, {
|
|
203
|
+
streamingOptions,
|
|
204
|
+
retryConfig,
|
|
205
|
+
aiConfig: config,
|
|
206
|
+
maxRetries: retryConfig?.maxAttempts || 2,
|
|
207
|
+
});
|
|
208
|
+
// Return the result directly (errors are thrown, not returned)
|
|
209
|
+
return result.result;
|
|
223
210
|
}
|
|
224
211
|
}
|
|
225
212
|
exports.TaskOperations = TaskOperations;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/lib/benchmark/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA0B,MAAM,SAAS,CAAC;AAOzE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAkD;;IAMpE,QAAQ,CAAC,EAAE,EAAE,sBAAsB;IAInC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAInD,IAAI,IAAI,sBAAsB,EAAE;IAIhC,OAAO,CAAC,gBAAgB;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/lib/benchmark/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAA0B,MAAM,SAAS,CAAC;AAOzE,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,UAAU,CAAkD;;IAMpE,QAAQ,CAAC,EAAE,EAAE,sBAAsB;IAInC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,sBAAsB,GAAG,SAAS;IAInD,IAAI,IAAI,sBAAsB,EAAE;IAIhC,OAAO,CAAC,gBAAgB;CAsRzB;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.benchmarkRegistry = exports.BenchmarkRegistry = void 0;
|
|
4
4
|
const prd_1 = require("../../services/prd");
|
|
5
|
-
const tasks_1 = require("../../services/tasks");
|
|
5
|
+
const tasks_1 = require("../../services/tasks");
|
|
6
6
|
const workflow_benchmark_1 = require("../../services/workflow-benchmark");
|
|
7
7
|
class BenchmarkRegistry {
|
|
8
8
|
operations = new Map();
|
|
@@ -59,17 +59,13 @@ class BenchmarkRegistry {
|
|
|
59
59
|
},
|
|
60
60
|
});
|
|
61
61
|
// Task Breakdown Adapter
|
|
62
|
-
// Note: TaskService is a class, we need an instance.
|
|
63
|
-
// In a real app we should use dependency injection or a singleton.
|
|
64
|
-
// For now, we'll create a new instance or assume one is available.
|
|
65
|
-
const taskService = new tasks_1.TaskService();
|
|
66
62
|
this.register({
|
|
67
63
|
id: "task-breakdown",
|
|
68
64
|
name: "Task Breakdown",
|
|
69
65
|
description: "Break down a task into subtasks",
|
|
70
66
|
validateInput: (input) => typeof input.taskId === "string",
|
|
71
67
|
execute: async (input, aiOptions, streamingOptions) => {
|
|
72
|
-
return await taskService.splitTask(input.taskId, aiOptions, input.prompt, input.message, streamingOptions, // streaming options
|
|
68
|
+
return await tasks_1.taskService.splitTask(input.taskId, aiOptions, input.prompt, input.message, streamingOptions, // streaming options
|
|
73
69
|
input.tools);
|
|
74
70
|
},
|
|
75
71
|
});
|
|
@@ -90,7 +86,7 @@ class BenchmarkRegistry {
|
|
|
90
86
|
description: "Create a new task with AI enhancement using Context7 documentation",
|
|
91
87
|
validateInput: (input) => typeof input.title === "string" && input.title.length > 0,
|
|
92
88
|
execute: async (input, aiOptions, streamingOptions) => {
|
|
93
|
-
return await taskService.createTask({
|
|
89
|
+
return await tasks_1.taskService.createTask({
|
|
94
90
|
title: input.title,
|
|
95
91
|
content: input.content,
|
|
96
92
|
parentId: input.parentId,
|
|
@@ -108,7 +104,7 @@ class BenchmarkRegistry {
|
|
|
108
104
|
description: "Enhance an existing task with AI using Context7 documentation",
|
|
109
105
|
validateInput: (input) => typeof input.taskId === "string",
|
|
110
106
|
execute: async (input, aiOptions, streamingOptions) => {
|
|
111
|
-
return await taskService.enhanceTask(input.taskId, aiOptions, streamingOptions);
|
|
107
|
+
return await tasks_1.taskService.enhanceTask(input.taskId, aiOptions, streamingOptions);
|
|
112
108
|
},
|
|
113
109
|
});
|
|
114
110
|
// Task Planning
|
|
@@ -118,7 +114,7 @@ class BenchmarkRegistry {
|
|
|
118
114
|
description: "Create a detailed implementation plan for a task",
|
|
119
115
|
validateInput: (input) => typeof input.taskId === "string",
|
|
120
116
|
execute: async (input, aiOptions, streamingOptions) => {
|
|
121
|
-
return await taskService.planTask(input.taskId, aiOptions, streamingOptions);
|
|
117
|
+
return await tasks_1.taskService.planTask(input.taskId, aiOptions, streamingOptions);
|
|
122
118
|
},
|
|
123
119
|
});
|
|
124
120
|
// Task Documentation
|
|
@@ -128,7 +124,7 @@ class BenchmarkRegistry {
|
|
|
128
124
|
description: "Analyze and generate documentation for a task",
|
|
129
125
|
validateInput: (input) => typeof input.taskId === "string",
|
|
130
126
|
execute: async (input, aiOptions, streamingOptions) => {
|
|
131
|
-
return await taskService.documentTask(input.taskId, input.force || false, aiOptions, streamingOptions);
|
|
127
|
+
return await tasks_1.taskService.documentTask(input.taskId, input.force || false, aiOptions, streamingOptions);
|
|
132
128
|
},
|
|
133
129
|
});
|
|
134
130
|
// PRD Creation
|