task-o-matic 0.0.11 → 0.0.13

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 (123) hide show
  1. package/dist/commands/tasks/create.d.ts.map +1 -1
  2. package/dist/commands/tasks/create.js +6 -13
  3. package/dist/commands/tasks/document/add.d.ts +3 -0
  4. package/dist/commands/tasks/document/add.d.ts.map +1 -0
  5. package/dist/commands/tasks/document/add.js +35 -0
  6. package/dist/commands/tasks/document/analyze.d.ts +3 -0
  7. package/dist/commands/tasks/document/analyze.d.ts.map +1 -0
  8. package/dist/commands/tasks/document/analyze.js +49 -0
  9. package/dist/commands/tasks/document/get.d.ts +3 -0
  10. package/dist/commands/tasks/document/get.d.ts.map +1 -0
  11. package/dist/commands/tasks/document/get.js +29 -0
  12. package/dist/commands/tasks/document/index.d.ts +8 -0
  13. package/dist/commands/tasks/document/index.d.ts.map +1 -0
  14. package/dist/commands/tasks/document/index.js +13 -0
  15. package/dist/commands/tasks/enhance.d.ts.map +1 -1
  16. package/dist/commands/tasks/enhance.js +64 -61
  17. package/dist/commands/tasks/execute-loop.d.ts.map +1 -1
  18. package/dist/commands/tasks/execute-loop.js +66 -97
  19. package/dist/commands/tasks/execute.d.ts.map +1 -1
  20. package/dist/commands/tasks/execute.js +52 -16
  21. package/dist/commands/tasks/plan/create.d.ts +3 -0
  22. package/dist/commands/tasks/plan/create.d.ts.map +1 -0
  23. package/dist/commands/tasks/plan/create.js +37 -0
  24. package/dist/commands/tasks/plan/delete.d.ts +3 -0
  25. package/dist/commands/tasks/plan/delete.d.ts.map +1 -0
  26. package/dist/commands/tasks/plan/delete.js +14 -0
  27. package/dist/commands/tasks/plan/get.d.ts +3 -0
  28. package/dist/commands/tasks/plan/get.d.ts.map +1 -0
  29. package/dist/commands/tasks/plan/get.js +24 -0
  30. package/dist/commands/tasks/plan/index.d.ts +10 -0
  31. package/dist/commands/tasks/plan/index.d.ts.map +1 -0
  32. package/dist/commands/tasks/plan/index.js +17 -0
  33. package/dist/commands/tasks/plan/list.d.ts +3 -0
  34. package/dist/commands/tasks/plan/list.d.ts.map +1 -0
  35. package/dist/commands/tasks/plan/list.js +21 -0
  36. package/dist/commands/tasks/plan/set.d.ts +3 -0
  37. package/dist/commands/tasks/plan/set.d.ts.map +1 -0
  38. package/dist/commands/tasks/plan/set.js +33 -0
  39. package/dist/commands/tasks/split.d.ts.map +1 -1
  40. package/dist/commands/tasks/split.js +65 -60
  41. package/dist/lib/ai-service/documentation-operations.d.ts.map +1 -1
  42. package/dist/lib/ai-service/documentation-operations.js +22 -12
  43. package/dist/lib/ai-service/prd-operations.d.ts.map +1 -1
  44. package/dist/lib/ai-service/prd-operations.js +18 -25
  45. package/dist/lib/executors/opencode-executor.d.ts.map +1 -1
  46. package/dist/lib/executors/opencode-executor.js +3 -1
  47. package/dist/lib/git-utils.d.ts +45 -0
  48. package/dist/lib/git-utils.d.ts.map +1 -0
  49. package/dist/lib/git-utils.js +160 -0
  50. package/dist/lib/prompt-builder.d.ts +11 -0
  51. package/dist/lib/prompt-builder.d.ts.map +1 -1
  52. package/dist/lib/prompt-builder.js +59 -0
  53. package/dist/lib/prompt-registry.d.ts.map +1 -1
  54. package/dist/lib/prompt-registry.js +158 -0
  55. package/dist/lib/task-execution-core.d.ts +7 -0
  56. package/dist/lib/task-execution-core.d.ts.map +1 -0
  57. package/dist/lib/task-execution-core.js +360 -0
  58. package/dist/lib/task-execution.d.ts +4 -0
  59. package/dist/lib/task-execution.d.ts.map +1 -1
  60. package/dist/lib/task-execution.js +31 -178
  61. package/dist/lib/task-loop-execution.d.ts +1 -19
  62. package/dist/lib/task-loop-execution.d.ts.map +1 -1
  63. package/dist/lib/task-loop-execution.js +50 -592
  64. package/dist/lib/task-planning.d.ts +28 -0
  65. package/dist/lib/task-planning.d.ts.map +1 -0
  66. package/dist/lib/task-planning.js +109 -0
  67. package/dist/lib/task-review.d.ts +27 -0
  68. package/dist/lib/task-review.d.ts.map +1 -0
  69. package/dist/lib/task-review.js +106 -0
  70. package/dist/lib/validation.d.ts +20 -3
  71. package/dist/lib/validation.d.ts.map +1 -1
  72. package/dist/lib/validation.js +39 -10
  73. package/dist/prompts/documentation-recap.d.ts +3 -0
  74. package/dist/prompts/documentation-recap.d.ts.map +1 -0
  75. package/dist/prompts/documentation-recap.js +13 -0
  76. package/dist/prompts/index.d.ts +4 -0
  77. package/dist/prompts/index.d.ts.map +1 -1
  78. package/dist/prompts/index.js +4 -0
  79. package/dist/prompts/prd-question-answer.d.ts +3 -0
  80. package/dist/prompts/prd-question-answer.d.ts.map +1 -0
  81. package/dist/prompts/prd-question-answer.js +27 -0
  82. package/dist/prompts/task-execution.d.ts +3 -0
  83. package/dist/prompts/task-execution.d.ts.map +1 -0
  84. package/dist/prompts/task-execution.js +21 -0
  85. package/dist/prompts/workflow-prompts.d.ts +9 -0
  86. package/dist/prompts/workflow-prompts.d.ts.map +1 -0
  87. package/dist/prompts/workflow-prompts.js +93 -0
  88. package/dist/services/workflow-ai-assistant.d.ts.map +1 -1
  89. package/dist/services/workflow-ai-assistant.js +72 -94
  90. package/dist/test/task-loop-git.test.js +6 -6
  91. package/dist/types/cli-options.d.ts +138 -0
  92. package/dist/types/cli-options.d.ts.map +1 -0
  93. package/dist/types/cli-options.js +6 -0
  94. package/dist/types/index.d.ts +38 -0
  95. package/dist/types/index.d.ts.map +1 -1
  96. package/dist/utils/bulk-operations.d.ts +51 -0
  97. package/dist/utils/bulk-operations.d.ts.map +1 -0
  98. package/dist/utils/bulk-operations.js +68 -0
  99. package/dist/utils/cli-validators.d.ts +54 -0
  100. package/dist/utils/cli-validators.d.ts.map +1 -0
  101. package/dist/utils/cli-validators.js +75 -0
  102. package/dist/utils/command-error-handler.d.ts +32 -0
  103. package/dist/utils/command-error-handler.d.ts.map +1 -0
  104. package/dist/utils/command-error-handler.js +52 -0
  105. package/dist/utils/confirmation.d.ts +19 -0
  106. package/dist/utils/confirmation.d.ts.map +1 -0
  107. package/dist/utils/confirmation.js +39 -0
  108. package/dist/utils/display-helpers.d.ts +81 -0
  109. package/dist/utils/display-helpers.d.ts.map +1 -0
  110. package/dist/utils/display-helpers.js +109 -0
  111. package/dist/utils/model-executor-parser.d.ts +38 -0
  112. package/dist/utils/model-executor-parser.d.ts.map +1 -0
  113. package/dist/utils/model-executor-parser.js +67 -0
  114. package/dist/utils/progress-tracking.d.ts +28 -0
  115. package/dist/utils/progress-tracking.d.ts.map +1 -0
  116. package/dist/utils/progress-tracking.js +43 -0
  117. package/package.json +1 -1
  118. package/dist/commands/tasks/document.d.ts +0 -5
  119. package/dist/commands/tasks/document.d.ts.map +0 -1
  120. package/dist/commands/tasks/document.js +0 -118
  121. package/dist/commands/tasks/plan.d.ts +0 -7
  122. package/dist/commands/tasks/plan.d.ts.map +0 -1
  123. package/dist/commands/tasks/plan.js +0 -131
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Git state captured before and after execution
3
+ */
4
+ export interface GitState {
5
+ beforeHead: string;
6
+ afterHead: string;
7
+ hasUncommittedChanges: boolean;
8
+ }
9
+ /**
10
+ * Commit information extracted from git state
11
+ */
12
+ export interface CommitInfo {
13
+ message: string;
14
+ files: string[];
15
+ }
16
+ /**
17
+ * Capture git state (HEAD commit and uncommitted changes)
18
+ */
19
+ export declare function captureGitState(execFn?: (command: string) => Promise<{
20
+ stdout: string;
21
+ stderr: string;
22
+ }>): Promise<Partial<GitState>>;
23
+ /**
24
+ * Extract commit message and file list from git state
25
+ * This function analyzes the actual git state to generate appropriate commit info
26
+ */
27
+ export declare function extractCommitInfo(taskId: string, taskTitle: string, executionMessage: string, gitState: GitState, execFn?: (command: string) => Promise<{
28
+ stdout: string;
29
+ stderr: string;
30
+ }>, aiOps?: any): Promise<CommitInfo>;
31
+ /**
32
+ * Auto-commit changes using the provided commit info
33
+ */
34
+ export declare function autoCommit(commitInfo: CommitInfo, execFn?: (command: string) => Promise<{
35
+ stdout: string;
36
+ stderr: string;
37
+ }>): Promise<void>;
38
+ /**
39
+ * Commit a specific file with a custom message
40
+ */
41
+ export declare function commitFile(filePath: string, message: string, execFn?: (command: string) => Promise<{
42
+ stdout: string;
43
+ stderr: string;
44
+ }>): Promise<void>;
45
+ //# sourceMappingURL=git-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-utils.d.ts","sourceRoot":"","sources":["../../src/lib/git-utils.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,OAAO,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,MAAM,GAAE,CACN,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAa,GAC3D,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAc5B;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,gBAAgB,EAAE,MAAM,EACxB,QAAQ,EAAE,QAAQ,EAClB,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,UAAU,CAAC,CA6GrB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,UAAU,EAAE,UAAU,EACtB,MAAM,GAAE,CACN,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAa,GAC3D,OAAO,CAAC,IAAI,CAAC,CA8Bf;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,MAAM,GAAE,CACN,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAa,GAC3D,OAAO,CAAC,IAAI,CAAC,CAef"}
@@ -0,0 +1,160 @@
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.captureGitState = captureGitState;
7
+ exports.extractCommitInfo = extractCommitInfo;
8
+ exports.autoCommit = autoCommit;
9
+ exports.commitFile = commitFile;
10
+ const child_process_1 = require("child_process");
11
+ const util_1 = require("util");
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ const ai_service_factory_1 = require("../utils/ai-service-factory");
14
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
15
+ /**
16
+ * Capture git state (HEAD commit and uncommitted changes)
17
+ */
18
+ async function captureGitState(execFn = execAsync) {
19
+ try {
20
+ const { stdout: headStdout } = await execFn("git rev-parse HEAD");
21
+ const { stdout: statusStdout } = await execFn("git status --porcelain");
22
+ return {
23
+ beforeHead: headStdout.trim(),
24
+ afterHead: headStdout.trim(),
25
+ hasUncommittedChanges: statusStdout.trim().length > 0,
26
+ };
27
+ }
28
+ catch (e) {
29
+ // Git might not be initialized or no commits yet
30
+ return {};
31
+ }
32
+ }
33
+ /**
34
+ * Extract commit message and file list from git state
35
+ * This function analyzes the actual git state to generate appropriate commit info
36
+ */
37
+ async function extractCommitInfo(taskId, taskTitle, executionMessage, gitState, execFn = execAsync, aiOps = (0, ai_service_factory_1.getAIOperations)()) {
38
+ try {
39
+ // Case 1: Executor created a commit
40
+ if (gitState.beforeHead !== gitState.afterHead) {
41
+ console.log(chalk_1.default.blue("📝 Executor created a commit, extracting info..."));
42
+ const { stdout } = await execFn(`git show --stat --format="%s%n%b" ${gitState.afterHead}`);
43
+ const lines = stdout.trim().split("\n");
44
+ const message = lines[0].trim();
45
+ // Parse files from stat output (e.g. " src/file.ts | 10 +")
46
+ const files = lines
47
+ .slice(1)
48
+ .filter((line) => line.includes("|"))
49
+ .map((line) => line.split("|")[0].trim());
50
+ return {
51
+ message,
52
+ files,
53
+ };
54
+ }
55
+ // Case 2: Executor left uncommitted changes
56
+ if (gitState.hasUncommittedChanges) {
57
+ console.log(chalk_1.default.blue("📝 Uncommitted changes detected, generating commit message..."));
58
+ // Get the diff to send to AI
59
+ const { stdout: diff } = await execFn("git diff HEAD");
60
+ // Get list of changed files
61
+ const { stdout: status } = await execFn("git status --porcelain");
62
+ const files = status
63
+ .split("\n")
64
+ .filter((line) => line.length > 0)
65
+ .map((line) => line.substring(3).trim())
66
+ .filter((file) => file.length > 0);
67
+ // Use AI to generate commit message based on the diff
68
+ const prompt = `Based on the following git diff, generate a concise git commit message.
69
+
70
+ Task: ${taskTitle}
71
+
72
+ Git Diff:
73
+ ${diff.substring(0, 10000)} // Limit diff size
74
+
75
+ Please respond in JSON format:
76
+ {
77
+ "message": "concise commit message following conventional commits format"
78
+ }
79
+
80
+ The commit message should:
81
+ - Follow conventional commits format (feat:, fix:, refactor:, etc.)
82
+ - Be concise and descriptive
83
+ - Focus on what changed
84
+ `;
85
+ const response = await aiOps.streamText(prompt, undefined, "You are a helpful assistant that generates git commit messages.");
86
+ // Try to parse JSON from response
87
+ const jsonMatch = response.match(/\{[\s\S]*\}/);
88
+ let message = `feat: complete task ${taskTitle}`;
89
+ if (jsonMatch) {
90
+ try {
91
+ const parsed = JSON.parse(jsonMatch[0]);
92
+ if (parsed.message) {
93
+ message = parsed.message;
94
+ }
95
+ }
96
+ catch (e) {
97
+ // Ignore parse error
98
+ }
99
+ }
100
+ return {
101
+ message,
102
+ files,
103
+ };
104
+ }
105
+ // Case 3: No changes detected
106
+ return {
107
+ message: `feat: complete task ${taskTitle}`,
108
+ files: [],
109
+ };
110
+ }
111
+ catch (error) {
112
+ console.warn(chalk_1.default.yellow(`⚠️ Failed to extract commit info: ${error instanceof Error ? error.message : "Unknown error"}`));
113
+ // Fallback commit info
114
+ return {
115
+ message: `feat: complete task ${taskTitle}`,
116
+ files: [],
117
+ };
118
+ }
119
+ }
120
+ /**
121
+ * Auto-commit changes using the provided commit info
122
+ */
123
+ async function autoCommit(commitInfo, execFn = execAsync) {
124
+ try {
125
+ const { message, files } = commitInfo;
126
+ if (files.length > 0) {
127
+ // Stage specific files
128
+ const gitAdd = `git add ${files.join(" ")}`;
129
+ console.log(chalk_1.default.blue(`📦 Staging files: ${gitAdd}`));
130
+ await execFn(gitAdd);
131
+ }
132
+ else {
133
+ // Stage all changes
134
+ console.log(chalk_1.default.blue("📦 Staging all changes"));
135
+ await execFn("git add .");
136
+ }
137
+ // Commit
138
+ const gitCommit = `git commit -m "${message}"`;
139
+ console.log(chalk_1.default.blue(`💾 Committing: ${message}`));
140
+ await execFn(gitCommit);
141
+ console.log(chalk_1.default.green("✅ Changes committed successfully\n"));
142
+ }
143
+ catch (error) {
144
+ console.warn(chalk_1.default.yellow(`⚠️ Auto-commit failed: ${error instanceof Error ? error.message : "Unknown error"}\n`));
145
+ }
146
+ }
147
+ /**
148
+ * Commit a specific file with a custom message
149
+ */
150
+ async function commitFile(filePath, message, execFn = execAsync) {
151
+ try {
152
+ console.log(chalk_1.default.blue(`📦 Staging file: ${filePath}`));
153
+ await execFn(`git add ${filePath}`);
154
+ await execFn(`git commit -m "${message}"`);
155
+ console.log(chalk_1.default.green("✅ File committed successfully"));
156
+ }
157
+ catch (e) {
158
+ console.warn(chalk_1.default.yellow(`⚠️ Failed to commit file: ${e instanceof Error ? e.message : "Unknown error"}`));
159
+ }
160
+ }
@@ -54,5 +54,16 @@ export declare class PromptBuilder {
54
54
  * Format prompt for specific executor
55
55
  */
56
56
  static formatForExecutor(prompt: string, executor: "opencode" | "claude" | "gemini" | "codex"): string;
57
+ /**
58
+ * Build execution prompt with task context
59
+ */
60
+ static buildExecutionPrompt(options: {
61
+ taskTitle: string;
62
+ taskDescription?: string;
63
+ taskPlan?: string;
64
+ stack?: any;
65
+ documentation?: any;
66
+ retryContext?: string;
67
+ }): PromptBuilderResult;
57
68
  }
58
69
  //# sourceMappingURL=prompt-builder.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB;IAiFtE;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM;IAI5B;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GACvB,cAAc,GAAG,IAAI;IAKxB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAO/C;;OAEG;WACU,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAiBhE;;OAEG;WACU,gBAAgB,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAmClB;;OAEG;WACU,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwCnE;;OAEG;WACU,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4G1E;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GACnD,MAAM;CAmBV"}
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAOnE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7B;AAED,qBAAa,aAAa;IACxB;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,mBAAmB;IAiFtE;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,MAAM;IAI5B;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,GACvB,cAAc,GAAG,IAAI;IAKxB;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAO/C;;OAEG;WACU,oBAAoB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAiBhE;;OAEG;WACU,gBAAgB,CAC3B,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,CAAC;IAmClB;;OAEG;WACU,eAAe,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAwCnE;;OAEG;WACU,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IA4G1E;;OAEG;IACH,MAAM,CAAC,iBAAiB,CACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GACnD,MAAM;IAoBT;;OAEG;IACH,MAAM,CAAC,oBAAoB,CAAC,OAAO,EAAE;QACnC,SAAS,EAAE,MAAM,CAAC;QAClB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,KAAK,CAAC,EAAE,GAAG,CAAC;QACZ,aAAa,CAAC,EAAE,GAAG,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,CAAC;KACvB,GAAG,mBAAmB;CAmExB"}
@@ -274,5 +274,64 @@ class PromptBuilder {
274
274
  return prompt;
275
275
  }
276
276
  }
277
+ /**
278
+ * Build execution prompt with task context
279
+ */
280
+ static buildExecutionPrompt(options) {
281
+ const { taskTitle, taskDescription, taskPlan, stack, documentation, retryContext, } = options;
282
+ // Build TASK_PLAN variable
283
+ let taskPlanText = "";
284
+ if (taskPlan) {
285
+ taskPlanText = `# Task Plan\n\n${taskPlan}\n`;
286
+ }
287
+ else {
288
+ taskPlanText = `# Task: ${taskTitle}\n\n${taskDescription || "No description"}\n`;
289
+ }
290
+ // Build STACK_INFO variable
291
+ let stackInfo = "";
292
+ if (stack) {
293
+ const stackParts = [];
294
+ stackParts.push(`- **Project**: ${stack.projectName}`);
295
+ stackParts.push(`- **Frontend**: ${stack.frontend}`);
296
+ stackParts.push(`- **Backend**: ${stack.backend}`);
297
+ if (stack.database !== "none") {
298
+ stackParts.push(`- **Database**: ${stack.database}`);
299
+ }
300
+ if (stack.orm !== "none") {
301
+ stackParts.push(`- **ORM**: ${stack.orm}`);
302
+ }
303
+ stackParts.push(`- **Auth**: ${stack.auth}`);
304
+ if (stack.addons && stack.addons.length > 0) {
305
+ stackParts.push(`- **Addons**: ${stack.addons.join(", ")}`);
306
+ }
307
+ stackParts.push(`- **Package Manager**: ${stack.packageManager}`);
308
+ stackInfo = stackParts.join("\n");
309
+ }
310
+ // Build DOCUMENTATION_CONTEXT variable
311
+ let docContext = "";
312
+ if (documentation) {
313
+ const docParts = [];
314
+ docParts.push(`\n# Documentation Context\n`);
315
+ docParts.push(documentation.recap);
316
+ if (documentation.files && documentation.files.length > 0) {
317
+ docParts.push(`\n**Relevant Documentation Files**:`);
318
+ documentation.files.forEach((file) => {
319
+ docParts.push(`- ${file.path}`);
320
+ });
321
+ }
322
+ docContext = docParts.join("\n");
323
+ }
324
+ // Build RETRY_CONTEXT variable
325
+ const retryCtx = retryContext || "";
326
+ return this.buildPrompt({
327
+ name: "task-execution",
328
+ variables: {
329
+ RETRY_CONTEXT: retryCtx,
330
+ TASK_PLAN: taskPlanText,
331
+ STACK_INFO: stackInfo,
332
+ DOCUMENTATION_CONTEXT: docContext,
333
+ },
334
+ });
335
+ }
277
336
  }
278
337
  exports.PromptBuilder = PromptBuilder;
@@ -1 +1 @@
1
- {"version":3,"file":"prompt-registry.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-registry.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,OAAO,CA8JnB;IAEH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI1D,MAAM,CAAC,aAAa,IAAI,cAAc,EAAE;IAIxC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,cAAc,EAAE;IAMlE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvC,MAAM,CAAC,WAAW,IAAI,MAAM;IAiD5B,MAAM,CAAC,cAAc,CACnB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC;QACD,KAAK,EAAE,OAAO,CAAC;QACf,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B;CAuBF"}
1
+ {"version":3,"file":"prompt-registry.d.ts","sourceRoot":"","sources":["../../src/lib/prompt-registry.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,QAAQ,GAAG,MAAM,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,cAAc;IACzB,OAAO,CAAC,MAAM,CAAC,OAAO,CAiUnB;IAEH,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI1D,MAAM,CAAC,aAAa,IAAI,cAAc,EAAE;IAIxC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,cAAc,EAAE;IAMlE,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAIvC,MAAM,CAAC,WAAW,IAAI,MAAM;IAiD5B,MAAM,CAAC,cAAc,CACnB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAChC;QACD,KAAK,EAAE,OAAO,CAAC;QACf,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B;CAuBF"}
@@ -131,6 +131,29 @@ class PromptRegistry {
131
131
  promptText: prompts_1.TASK_PLANNING_SYSTEM_PROMPT,
132
132
  },
133
133
  ],
134
+ // Task Execution Prompts
135
+ [
136
+ "task-execution",
137
+ {
138
+ name: "task-execution",
139
+ description: "Execute task with full project context",
140
+ type: "user",
141
+ requiredVariables: ["TASK_PLAN", "STACK_INFO"],
142
+ optionalVariables: ["RETRY_CONTEXT", "DOCUMENTATION_CONTEXT"],
143
+ promptText: prompts_1.TASK_EXECUTION_PROMPT,
144
+ },
145
+ ],
146
+ [
147
+ "task-execution-system",
148
+ {
149
+ name: "task-execution-system",
150
+ description: "System prompt for task execution",
151
+ type: "system",
152
+ requiredVariables: [],
153
+ optionalVariables: [],
154
+ promptText: prompts_1.TASK_EXECUTION_SYSTEM_PROMPT,
155
+ },
156
+ ],
134
157
  // PRD Question Prompts
135
158
  [
136
159
  "prd-question",
@@ -154,6 +177,141 @@ class PromptRegistry {
154
177
  promptText: prompts_1.PRD_QUESTION_SYSTEM_PROMPT,
155
178
  },
156
179
  ],
180
+ // Documentation Recap Prompts
181
+ [
182
+ "documentation-recap",
183
+ {
184
+ name: "documentation-recap",
185
+ description: "Create concise recap of fetched documentation",
186
+ type: "user",
187
+ requiredVariables: ["LIBRARIES_LIST", "DOCUMENTATION_CONTENTS"],
188
+ optionalVariables: [],
189
+ promptText: prompts_1.DOCUMENTATION_RECAP_PROMPT,
190
+ },
191
+ ],
192
+ [
193
+ "documentation-recap-system",
194
+ {
195
+ name: "documentation-recap-system",
196
+ description: "System prompt for documentation recap",
197
+ type: "system",
198
+ requiredVariables: [],
199
+ optionalVariables: [],
200
+ promptText: prompts_1.DOCUMENTATION_RECAP_SYSTEM_PROMPT,
201
+ },
202
+ ],
203
+ // PRD Question Answer Prompts
204
+ [
205
+ "prd-question-answer",
206
+ {
207
+ name: "prd-question-answer",
208
+ description: "Answer questions about PRD",
209
+ type: "user",
210
+ requiredVariables: ["PRD_CONTENT", "QUESTIONS_TEXT"],
211
+ optionalVariables: ["CONTEXT_TEXT"],
212
+ promptText: prompts_1.PRD_QUESTION_ANSWER_PROMPT,
213
+ },
214
+ ],
215
+ [
216
+ "prd-question-answer-system",
217
+ {
218
+ name: "prd-question-answer-system",
219
+ description: "System prompt for PRD question answering",
220
+ type: "system",
221
+ requiredVariables: [],
222
+ optionalVariables: [],
223
+ promptText: prompts_1.PRD_QUESTION_ANSWER_SYSTEM_PROMPT,
224
+ },
225
+ ],
226
+ // Workflow Prompts
227
+ [
228
+ "project-init-suggestion",
229
+ {
230
+ name: "project-init-suggestion",
231
+ description: "Suggest project initialization configuration",
232
+ type: "user",
233
+ requiredVariables: ["USER_DESCRIPTION"],
234
+ optionalVariables: [],
235
+ promptText: prompts_1.PROJECT_INIT_SUGGESTION_PROMPT,
236
+ },
237
+ ],
238
+ [
239
+ "project-init-suggestion-system",
240
+ {
241
+ name: "project-init-suggestion-system",
242
+ description: "System prompt for project initialization",
243
+ type: "system",
244
+ requiredVariables: [],
245
+ optionalVariables: [],
246
+ promptText: prompts_1.PROJECT_INIT_SUGGESTION_SYSTEM_PROMPT,
247
+ },
248
+ ],
249
+ [
250
+ "prd-improvement",
251
+ {
252
+ name: "prd-improvement",
253
+ description: "Improve PRD based on user feedback",
254
+ type: "user",
255
+ requiredVariables: ["CURRENT_PRD", "USER_FEEDBACK"],
256
+ optionalVariables: [],
257
+ promptText: prompts_1.PRD_IMPROVEMENT_PROMPT,
258
+ },
259
+ ],
260
+ [
261
+ "prd-improvement-system",
262
+ {
263
+ name: "prd-improvement-system",
264
+ description: "System prompt for PRD improvement",
265
+ type: "system",
266
+ requiredVariables: [],
267
+ optionalVariables: [],
268
+ promptText: prompts_1.PRD_IMPROVEMENT_SYSTEM_PROMPT,
269
+ },
270
+ ],
271
+ [
272
+ "task-prioritization",
273
+ {
274
+ name: "task-prioritization",
275
+ description: "Prioritize tasks based on user guidance",
276
+ type: "user",
277
+ requiredVariables: ["TASKS_DESCRIPTION", "USER_GUIDANCE"],
278
+ optionalVariables: [],
279
+ promptText: prompts_1.TASK_PRIORITIZATION_PROMPT,
280
+ },
281
+ ],
282
+ [
283
+ "task-prioritization-system",
284
+ {
285
+ name: "task-prioritization-system",
286
+ description: "System prompt for task prioritization",
287
+ type: "system",
288
+ requiredVariables: [],
289
+ optionalVariables: [],
290
+ promptText: prompts_1.TASK_PRIORITIZATION_SYSTEM_PROMPT,
291
+ },
292
+ ],
293
+ [
294
+ "task-splitting-assistance",
295
+ {
296
+ name: "task-splitting-assistance",
297
+ description: "Generate task splitting instructions",
298
+ type: "user",
299
+ requiredVariables: ["TASK_TITLE", "USER_GUIDANCE"],
300
+ optionalVariables: ["TASK_CONTENT"],
301
+ promptText: prompts_1.TASK_SPLITTING_ASSISTANCE_PROMPT,
302
+ },
303
+ ],
304
+ [
305
+ "task-splitting-assistance-system",
306
+ {
307
+ name: "task-splitting-assistance-system",
308
+ description: "System prompt for task splitting assistance",
309
+ type: "system",
310
+ requiredVariables: [],
311
+ optionalVariables: [],
312
+ promptText: prompts_1.TASK_SPLITTING_ASSISTANCE_SYSTEM_PROMPT,
313
+ },
314
+ ],
157
315
  ]);
158
316
  static getPrompt(name) {
159
317
  return this.prompts.get(name);
@@ -0,0 +1,7 @@
1
+ import { TaskExecutionConfig, TaskExecutionResult } from "../types";
2
+ /**
3
+ * Execute a single task with all features (retry, planning, review, etc.)
4
+ * This is the core unified execution logic used by both execute and execute-loop commands
5
+ */
6
+ export declare function executeTaskCore(taskId: string, config: TaskExecutionConfig): Promise<TaskExecutionResult>;
7
+ //# sourceMappingURL=task-execution-core.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-execution-core.d.ts","sourceRoot":"","sources":["../../src/lib/task-execution-core.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EAKpB,MAAM,UAAU,CAAC;AAWlB;;;GAGG;AACH,wBAAsB,eAAe,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CA+D9B"}