task-o-matic 0.0.8 → 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 (38) hide show
  1. package/README.md +200 -0
  2. package/dist/commands/benchmark.d.ts.map +1 -1
  3. package/dist/commands/benchmark.js +342 -0
  4. package/dist/commands/tasks/execute-loop.d.ts +3 -0
  5. package/dist/commands/tasks/execute-loop.d.ts.map +1 -0
  6. package/dist/commands/tasks/execute-loop.js +118 -0
  7. package/dist/commands/tasks/index.d.ts +1 -0
  8. package/dist/commands/tasks/index.d.ts.map +1 -1
  9. package/dist/commands/tasks/index.js +1 -0
  10. package/dist/commands/tasks.d.ts.map +1 -1
  11. package/dist/commands/tasks.js +1 -0
  12. package/dist/commands/workflow.js +39 -0
  13. package/dist/lib/benchmark/registry.d.ts.map +1 -1
  14. package/dist/lib/benchmark/registry.js +11 -0
  15. package/dist/lib/benchmark/types.d.ts +50 -0
  16. package/dist/lib/benchmark/types.d.ts.map +1 -1
  17. package/dist/lib/task-loop-execution.d.ts +25 -0
  18. package/dist/lib/task-loop-execution.d.ts.map +1 -0
  19. package/dist/lib/task-loop-execution.js +473 -0
  20. package/dist/services/prd.d.ts.map +1 -1
  21. package/dist/services/prd.js +36 -1
  22. package/dist/services/tasks.d.ts.map +1 -1
  23. package/dist/services/tasks.js +90 -3
  24. package/dist/services/workflow-benchmark.d.ts +34 -0
  25. package/dist/services/workflow-benchmark.d.ts.map +1 -0
  26. package/dist/services/workflow-benchmark.js +317 -0
  27. package/dist/services/workflow.d.ts.map +1 -1
  28. package/dist/services/workflow.js +120 -7
  29. package/dist/test/task-loop-git.test.d.ts +2 -0
  30. package/dist/test/task-loop-git.test.d.ts.map +1 -0
  31. package/dist/test/task-loop-git.test.js +62 -0
  32. package/dist/types/index.d.ts +50 -0
  33. package/dist/types/index.d.ts.map +1 -1
  34. package/dist/types/results.d.ts +29 -1
  35. package/dist/types/results.d.ts.map +1 -1
  36. package/dist/types/workflow-results.d.ts +27 -0
  37. package/dist/types/workflow-results.d.ts.map +1 -1
  38. package/package.json +1 -1
@@ -0,0 +1,118 @@
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
+ exports.executeLoopCommand = void 0;
7
+ const commander_1 = require("commander");
8
+ const chalk_1 = __importDefault(require("chalk"));
9
+ const task_loop_execution_1 = require("../../lib/task-loop-execution");
10
+ /**
11
+ * Parse --try-models option into ModelAttemptConfig array
12
+ * Supports formats:
13
+ * - "model1,model2,model3" - just models (uses default executor)
14
+ * - "opencode:gpt-4o,claude:sonnet-4" - executor:model format
15
+ * - Mixed: "gpt-4o,claude:sonnet-4,gemini:gemini-2.0"
16
+ */
17
+ function parseTryModels(value) {
18
+ return value.split(",").map((item) => {
19
+ const trimmed = item.trim();
20
+ // Check if it includes executor specification (executor:model format)
21
+ if (trimmed.includes(":")) {
22
+ const [executor, model] = trimmed.split(":");
23
+ const validExecutors = [
24
+ "opencode",
25
+ "claude",
26
+ "gemini",
27
+ "codex",
28
+ ];
29
+ if (!validExecutors.includes(executor)) {
30
+ throw new Error(`Invalid executor "${executor}" in --try-models. Must be one of: ${validExecutors.join(", ")}`);
31
+ }
32
+ return {
33
+ executor: executor,
34
+ model: model.trim(),
35
+ };
36
+ }
37
+ // Just a model name - use default executor
38
+ return {
39
+ model: trimmed,
40
+ };
41
+ });
42
+ }
43
+ exports.executeLoopCommand = new commander_1.Command("execute-loop")
44
+ .description("Execute multiple tasks in a loop with retry logic and verification")
45
+ .option("--status <status>", "Filter tasks by status (todo/in-progress/completed)")
46
+ .option("--tag <tag>", "Filter tasks by tag")
47
+ .option("--ids <ids>", "Comma-separated list of task IDs to execute", (value) => value.split(",").map((id) => id.trim()))
48
+ .option("--tool <tool>", "External tool to use (opencode/claude/gemini/codex)", "opencode")
49
+ .option("--max-retries <number>", "Maximum number of retries per task", (value) => parseInt(value, 10), 3)
50
+ .option("--try-models <models>", "Progressive model/executor configs for each retry (e.g., 'gpt-4o-mini,gpt-4o,claude:sonnet-4')")
51
+ .option("--verify <command>", "Verification command to run after each task (can be used multiple times)", (value, previous = []) => {
52
+ return [...previous, value];
53
+ })
54
+ .option("--auto-commit", "Automatically commit changes after each task", false)
55
+ .option("--dry", "Show what would be executed without running it", false)
56
+ .action(async (options) => {
57
+ try {
58
+ // Validate tool
59
+ const validTools = [
60
+ "opencode",
61
+ "claude",
62
+ "gemini",
63
+ "codex",
64
+ ];
65
+ if (!validTools.includes(options.tool)) {
66
+ console.error(chalk_1.default.red(`Invalid tool: ${options.tool}. Must be one of: ${validTools.join(", ")}`));
67
+ process.exit(1);
68
+ }
69
+ // Parse tryModels if provided
70
+ let tryModels;
71
+ if (options.tryModels) {
72
+ try {
73
+ tryModels = parseTryModels(options.tryModels);
74
+ console.log(chalk_1.default.cyan(`📊 Progressive model escalation configured with ${tryModels.length} model(s):`));
75
+ tryModels.forEach((config, index) => {
76
+ const executorInfo = config.executor
77
+ ? `${config.executor}:`
78
+ : "default:";
79
+ const modelInfo = config.model || "default model";
80
+ console.log(chalk_1.default.cyan(` ${index + 1}. ${executorInfo}${modelInfo}`));
81
+ });
82
+ console.log();
83
+ }
84
+ catch (error) {
85
+ console.error(chalk_1.default.red(`Failed to parse --try-models: ${error instanceof Error ? error.message : "Unknown error"}`));
86
+ process.exit(1);
87
+ }
88
+ }
89
+ // Build options
90
+ const executeOptions = {
91
+ filters: {
92
+ status: options.status,
93
+ tag: options.tag,
94
+ taskIds: options.ids,
95
+ },
96
+ tool: options.tool,
97
+ config: {
98
+ maxRetries: options.maxRetries,
99
+ verificationCommands: options.verify || [],
100
+ autoCommit: options.autoCommit,
101
+ tryModels,
102
+ },
103
+ dry: options.dry,
104
+ };
105
+ // Execute task loop
106
+ const result = await (0, task_loop_execution_1.executeTaskLoop)(executeOptions);
107
+ // Exit with error code if any tasks failed
108
+ if (result.failedTasks > 0) {
109
+ console.error(chalk_1.default.red(`\n❌ ${result.failedTasks} task(s) failed. See logs above for details.`));
110
+ process.exit(1);
111
+ }
112
+ console.log(chalk_1.default.green(`\n✅ All ${result.completedTasks} task(s) completed successfully!`));
113
+ }
114
+ catch (error) {
115
+ console.error(chalk_1.default.red("Execute loop failed:"), error instanceof Error ? error.message : "Unknown error");
116
+ process.exit(1);
117
+ }
118
+ });
@@ -10,6 +10,7 @@ export * from "./enhance";
10
10
  export * from "./split";
11
11
  export * from "./document";
12
12
  export * from "./execute";
13
+ export * from "./execute-loop";
13
14
  export * from "./subtasks";
14
15
  export * from "./tree";
15
16
  export * from "./next";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/tasks/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC"}
@@ -26,6 +26,7 @@ __exportStar(require("./enhance"), exports);
26
26
  __exportStar(require("./split"), exports);
27
27
  __exportStar(require("./document"), exports);
28
28
  __exportStar(require("./execute"), exports);
29
+ __exportStar(require("./execute-loop"), exports);
29
30
  __exportStar(require("./subtasks"), exports);
30
31
  __exportStar(require("./tree"), exports);
31
32
  __exportStar(require("./next"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,eAAO,MAAM,YAAY,SAAuB,CAAC"}
1
+ {"version":3,"file":"tasks.d.ts","sourceRoot":"","sources":["../../src/commands/tasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,eAAO,MAAM,YAAY,SAAuB,CAAC"}
@@ -23,6 +23,7 @@ exports.tasksCommand.addCommand(index_1.documentCommand);
23
23
  exports.tasksCommand.addCommand(index_1.getDocumentationCommand);
24
24
  exports.tasksCommand.addCommand(index_1.addDocumentationCommand);
25
25
  exports.tasksCommand.addCommand(index_1.executeCommand);
26
+ exports.tasksCommand.addCommand(index_1.executeLoopCommand);
26
27
  exports.tasksCommand.addCommand(index_1.subtasksCommand);
27
28
  exports.tasksCommand.addCommand(index_1.treeCommand);
28
29
  exports.tasksCommand.addCommand(index_1.nextCommand);
@@ -328,6 +328,19 @@ async function stepDefinePRD(state, options, streamingOptions) {
328
328
  if (prdMethod === "ai") {
329
329
  console.log(chalk_1.default.green("\n✓ PRD generated"));
330
330
  console.log(chalk_1.default.gray("\n" + result.prdContent.substring(0, 500) + "...\n"));
331
+ // Display metrics if available
332
+ if (result.stats) {
333
+ console.log(chalk_1.default.cyan(` Duration: ${result.stats.duration}ms`));
334
+ if (result.stats.tokenUsage) {
335
+ console.log(chalk_1.default.cyan(` Tokens: ${result.stats.tokenUsage.total} (Prompt: ${result.stats.tokenUsage.prompt}, Completion: ${result.stats.tokenUsage.completion})`));
336
+ }
337
+ if (result.stats.timeToFirstToken) {
338
+ console.log(chalk_1.default.cyan(` Time to First Token: ${result.stats.timeToFirstToken}ms`));
339
+ }
340
+ if (result.stats.cost) {
341
+ console.log(chalk_1.default.cyan(` Estimated Cost: $${result.stats.cost.toFixed(6)}`));
342
+ }
343
+ }
331
344
  const acceptPRD = await getOrPrompt(options.autoAccept ? true : undefined, () => (0, workflow_prompts_1.confirmPrompt)("Accept this PRD?", true));
332
345
  if (!acceptPRD) {
333
346
  console.log(chalk_1.default.yellow("⚠ Regenerating..."));
@@ -516,6 +529,19 @@ async function stepRefinePRD(state, options, streamingOptions) {
516
529
  if (refineMethod === "ai") {
517
530
  console.log(chalk_1.default.green("\n✓ PRD refined"));
518
531
  console.log(chalk_1.default.gray("\n" + result.prdContent.substring(0, 500) + "...\n"));
532
+ // Display metrics if available
533
+ if (result.stats) {
534
+ console.log(chalk_1.default.cyan(` Duration: ${result.stats.duration}ms`));
535
+ if (result.stats.tokenUsage) {
536
+ console.log(chalk_1.default.cyan(` Tokens: ${result.stats.tokenUsage.total} (Prompt: ${result.stats.tokenUsage.prompt}, Completion: ${result.stats.tokenUsage.completion})`));
537
+ }
538
+ if (result.stats.timeToFirstToken) {
539
+ console.log(chalk_1.default.cyan(` Time to First Token: ${result.stats.timeToFirstToken}ms`));
540
+ }
541
+ if (result.stats.cost) {
542
+ console.log(chalk_1.default.cyan(` Estimated Cost: $${result.stats.cost.toFixed(6)}`));
543
+ }
544
+ }
519
545
  const acceptRefinement = await getOrPrompt(options.autoAccept ? true : undefined, () => (0, workflow_prompts_1.confirmPrompt)("Accept refinements?", true));
520
546
  if (!acceptRefinement) {
521
547
  console.log(chalk_1.default.yellow("⚠ Keeping original PRD"));
@@ -572,6 +598,19 @@ async function stepGenerateTasks(state, options, streamingOptions) {
572
598
  },
573
599
  });
574
600
  console.log(chalk_1.default.green(`\n✓ Generated ${result.tasks.length} tasks`));
601
+ // Display metrics if available
602
+ if (result.stats) {
603
+ console.log(chalk_1.default.cyan(` Duration: ${result.stats.duration}ms`));
604
+ if (result.stats.tokenUsage) {
605
+ console.log(chalk_1.default.cyan(` Tokens: ${result.stats.tokenUsage.total} (Prompt: ${result.stats.tokenUsage.prompt}, Completion: ${result.stats.tokenUsage.completion})`));
606
+ }
607
+ if (result.stats.timeToFirstToken) {
608
+ console.log(chalk_1.default.cyan(` Time to First Token: ${result.stats.timeToFirstToken}ms`));
609
+ }
610
+ if (result.stats.cost) {
611
+ console.log(chalk_1.default.cyan(` Estimated Cost: $${result.stats.cost.toFixed(6)}`));
612
+ }
613
+ }
575
614
  // Display tasks
576
615
  console.log(chalk_1.default.blue("\n Created Tasks:\n"));
577
616
  result.tasks.forEach((task, index) => {
@@ -1 +1 @@
1
- {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/lib/benchmark/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAMjD,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;CA+EzB;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
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;CAkGzB;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC"}
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.benchmarkRegistry = exports.BenchmarkRegistry = void 0;
4
4
  const prd_1 = require("../../services/prd");
5
5
  const tasks_1 = require("../../services/tasks"); // We'll need to instantiate this or use a singleton if available
6
+ const workflow_benchmark_1 = require("../../services/workflow-benchmark");
6
7
  class BenchmarkRegistry {
7
8
  operations = new Map();
8
9
  constructor() {
@@ -72,6 +73,16 @@ class BenchmarkRegistry {
72
73
  input.tools);
73
74
  },
74
75
  });
76
+ // Workflow Full Execution
77
+ this.register({
78
+ id: "workflow-full",
79
+ name: "Complete Workflow",
80
+ description: "Execute the complete workflow: initialization, PRD creation, task generation, and splitting",
81
+ validateInput: (input) => workflow_benchmark_1.workflowBenchmarkService.validateInput(input),
82
+ execute: async (input, aiOptions, streamingOptions) => {
83
+ return await workflow_benchmark_1.workflowBenchmarkService.executeWorkflow(input, aiOptions, streamingOptions);
84
+ },
85
+ });
75
86
  }
76
87
  }
77
88
  exports.BenchmarkRegistry = BenchmarkRegistry;
@@ -19,6 +19,8 @@ export interface BenchmarkProgressEvent {
19
19
  chunk?: string;
20
20
  }
21
21
  import { StreamingOptions } from "../../types";
22
+ import { WorkflowAutomationOptions } from "../../types/workflow-options";
23
+ import { Task } from "../../types";
22
24
  export interface BenchmarkResult {
23
25
  modelId: string;
24
26
  output: any;
@@ -36,6 +38,27 @@ export interface BenchmarkResult {
36
38
  timeToFirstToken?: number;
37
39
  cost?: number;
38
40
  }
41
+ export interface WorkflowBenchmarkResult extends BenchmarkResult {
42
+ output: {
43
+ projectDir?: string;
44
+ prdFile?: string;
45
+ prdContent?: string;
46
+ tasks: Task[];
47
+ stats: {
48
+ initDuration?: number;
49
+ prdGenerationDuration?: number;
50
+ prdRefinementDuration?: number;
51
+ taskGenerationDuration?: number;
52
+ taskSplittingDuration?: number;
53
+ totalTasks: number;
54
+ tasksWithSubtasks: number;
55
+ avgTaskComplexity?: number;
56
+ prdSize?: number;
57
+ totalSteps: number;
58
+ successfulSteps: number;
59
+ };
60
+ };
61
+ }
39
62
  export interface BenchmarkRun {
40
63
  id: string;
41
64
  timestamp: number;
@@ -44,6 +67,33 @@ export interface BenchmarkRun {
44
67
  config: BenchmarkConfig;
45
68
  results: BenchmarkResult[];
46
69
  }
70
+ export interface WorkflowBenchmarkInput {
71
+ collectedResponses: {
72
+ projectName: string;
73
+ initMethod: "quick" | "custom" | "ai";
74
+ projectDescription?: string;
75
+ stackConfig?: {
76
+ frontend?: string;
77
+ backend?: string;
78
+ database?: string;
79
+ auth?: boolean;
80
+ };
81
+ prdMethod: "upload" | "manual" | "ai" | "skip";
82
+ prdContent?: string;
83
+ prdDescription?: string;
84
+ prdFile?: string;
85
+ refinePrd?: boolean;
86
+ refineFeedback?: string;
87
+ generateTasks?: boolean;
88
+ customInstructions?: string;
89
+ splitTasks?: boolean;
90
+ tasksToSplit?: string[];
91
+ splitInstructions?: string;
92
+ };
93
+ workflowOptions: WorkflowAutomationOptions;
94
+ projectDir?: string;
95
+ tempDirBase?: string;
96
+ }
47
97
  export interface BenchmarkableOperation {
48
98
  id: string;
49
99
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/benchmark/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CACP,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,SAAS,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,KAChC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,aAAa,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;CACxC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/benchmark/types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,oBAAoB,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,OAAO,CAAC;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AACzE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAEnC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE;QACX,MAAM,EAAE,MAAM,CAAC;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;IACF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAwB,SAAQ,eAAe;IAC9D,MAAM,EAAE;QACN,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,KAAK,EAAE,IAAI,EAAE,CAAC;QACd,KAAK,EAAE;YACL,YAAY,CAAC,EAAE,MAAM,CAAC;YACtB,qBAAqB,CAAC,EAAE,MAAM,CAAC;YAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;YAC/B,sBAAsB,CAAC,EAAE,MAAM,CAAC;YAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;YAC/B,UAAU,EAAE,MAAM,CAAC;YACnB,iBAAiB,EAAE,MAAM,CAAC;YAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;YAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,MAAM,CAAC;YACnB,eAAe,EAAE,MAAM,CAAC;SACzB,CAAC;KACH,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,GAAG,CAAC;IACX,MAAM,EAAE,eAAe,CAAC;IACxB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,sBAAsB;IAErC,kBAAkB,EAAE;QAClB,WAAW,EAAE,MAAM,CAAC;QACpB,UAAU,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,CAAC;QACtC,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,WAAW,CAAC,EAAE;YACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,IAAI,CAAC,EAAE,OAAO,CAAC;SAChB,CAAC;QACF,SAAS,EAAE,QAAQ,GAAG,QAAQ,GAAG,IAAI,GAAG,MAAM,CAAC;QAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;QACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IAGF,eAAe,EAAE,yBAAyB,CAAC;IAG3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,CACP,KAAK,EAAE,GAAG,EACV,SAAS,EAAE,SAAS,EACpB,gBAAgB,CAAC,EAAE,gBAAgB,KAChC,OAAO,CAAC,GAAG,CAAC,CAAC;IAClB,aAAa,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,OAAO,CAAC;CACxC"}
@@ -0,0 +1,25 @@
1
+ import { ExecuteLoopOptions, ExecuteLoopResult } from "../types";
2
+ /**
3
+ * Extract commit message and file list from AI conversation/output
4
+ * This function analyzes the executor's work and generates appropriate commit info
5
+ */
6
+ /**
7
+ * Extract commit message and file list from git state
8
+ * This function analyzes the actual git state to generate appropriate commit info
9
+ */
10
+ export declare function extractCommitInfo(taskId: string, taskTitle: string, executionMessage: string, gitState: {
11
+ beforeHead: string;
12
+ afterHead: string;
13
+ hasUncommittedChanges: boolean;
14
+ }, execFn?: (command: string) => Promise<{
15
+ stdout: string;
16
+ stderr: string;
17
+ }>, aiOps?: any): Promise<{
18
+ message: string;
19
+ files: string[];
20
+ }>;
21
+ /**
22
+ * Execute multiple tasks in a loop with retry and verification
23
+ */
24
+ export declare function executeTaskLoop(options: ExecuteLoopOptions): Promise<ExecuteLoopResult>;
25
+ //# sourceMappingURL=task-loop-execution.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-loop-execution.d.ts","sourceRoot":"","sources":["../../src/lib/task-loop-execution.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAIlB,MAAM,UAAU,CAAC;AAYlB;;;GAGG;AACH;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE;IACR,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,OAAO,CAAC;CAChC,EACD,MAAM,GAAE,CACN,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAa,EAC5D,KAAK,GAAE,GAAuB,GAC7B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA+G/C;AAsXD;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,kBAAkB,GAC1B,OAAO,CAAC,iBAAiB,CAAC,CA0K5B"}