task-o-matic 0.0.7 → 0.0.9

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 (78) hide show
  1. package/README.md +286 -23
  2. package/dist/commands/benchmark.d.ts +3 -0
  3. package/dist/commands/benchmark.d.ts.map +1 -0
  4. package/dist/commands/benchmark.js +569 -0
  5. package/dist/commands/prd.d.ts.map +1 -1
  6. package/dist/commands/prd.js +203 -9
  7. package/dist/commands/tasks/execute-loop.d.ts +3 -0
  8. package/dist/commands/tasks/execute-loop.d.ts.map +1 -0
  9. package/dist/commands/tasks/execute-loop.js +118 -0
  10. package/dist/commands/tasks/index.d.ts +1 -0
  11. package/dist/commands/tasks/index.d.ts.map +1 -1
  12. package/dist/commands/tasks/index.js +1 -0
  13. package/dist/commands/tasks.d.ts.map +1 -1
  14. package/dist/commands/tasks.js +1 -0
  15. package/dist/commands/workflow.d.ts.map +1 -1
  16. package/dist/commands/workflow.js +491 -331
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +2 -0
  19. package/dist/lib/ai-service/ai-operations.d.ts +5 -0
  20. package/dist/lib/ai-service/ai-operations.d.ts.map +1 -1
  21. package/dist/lib/ai-service/ai-operations.js +167 -0
  22. package/dist/lib/benchmark/registry.d.ts +11 -0
  23. package/dist/lib/benchmark/registry.d.ts.map +1 -0
  24. package/dist/lib/benchmark/registry.js +89 -0
  25. package/dist/lib/benchmark/runner.d.ts +6 -0
  26. package/dist/lib/benchmark/runner.d.ts.map +1 -0
  27. package/dist/lib/benchmark/runner.js +150 -0
  28. package/dist/lib/benchmark/storage.d.ts +13 -0
  29. package/dist/lib/benchmark/storage.d.ts.map +1 -0
  30. package/dist/lib/benchmark/storage.js +99 -0
  31. package/dist/lib/benchmark/types.d.ts +104 -0
  32. package/dist/lib/benchmark/types.d.ts.map +1 -0
  33. package/dist/lib/benchmark/types.js +2 -0
  34. package/dist/lib/index.d.ts +9 -0
  35. package/dist/lib/index.d.ts.map +1 -1
  36. package/dist/lib/index.js +7 -1
  37. package/dist/lib/prompt-registry.d.ts.map +1 -1
  38. package/dist/lib/prompt-registry.js +23 -0
  39. package/dist/lib/task-loop-execution.d.ts +25 -0
  40. package/dist/lib/task-loop-execution.d.ts.map +1 -0
  41. package/dist/lib/task-loop-execution.js +473 -0
  42. package/dist/prompts/index.d.ts +7 -6
  43. package/dist/prompts/index.d.ts.map +1 -1
  44. package/dist/prompts/index.js +1 -0
  45. package/dist/prompts/prd-question.d.ts +3 -0
  46. package/dist/prompts/prd-question.d.ts.map +1 -0
  47. package/dist/prompts/prd-question.js +40 -0
  48. package/dist/services/benchmark.d.ts +12 -0
  49. package/dist/services/benchmark.d.ts.map +1 -0
  50. package/dist/services/benchmark.js +18 -0
  51. package/dist/services/prd.d.ts +25 -0
  52. package/dist/services/prd.d.ts.map +1 -1
  53. package/dist/services/prd.js +224 -29
  54. package/dist/services/tasks.d.ts.map +1 -1
  55. package/dist/services/tasks.js +90 -3
  56. package/dist/services/workflow-benchmark.d.ts +34 -0
  57. package/dist/services/workflow-benchmark.d.ts.map +1 -0
  58. package/dist/services/workflow-benchmark.js +317 -0
  59. package/dist/services/workflow.d.ts +85 -0
  60. package/dist/services/workflow.d.ts.map +1 -0
  61. package/dist/services/workflow.js +476 -0
  62. package/dist/test/task-loop-git.test.d.ts +2 -0
  63. package/dist/test/task-loop-git.test.d.ts.map +1 -0
  64. package/dist/test/task-loop-git.test.js +62 -0
  65. package/dist/types/index.d.ts +53 -0
  66. package/dist/types/index.d.ts.map +1 -1
  67. package/dist/types/options.d.ts +2 -1
  68. package/dist/types/options.d.ts.map +1 -1
  69. package/dist/types/options.js +16 -0
  70. package/dist/types/results.d.ts +29 -1
  71. package/dist/types/results.d.ts.map +1 -1
  72. package/dist/types/workflow-options.d.ts +45 -0
  73. package/dist/types/workflow-options.d.ts.map +1 -0
  74. package/dist/types/workflow-options.js +2 -0
  75. package/dist/types/workflow-results.d.ts +82 -0
  76. package/dist/types/workflow-results.d.ts.map +1 -0
  77. package/dist/types/workflow-results.js +2 -0
  78. package/package.json +1 -1
@@ -0,0 +1,476 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.workflowService = exports.WorkflowService = void 0;
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const config_1 = require("../lib/config");
7
+ const better_t_stack_cli_1 = require("../lib/better-t-stack-cli");
8
+ const prd_1 = require("./prd");
9
+ const tasks_1 = require("./tasks");
10
+ const workflow_ai_assistant_1 = require("./workflow-ai-assistant");
11
+ /**
12
+ * WorkflowService - Business logic for workflow operations
13
+ * Extracts all workflow logic from the command layer for reusability
14
+ */
15
+ class WorkflowService {
16
+ /**
17
+ * Step 1: Initialize Project
18
+ * Handles project initialization, AI configuration, and optional bootstrapping
19
+ */
20
+ async initializeProject(input) {
21
+ input.callbacks?.onProgress?.({
22
+ type: "started",
23
+ message: "Initializing project...",
24
+ });
25
+ // Determine project directory
26
+ const projectDir = input.projectDir || (0, path_1.resolve)(process.cwd(), input.projectName);
27
+ // Create project directory
28
+ if (!(0, fs_1.existsSync)(projectDir)) {
29
+ (0, fs_1.mkdirSync)(projectDir, { recursive: true });
30
+ input.callbacks?.onProgress?.({
31
+ type: "progress",
32
+ message: `Created directory: ${input.projectName}`,
33
+ });
34
+ }
35
+ // Switch to project directory
36
+ process.chdir(projectDir);
37
+ config_1.configManager.setWorkingDirectory(projectDir);
38
+ // Initialize task-o-matic directory structure
39
+ const taskOMaticDir = (0, path_1.join)(projectDir, ".task-o-matic");
40
+ if (!(0, fs_1.existsSync)(taskOMaticDir)) {
41
+ (0, fs_1.mkdirSync)(taskOMaticDir, { recursive: true });
42
+ ["tasks", "prd", "logs"].forEach((dir) => {
43
+ (0, fs_1.mkdirSync)((0, path_1.join)(taskOMaticDir, dir), { recursive: true });
44
+ });
45
+ }
46
+ input.callbacks?.onProgress?.({
47
+ type: "progress",
48
+ message: "Configuring AI settings...",
49
+ });
50
+ // Get AI configuration
51
+ const aiProvider = input.aiOptions?.aiProvider || "openrouter";
52
+ const aiModel = input.aiOptions?.aiModel ||
53
+ (aiProvider === "openrouter"
54
+ ? "anthropic/claude-3.5-sonnet"
55
+ : aiProvider === "anthropic"
56
+ ? "claude-3-5-sonnet-20240620"
57
+ : "gpt-4o");
58
+ const apiKey = input.aiOptions?.aiKey || process.env.AI_API_KEY || "";
59
+ // Save AI config to .env
60
+ const envPath = (0, path_1.join)(projectDir, ".env");
61
+ let envContent = (0, fs_1.existsSync)(envPath) ? (0, fs_1.readFileSync)(envPath, "utf-8") : "";
62
+ if (!envContent.includes("AI_PROVIDER=")) {
63
+ envContent += `AI_PROVIDER=${aiProvider}\n`;
64
+ }
65
+ if (!envContent.includes("AI_MODEL=")) {
66
+ envContent += `AI_MODEL=${aiModel}\n`;
67
+ }
68
+ if (input.aiOptions?.aiProviderUrl &&
69
+ !envContent.includes("AI_PROVIDER_URL=")) {
70
+ envContent += `AI_PROVIDER_URL=${input.aiOptions.aiProviderUrl}\n`;
71
+ }
72
+ const providerKeyName = aiProvider === "openai"
73
+ ? "OPENAI_API_KEY"
74
+ : aiProvider === "anthropic"
75
+ ? "ANTHROPIC_API_KEY"
76
+ : aiProvider === "openrouter"
77
+ ? "OPENROUTER_API_KEY"
78
+ : "AI_API_KEY";
79
+ if (!envContent.includes(`${providerKeyName}=`)) {
80
+ envContent += `${providerKeyName}=${apiKey}\n`;
81
+ }
82
+ (0, fs_1.writeFileSync)(envPath, envContent);
83
+ // Update process.env and ConfigManager
84
+ process.env.AI_PROVIDER = aiProvider;
85
+ process.env.AI_MODEL = aiModel;
86
+ process.env[providerKeyName] = apiKey;
87
+ if (input.aiOptions?.aiProviderUrl) {
88
+ process.env.AI_PROVIDER_URL = input.aiOptions.aiProviderUrl;
89
+ }
90
+ config_1.configManager.setAIConfig({
91
+ provider: aiProvider,
92
+ model: aiModel,
93
+ apiKey: apiKey,
94
+ baseURL: input.aiOptions?.aiProviderUrl,
95
+ });
96
+ // Determine stack configuration
97
+ let stackConfig = {
98
+ projectName: input.projectName,
99
+ aiProvider,
100
+ aiModel,
101
+ };
102
+ if (input.initMethod === "ai" && input.projectDescription) {
103
+ input.callbacks?.onProgress?.({
104
+ type: "progress",
105
+ message: "Getting AI recommendations for stack...",
106
+ });
107
+ stackConfig = await workflow_ai_assistant_1.workflowAIAssistant.assistInitConfig({
108
+ userDescription: input.projectDescription,
109
+ aiOptions: input.aiOptions,
110
+ streamingOptions: input.streamingOptions,
111
+ });
112
+ // Override with user's choices
113
+ stackConfig.projectName = input.projectName;
114
+ stackConfig.aiProvider = aiProvider;
115
+ stackConfig.aiModel = aiModel;
116
+ }
117
+ else if (input.initMethod === "quick") {
118
+ stackConfig = {
119
+ ...stackConfig,
120
+ frontend: "next",
121
+ backend: "hono",
122
+ database: "sqlite",
123
+ auth: true,
124
+ reasoning: "Modern, well-supported stack",
125
+ };
126
+ }
127
+ else if (input.stackConfig) {
128
+ stackConfig = { ...stackConfig, ...input.stackConfig };
129
+ }
130
+ // Bootstrap if requested
131
+ let bootstrapped = false;
132
+ if (input.bootstrap && (stackConfig.frontend || stackConfig.backend)) {
133
+ input.callbacks?.onProgress?.({
134
+ type: "progress",
135
+ message: "Bootstrapping with Better-T-Stack...",
136
+ });
137
+ try {
138
+ const result = await (0, better_t_stack_cli_1.runBetterTStackCLI)({
139
+ projectName: ".",
140
+ frontend: stackConfig.frontend || "next",
141
+ backend: stackConfig.backend || "hono",
142
+ database: stackConfig.database || "sqlite",
143
+ noAuth: !stackConfig.auth,
144
+ orm: "drizzle",
145
+ packageManager: "npm",
146
+ runtime: "node",
147
+ noInstall: false,
148
+ noGit: false,
149
+ }, projectDir);
150
+ if (result.success) {
151
+ bootstrapped = true;
152
+ // Fix config file naming
153
+ const dotConfigPath = (0, path_1.join)(taskOMaticDir, ".-bts-config.json");
154
+ const realConfigPath = (0, path_1.join)(taskOMaticDir, `${input.projectName}-bts-config.json`);
155
+ const stackConfigPath = (0, path_1.join)(taskOMaticDir, "stack.json");
156
+ if ((0, fs_1.existsSync)(dotConfigPath)) {
157
+ const configContent = JSON.parse((0, fs_1.readFileSync)(dotConfigPath, "utf-8"));
158
+ configContent.projectName = input.projectName;
159
+ const newContent = JSON.stringify(configContent, null, 2);
160
+ (0, fs_1.writeFileSync)(realConfigPath, newContent);
161
+ (0, fs_1.writeFileSync)(stackConfigPath, newContent);
162
+ const { unlinkSync } = require("fs");
163
+ unlinkSync(dotConfigPath);
164
+ }
165
+ }
166
+ }
167
+ catch (error) {
168
+ input.callbacks?.onError?.(error instanceof Error ? error : new Error(String(error)));
169
+ }
170
+ }
171
+ // Save configuration
172
+ config_1.configManager.save();
173
+ input.callbacks?.onProgress?.({
174
+ type: "completed",
175
+ message: "Project initialized successfully",
176
+ });
177
+ return {
178
+ success: true,
179
+ projectDir,
180
+ projectName: input.projectName,
181
+ aiConfig: {
182
+ provider: aiProvider,
183
+ model: aiModel,
184
+ key: apiKey,
185
+ },
186
+ stackConfig,
187
+ bootstrapped,
188
+ };
189
+ }
190
+ /**
191
+ * Step 2: Define PRD
192
+ * Handles PRD creation through various methods
193
+ */
194
+ async definePRD(input) {
195
+ const startTime = Date.now();
196
+ let tokenUsage;
197
+ let timeToFirstToken;
198
+ let cost;
199
+ input.callbacks?.onProgress?.({
200
+ type: "started",
201
+ message: "Defining PRD...",
202
+ });
203
+ const taskOMaticDir = (0, path_1.join)(input.projectDir, ".task-o-matic");
204
+ const prdDir = (0, path_1.join)(taskOMaticDir, "prd");
205
+ if (!(0, fs_1.existsSync)(prdDir)) {
206
+ (0, fs_1.mkdirSync)(prdDir, { recursive: true });
207
+ }
208
+ if (input.method === "skip") {
209
+ return {
210
+ success: true,
211
+ prdFile: "",
212
+ prdContent: "",
213
+ method: "skip",
214
+ stats: {
215
+ duration: Date.now() - startTime,
216
+ },
217
+ };
218
+ }
219
+ let prdContent = "";
220
+ let prdFilename = "prd.md";
221
+ if (input.method === "upload" && input.prdFile) {
222
+ if (!(0, fs_1.existsSync)(input.prdFile)) {
223
+ throw new Error(`PRD file not found: ${input.prdFile}`);
224
+ }
225
+ prdContent = (0, fs_1.readFileSync)(input.prdFile, "utf-8");
226
+ prdFilename = input.prdFile.split("/").pop() || "prd.md";
227
+ }
228
+ else if (input.method === "manual" && input.prdContent) {
229
+ prdContent = input.prdContent;
230
+ }
231
+ else if (input.method === "ai" && input.prdDescription) {
232
+ input.callbacks?.onProgress?.({
233
+ type: "progress",
234
+ message: "Generating PRD with AI...",
235
+ });
236
+ // Capture metrics for AI operations
237
+ const streamingOptions = {
238
+ ...input.streamingOptions,
239
+ onFinish: async (result) => {
240
+ if (result.usage) {
241
+ tokenUsage = {
242
+ prompt: result.usage.inputTokens || result.usage.promptTokens || 0,
243
+ completion: result.usage.outputTokens || result.usage.completionTokens || 0,
244
+ total: result.usage.totalTokens || 0,
245
+ };
246
+ // Calculate cost (simplified - would need proper pricing lookup)
247
+ if (tokenUsage.total > 0) {
248
+ cost = tokenUsage.total * 0.000001; // Placeholder cost calculation
249
+ }
250
+ }
251
+ // Call original onFinish if provided
252
+ input.streamingOptions?.onFinish?.(result);
253
+ },
254
+ onChunk: (chunk) => {
255
+ if (chunk && !timeToFirstToken) {
256
+ timeToFirstToken = Date.now() - startTime;
257
+ }
258
+ // Call original onChunk if provided
259
+ input.streamingOptions?.onChunk?.(chunk);
260
+ },
261
+ };
262
+ prdContent = await workflow_ai_assistant_1.workflowAIAssistant.assistPRDCreation({
263
+ userDescription: input.prdDescription,
264
+ aiOptions: input.aiOptions,
265
+ streamingOptions,
266
+ });
267
+ }
268
+ // Save PRD
269
+ const prdPath = (0, path_1.join)(prdDir, prdFilename);
270
+ (0, fs_1.writeFileSync)(prdPath, prdContent);
271
+ input.callbacks?.onProgress?.({
272
+ type: "completed",
273
+ message: `PRD saved to ${prdPath}`,
274
+ });
275
+ const stats = {
276
+ duration: Date.now() - startTime,
277
+ ...(tokenUsage && { tokenUsage }),
278
+ ...(timeToFirstToken && { timeToFirstToken }),
279
+ ...(cost && { cost }),
280
+ };
281
+ return {
282
+ success: true,
283
+ prdFile: prdPath,
284
+ prdContent,
285
+ method: input.method,
286
+ stats,
287
+ };
288
+ }
289
+ /**
290
+ * Step 3: Refine PRD
291
+ * Handles PRD refinement through manual or AI methods
292
+ */
293
+ async refinePRD(input) {
294
+ const startTime = Date.now();
295
+ let tokenUsage;
296
+ let timeToFirstToken;
297
+ let cost;
298
+ input.callbacks?.onProgress?.({
299
+ type: "started",
300
+ message: "Refining PRD...",
301
+ });
302
+ if (input.method === "skip") {
303
+ return {
304
+ success: true,
305
+ prdFile: input.prdFile,
306
+ prdContent: input.prdContent || (0, fs_1.readFileSync)(input.prdFile, "utf-8"),
307
+ stats: {
308
+ duration: Date.now() - startTime,
309
+ },
310
+ };
311
+ }
312
+ let refinedContent = input.prdContent || (0, fs_1.readFileSync)(input.prdFile, "utf-8");
313
+ if (input.method === "manual" && input.prdContent) {
314
+ refinedContent = input.prdContent;
315
+ }
316
+ else if (input.method === "ai" && input.feedback) {
317
+ input.callbacks?.onProgress?.({
318
+ type: "progress",
319
+ message: "Refining PRD with AI...",
320
+ });
321
+ // Capture metrics for AI operations
322
+ const streamingOptions = {
323
+ ...input.streamingOptions,
324
+ onFinish: async (result) => {
325
+ if (result.usage) {
326
+ tokenUsage = {
327
+ prompt: result.usage.inputTokens || result.usage.promptTokens || 0,
328
+ completion: result.usage.outputTokens || result.usage.completionTokens || 0,
329
+ total: result.usage.totalTokens || 0,
330
+ };
331
+ // Calculate cost (simplified - would need proper pricing lookup)
332
+ if (tokenUsage.total > 0) {
333
+ cost = tokenUsage.total * 0.000001; // Placeholder cost calculation
334
+ }
335
+ }
336
+ // Call original onFinish if provided
337
+ input.streamingOptions?.onFinish?.(result);
338
+ },
339
+ onChunk: (chunk) => {
340
+ if (chunk && !timeToFirstToken) {
341
+ timeToFirstToken = Date.now() - startTime;
342
+ }
343
+ // Call original onChunk if provided
344
+ input.streamingOptions?.onChunk?.(chunk);
345
+ },
346
+ };
347
+ refinedContent = await workflow_ai_assistant_1.workflowAIAssistant.assistPRDRefinement({
348
+ currentPRD: refinedContent,
349
+ userFeedback: input.feedback,
350
+ aiOptions: input.aiOptions,
351
+ streamingOptions,
352
+ });
353
+ }
354
+ // Save refined PRD
355
+ (0, fs_1.writeFileSync)(input.prdFile, refinedContent);
356
+ input.callbacks?.onProgress?.({
357
+ type: "completed",
358
+ message: "PRD refined successfully",
359
+ });
360
+ const stats = {
361
+ duration: Date.now() - startTime,
362
+ ...(tokenUsage && { tokenUsage }),
363
+ ...(timeToFirstToken && { timeToFirstToken }),
364
+ ...(cost && { cost }),
365
+ };
366
+ return {
367
+ success: true,
368
+ prdFile: input.prdFile,
369
+ prdContent: refinedContent,
370
+ stats,
371
+ };
372
+ }
373
+ /**
374
+ * Step 4: Generate Tasks
375
+ * Generates tasks from PRD using the prdService
376
+ */
377
+ async generateTasks(input) {
378
+ const startTime = Date.now();
379
+ let tokenUsage;
380
+ let timeToFirstToken;
381
+ let cost;
382
+ input.callbacks?.onProgress?.({
383
+ type: "started",
384
+ message: "Generating tasks from PRD...",
385
+ });
386
+ // Capture metrics for AI operations
387
+ const streamingOptions = {
388
+ ...input.streamingOptions,
389
+ onFinish: async (result) => {
390
+ if (result.usage) {
391
+ tokenUsage = {
392
+ prompt: result.usage.inputTokens || result.usage.promptTokens || 0,
393
+ completion: result.usage.outputTokens || result.usage.completionTokens || 0,
394
+ total: result.usage.totalTokens || 0,
395
+ };
396
+ // Calculate cost (simplified - would need proper pricing lookup)
397
+ if (tokenUsage.total > 0) {
398
+ cost = tokenUsage.total * 0.000001; // Placeholder cost calculation
399
+ }
400
+ }
401
+ // Call original onFinish if provided
402
+ input.streamingOptions?.onFinish?.(result);
403
+ },
404
+ onChunk: (chunk) => {
405
+ if (chunk && !timeToFirstToken) {
406
+ timeToFirstToken = Date.now() - startTime;
407
+ }
408
+ // Call original onChunk if provided
409
+ input.streamingOptions?.onChunk?.(chunk);
410
+ },
411
+ };
412
+ const result = await prd_1.prdService.parsePRD({
413
+ file: input.prdFile,
414
+ workingDirectory: input.projectDir,
415
+ aiOptions: input.aiOptions,
416
+ messageOverride: input.customInstructions,
417
+ streamingOptions,
418
+ callbacks: input.callbacks,
419
+ });
420
+ const stats = {
421
+ tasksCreated: result.tasks.length,
422
+ duration: Date.now() - startTime,
423
+ ...(tokenUsage && { tokenUsage }),
424
+ ...(timeToFirstToken && { timeToFirstToken }),
425
+ ...(cost && { cost }),
426
+ };
427
+ return {
428
+ success: true,
429
+ tasks: result.tasks,
430
+ stats,
431
+ };
432
+ }
433
+ /**
434
+ * Step 5: Split Tasks
435
+ * Splits complex tasks into subtasks
436
+ */
437
+ async splitTasks(input) {
438
+ input.callbacks?.onProgress?.({
439
+ type: "started",
440
+ message: `Splitting ${input.taskIds.length} tasks...`,
441
+ });
442
+ const results = [];
443
+ for (const taskId of input.taskIds) {
444
+ try {
445
+ input.callbacks?.onProgress?.({
446
+ type: "progress",
447
+ message: `Splitting task ${taskId}...`,
448
+ });
449
+ const result = await tasks_1.taskService.splitTask(taskId, input.aiOptions, undefined, // promptOverride
450
+ input.customInstructions, input.streamingOptions);
451
+ results.push({
452
+ taskId,
453
+ subtasks: result.subtasks,
454
+ });
455
+ }
456
+ catch (error) {
457
+ results.push({
458
+ taskId,
459
+ subtasks: [],
460
+ error: error instanceof Error ? error.message : String(error),
461
+ });
462
+ }
463
+ }
464
+ input.callbacks?.onProgress?.({
465
+ type: "completed",
466
+ message: "Task splitting completed",
467
+ });
468
+ return {
469
+ success: true,
470
+ results,
471
+ };
472
+ }
473
+ }
474
+ exports.WorkflowService = WorkflowService;
475
+ // Export singleton instance
476
+ exports.workflowService = new WorkflowService();
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=task-loop-git.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-loop-git.test.d.ts","sourceRoot":"","sources":["../../src/test/task-loop-git.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const assert_1 = __importDefault(require("assert"));
7
+ const task_loop_execution_1 = require("../lib/task-loop-execution");
8
+ describe("Task Loop Git Integration", () => {
9
+ const mockTaskTitle = "Test Task";
10
+ const mockExecutionMessage = "Executed task";
11
+ it("should extract commit info from existing commit", async () => {
12
+ const gitState = {
13
+ beforeHead: "abc",
14
+ afterHead: "def",
15
+ hasUncommittedChanges: false,
16
+ };
17
+ const mockExec = async (cmd) => {
18
+ if (cmd.includes("git show")) {
19
+ return {
20
+ stdout: "feat: test commit\n\nBody\n src/file.ts | 10 +",
21
+ stderr: "",
22
+ };
23
+ }
24
+ return { stdout: "", stderr: "" };
25
+ };
26
+ const result = await (0, task_loop_execution_1.extractCommitInfo)("1", mockTaskTitle, mockExecutionMessage, gitState, mockExec);
27
+ assert_1.default.strictEqual(result.message, "feat: test commit");
28
+ assert_1.default.deepStrictEqual(result.files, ["src/file.ts"]);
29
+ });
30
+ it("should generate commit info from uncommitted changes", async () => {
31
+ const gitState = {
32
+ beforeHead: "abc",
33
+ afterHead: "abc",
34
+ hasUncommittedChanges: true,
35
+ };
36
+ const mockExec = async (cmd) => {
37
+ if (cmd.includes("git diff")) {
38
+ return { stdout: "diff content", stderr: "" };
39
+ }
40
+ if (cmd.includes("git status")) {
41
+ return { stdout: " M src/changed.ts", stderr: "" };
42
+ }
43
+ return { stdout: "", stderr: "" };
44
+ };
45
+ const mockAiOps = {
46
+ streamText: async () => JSON.stringify({ message: "fix: auto commit" }),
47
+ };
48
+ const result = await (0, task_loop_execution_1.extractCommitInfo)("1", mockTaskTitle, mockExecutionMessage, gitState, mockExec, mockAiOps);
49
+ assert_1.default.strictEqual(result.message, "fix: auto commit");
50
+ assert_1.default.deepStrictEqual(result.files, ["src/changed.ts"]);
51
+ });
52
+ it("should return default info when no changes", async () => {
53
+ const gitState = {
54
+ beforeHead: "abc",
55
+ afterHead: "abc",
56
+ hasUncommittedChanges: false,
57
+ };
58
+ const result = await (0, task_loop_execution_1.extractCommitInfo)("1", mockTaskTitle, mockExecutionMessage, gitState);
59
+ assert_1.default.strictEqual(result.message, `feat: complete task ${mockTaskTitle}`);
60
+ assert_1.default.deepStrictEqual(result.files, []);
61
+ });
62
+ });
@@ -100,6 +100,9 @@ export interface AIPRDParseResult {
100
100
  export interface TaskBreakdownResponse {
101
101
  subtasks: ParsedAITask[];
102
102
  }
103
+ export interface PRDQuestionResponse {
104
+ questions: string[];
105
+ }
103
106
  export interface BTSConfig {
104
107
  frontend: "react" | "next" | "vue" | "none";
105
108
  backend: "convex" | "hono" | "express" | "none";
@@ -248,5 +251,55 @@ export interface ExecutionResult {
248
251
  exitCode?: number;
249
252
  error?: string;
250
253
  }
254
+ export interface ModelAttemptConfig {
255
+ executor?: ExecutorTool;
256
+ model?: string;
257
+ }
258
+ export interface ExecuteLoopConfig {
259
+ maxRetries?: number;
260
+ verificationCommands?: string[];
261
+ autoCommit?: boolean;
262
+ tryModels?: ModelAttemptConfig[];
263
+ }
264
+ export interface ExecuteLoopOptions {
265
+ filters?: {
266
+ status?: string;
267
+ tag?: string;
268
+ taskIds?: string[];
269
+ };
270
+ tool?: ExecutorTool;
271
+ config?: ExecuteLoopConfig;
272
+ dry?: boolean;
273
+ }
274
+ export interface TaskExecutionAttempt {
275
+ attemptNumber: number;
276
+ success: boolean;
277
+ error?: string;
278
+ executor?: ExecutorTool;
279
+ model?: string;
280
+ verificationResults?: Array<{
281
+ command: string;
282
+ success: boolean;
283
+ output?: string;
284
+ error?: string;
285
+ }>;
286
+ commitInfo?: {
287
+ message: string;
288
+ files: string[];
289
+ };
290
+ timestamp: number;
291
+ }
292
+ export interface ExecuteLoopResult {
293
+ totalTasks: number;
294
+ completedTasks: number;
295
+ failedTasks: number;
296
+ taskResults: Array<{
297
+ taskId: string;
298
+ taskTitle: string;
299
+ attempts: TaskExecutionAttempt[];
300
+ finalStatus: 'completed' | 'failed';
301
+ }>;
302
+ duration: number;
303
+ }
251
304
  export type { OperationResult, CreateTaskResult, EnhanceTaskResult, SplitTaskResult, PlanTaskResult, DocumentTaskResult, DeleteTaskResult, PRDParseResult, } from "./results";
252
305
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -91,7 +91,7 @@ export interface ReworkPrdOptions extends StreamingAIOptions {
91
91
  prompt?: string;
92
92
  message?: string;
93
93
  }
94
- export type WorkflowStep = "initialize" | "define-prd" | "refine-prd" | "generate-tasks" | "split-tasks" | "complete";
94
+ export type WorkflowStep = "initialize" | "define-prd" | "question-refine-prd" | "refine-prd" | "generate-tasks" | "split-tasks" | "complete";
95
95
  export interface WorkflowState {
96
96
  projectName?: string;
97
97
  projectDir?: string;
@@ -127,4 +127,5 @@ export interface InitConfigChoice {
127
127
  auth?: boolean;
128
128
  reasoning?: string;
129
129
  }
130
+ export * from "./workflow-options";
130
131
  //# sourceMappingURL=options.d.ts.map