task-o-matic-core 0.1.0

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 (447) hide show
  1. package/README.md +646 -0
  2. package/dist/index.d.ts +27 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +46 -0
  5. package/dist/lib/ai-service/ai-operations.d.ts +45 -0
  6. package/dist/lib/ai-service/ai-operations.d.ts.map +1 -0
  7. package/dist/lib/ai-service/ai-operations.js +60 -0
  8. package/dist/lib/ai-service/base-operations.d.ts +43 -0
  9. package/dist/lib/ai-service/base-operations.d.ts.map +1 -0
  10. package/dist/lib/ai-service/base-operations.js +119 -0
  11. package/dist/lib/ai-service/documentation-operations.d.ts +18 -0
  12. package/dist/lib/ai-service/documentation-operations.d.ts.map +1 -0
  13. package/dist/lib/ai-service/documentation-operations.js +308 -0
  14. package/dist/lib/ai-service/filesystem-tools.d.ts +69 -0
  15. package/dist/lib/ai-service/filesystem-tools.d.ts.map +1 -0
  16. package/dist/lib/ai-service/filesystem-tools.js +70 -0
  17. package/dist/lib/ai-service/json-parser.d.ts +34 -0
  18. package/dist/lib/ai-service/json-parser.d.ts.map +1 -0
  19. package/dist/lib/ai-service/json-parser.js +177 -0
  20. package/dist/lib/ai-service/mcp-client.d.ts +9 -0
  21. package/dist/lib/ai-service/mcp-client.d.ts.map +1 -0
  22. package/dist/lib/ai-service/mcp-client.js +48 -0
  23. package/dist/lib/ai-service/model-provider.d.ts +12 -0
  24. package/dist/lib/ai-service/model-provider.d.ts.map +1 -0
  25. package/dist/lib/ai-service/model-provider.js +146 -0
  26. package/dist/lib/ai-service/prd-operations.d.ts +25 -0
  27. package/dist/lib/ai-service/prd-operations.d.ts.map +1 -0
  28. package/dist/lib/ai-service/prd-operations.js +592 -0
  29. package/dist/lib/ai-service/research-tools.d.ts +4 -0
  30. package/dist/lib/ai-service/research-tools.d.ts.map +1 -0
  31. package/dist/lib/ai-service/research-tools.js +8 -0
  32. package/dist/lib/ai-service/retry-handler.d.ts +8 -0
  33. package/dist/lib/ai-service/retry-handler.d.ts.map +1 -0
  34. package/dist/lib/ai-service/retry-handler.js +63 -0
  35. package/dist/lib/ai-service/task-operations.d.ts +13 -0
  36. package/dist/lib/ai-service/task-operations.d.ts.map +1 -0
  37. package/dist/lib/ai-service/task-operations.js +220 -0
  38. package/dist/lib/benchmark/registry.d.ts +11 -0
  39. package/dist/lib/benchmark/registry.d.ts.map +1 -0
  40. package/dist/lib/benchmark/registry.js +212 -0
  41. package/dist/lib/benchmark/runner.d.ts +6 -0
  42. package/dist/lib/benchmark/runner.d.ts.map +1 -0
  43. package/dist/lib/benchmark/runner.js +150 -0
  44. package/dist/lib/benchmark/storage.d.ts +13 -0
  45. package/dist/lib/benchmark/storage.d.ts.map +1 -0
  46. package/dist/lib/benchmark/storage.js +100 -0
  47. package/dist/lib/benchmark/types.d.ts +104 -0
  48. package/dist/lib/benchmark/types.d.ts.map +1 -0
  49. package/dist/lib/benchmark/types.js +2 -0
  50. package/dist/lib/better-t-stack-cli.d.ts +50 -0
  51. package/dist/lib/better-t-stack-cli.d.ts.map +1 -0
  52. package/dist/lib/better-t-stack-cli.js +428 -0
  53. package/dist/lib/bootstrap/cli-bootstrap.d.ts +14 -0
  54. package/dist/lib/bootstrap/cli-bootstrap.d.ts.map +1 -0
  55. package/dist/lib/bootstrap/cli-bootstrap.js +322 -0
  56. package/dist/lib/bootstrap/index.d.ts +3 -0
  57. package/dist/lib/bootstrap/index.d.ts.map +1 -0
  58. package/dist/lib/bootstrap/index.js +18 -0
  59. package/dist/lib/bootstrap/medusa-bootstrap.d.ts +14 -0
  60. package/dist/lib/bootstrap/medusa-bootstrap.d.ts.map +1 -0
  61. package/dist/lib/bootstrap/medusa-bootstrap.js +215 -0
  62. package/dist/lib/config-validation.d.ts +215 -0
  63. package/dist/lib/config-validation.d.ts.map +1 -0
  64. package/dist/lib/config-validation.js +254 -0
  65. package/dist/lib/config.d.ts +55 -0
  66. package/dist/lib/config.d.ts.map +1 -0
  67. package/dist/lib/config.js +351 -0
  68. package/dist/lib/context-builder.d.ts +66 -0
  69. package/dist/lib/context-builder.d.ts.map +1 -0
  70. package/dist/lib/context-builder.js +322 -0
  71. package/dist/lib/executors/claude-code-executor.d.ts +9 -0
  72. package/dist/lib/executors/claude-code-executor.d.ts.map +1 -0
  73. package/dist/lib/executors/claude-code-executor.js +69 -0
  74. package/dist/lib/executors/codex-executor.d.ts +9 -0
  75. package/dist/lib/executors/codex-executor.d.ts.map +1 -0
  76. package/dist/lib/executors/codex-executor.js +73 -0
  77. package/dist/lib/executors/executor-factory.d.ts +5 -0
  78. package/dist/lib/executors/executor-factory.d.ts.map +1 -0
  79. package/dist/lib/executors/executor-factory.js +27 -0
  80. package/dist/lib/executors/gemini-executor.d.ts +9 -0
  81. package/dist/lib/executors/gemini-executor.d.ts.map +1 -0
  82. package/dist/lib/executors/gemini-executor.js +67 -0
  83. package/dist/lib/executors/kilo-executor.d.ts +9 -0
  84. package/dist/lib/executors/kilo-executor.d.ts.map +1 -0
  85. package/dist/lib/executors/kilo-executor.js +69 -0
  86. package/dist/lib/executors/opencode-executor.d.ts +9 -0
  87. package/dist/lib/executors/opencode-executor.d.ts.map +1 -0
  88. package/dist/lib/executors/opencode-executor.js +67 -0
  89. package/dist/lib/git-utils.d.ts +88 -0
  90. package/dist/lib/git-utils.d.ts.map +1 -0
  91. package/dist/lib/git-utils.js +242 -0
  92. package/dist/lib/hooks.d.ts +73 -0
  93. package/dist/lib/hooks.d.ts.map +1 -0
  94. package/dist/lib/hooks.js +62 -0
  95. package/dist/lib/index.d.ts +100 -0
  96. package/dist/lib/index.d.ts.map +1 -0
  97. package/dist/lib/index.js +143 -0
  98. package/dist/lib/logger.d.ts +20 -0
  99. package/dist/lib/logger.d.ts.map +1 -0
  100. package/dist/lib/logger.js +32 -0
  101. package/dist/lib/notifications.d.ts +7 -0
  102. package/dist/lib/notifications.d.ts.map +1 -0
  103. package/dist/lib/notifications.js +81 -0
  104. package/dist/lib/prompt-builder.d.ts +70 -0
  105. package/dist/lib/prompt-builder.d.ts.map +1 -0
  106. package/dist/lib/prompt-builder.js +344 -0
  107. package/dist/lib/prompt-registry.d.ts +22 -0
  108. package/dist/lib/prompt-registry.d.ts.map +1 -0
  109. package/dist/lib/prompt-registry.js +409 -0
  110. package/dist/lib/provider-defaults.json +32 -0
  111. package/dist/lib/storage/file-system.d.ts +57 -0
  112. package/dist/lib/storage/file-system.d.ts.map +1 -0
  113. package/dist/lib/storage/file-system.js +638 -0
  114. package/dist/lib/storage/storage-callbacks.d.ts +17 -0
  115. package/dist/lib/storage/storage-callbacks.d.ts.map +1 -0
  116. package/dist/lib/storage/storage-callbacks.js +94 -0
  117. package/dist/lib/storage/types.d.ts +43 -0
  118. package/dist/lib/storage/types.d.ts.map +1 -0
  119. package/dist/lib/storage/types.js +2 -0
  120. package/dist/lib/task-execution-core.d.ts +7 -0
  121. package/dist/lib/task-execution-core.d.ts.map +1 -0
  122. package/dist/lib/task-execution-core.js +381 -0
  123. package/dist/lib/task-execution.d.ts +7 -0
  124. package/dist/lib/task-execution.d.ts.map +1 -0
  125. package/dist/lib/task-execution.js +40 -0
  126. package/dist/lib/task-loop-execution.d.ts +7 -0
  127. package/dist/lib/task-loop-execution.d.ts.map +1 -0
  128. package/dist/lib/task-loop-execution.js +156 -0
  129. package/dist/lib/task-planning.d.ts +29 -0
  130. package/dist/lib/task-planning.d.ts.map +1 -0
  131. package/dist/lib/task-planning.js +103 -0
  132. package/dist/lib/task-review.d.ts +27 -0
  133. package/dist/lib/task-review.d.ts.map +1 -0
  134. package/dist/lib/task-review.js +103 -0
  135. package/dist/lib/validation.d.ts +26 -0
  136. package/dist/lib/validation.d.ts.map +1 -0
  137. package/dist/lib/validation.js +98 -0
  138. package/dist/prompts/documentation-detection.d.ts +2 -0
  139. package/dist/prompts/documentation-detection.d.ts.map +1 -0
  140. package/dist/prompts/documentation-detection.js +24 -0
  141. package/dist/prompts/documentation-recap.d.ts +3 -0
  142. package/dist/prompts/documentation-recap.d.ts.map +1 -0
  143. package/dist/prompts/documentation-recap.js +13 -0
  144. package/dist/prompts/index.d.ts +15 -0
  145. package/dist/prompts/index.d.ts.map +1 -0
  146. package/dist/prompts/index.js +30 -0
  147. package/dist/prompts/prd-combination.d.ts +2 -0
  148. package/dist/prompts/prd-combination.d.ts.map +1 -0
  149. package/dist/prompts/prd-combination.js +35 -0
  150. package/dist/prompts/prd-generation.d.ts +2 -0
  151. package/dist/prompts/prd-generation.d.ts.map +1 -0
  152. package/dist/prompts/prd-generation.js +49 -0
  153. package/dist/prompts/prd-parsing.d.ts +3 -0
  154. package/dist/prompts/prd-parsing.d.ts.map +1 -0
  155. package/dist/prompts/prd-parsing.js +172 -0
  156. package/dist/prompts/prd-question-answer.d.ts +3 -0
  157. package/dist/prompts/prd-question-answer.d.ts.map +1 -0
  158. package/dist/prompts/prd-question-answer.js +27 -0
  159. package/dist/prompts/prd-question.d.ts +3 -0
  160. package/dist/prompts/prd-question.d.ts.map +1 -0
  161. package/dist/prompts/prd-question.js +40 -0
  162. package/dist/prompts/prd-rework.d.ts +3 -0
  163. package/dist/prompts/prd-rework.d.ts.map +1 -0
  164. package/dist/prompts/prd-rework.js +81 -0
  165. package/dist/prompts/prd-suggest-stack.d.ts +3 -0
  166. package/dist/prompts/prd-suggest-stack.d.ts.map +1 -0
  167. package/dist/prompts/prd-suggest-stack.js +99 -0
  168. package/dist/prompts/task-breakdown.d.ts +3 -0
  169. package/dist/prompts/task-breakdown.d.ts.map +1 -0
  170. package/dist/prompts/task-breakdown.js +151 -0
  171. package/dist/prompts/task-enhancement.d.ts +3 -0
  172. package/dist/prompts/task-enhancement.d.ts.map +1 -0
  173. package/dist/prompts/task-enhancement.js +140 -0
  174. package/dist/prompts/task-execution.d.ts +3 -0
  175. package/dist/prompts/task-execution.d.ts.map +1 -0
  176. package/dist/prompts/task-execution.js +24 -0
  177. package/dist/prompts/task-planning.d.ts +3 -0
  178. package/dist/prompts/task-planning.d.ts.map +1 -0
  179. package/dist/prompts/task-planning.js +66 -0
  180. package/dist/prompts/workflow-assistance.d.ts +32 -0
  181. package/dist/prompts/workflow-assistance.d.ts.map +1 -0
  182. package/dist/prompts/workflow-assistance.js +130 -0
  183. package/dist/prompts/workflow-prompts.d.ts +9 -0
  184. package/dist/prompts/workflow-prompts.d.ts.map +1 -0
  185. package/dist/prompts/workflow-prompts.js +93 -0
  186. package/dist/services/benchmark.d.ts +26 -0
  187. package/dist/services/benchmark.d.ts.map +1 -0
  188. package/dist/services/benchmark.js +343 -0
  189. package/dist/services/prd.d.ts +136 -0
  190. package/dist/services/prd.d.ts.map +1 -0
  191. package/dist/services/prd.js +550 -0
  192. package/dist/services/tasks.d.ts +388 -0
  193. package/dist/services/tasks.d.ts.map +1 -0
  194. package/dist/services/tasks.js +1150 -0
  195. package/dist/services/workflow-ai-assistant.d.ts +74 -0
  196. package/dist/services/workflow-ai-assistant.d.ts.map +1 -0
  197. package/dist/services/workflow-ai-assistant.js +175 -0
  198. package/dist/services/workflow-benchmark.d.ts +34 -0
  199. package/dist/services/workflow-benchmark.d.ts.map +1 -0
  200. package/dist/services/workflow-benchmark.js +318 -0
  201. package/dist/services/workflow.d.ts +107 -0
  202. package/dist/services/workflow.d.ts.map +1 -0
  203. package/dist/services/workflow.js +580 -0
  204. package/dist/test/hooks.test.d.ts +2 -0
  205. package/dist/test/hooks.test.d.ts.map +1 -0
  206. package/dist/test/hooks.test.js +67 -0
  207. package/dist/test/integration/callbacks.test.d.ts +2 -0
  208. package/dist/test/integration/callbacks.test.d.ts.map +1 -0
  209. package/dist/test/integration/callbacks.test.js +64 -0
  210. package/dist/test/lib/ai-service/task-operations.test.d.ts +2 -0
  211. package/dist/test/lib/ai-service/task-operations.test.d.ts.map +1 -0
  212. package/dist/test/lib/ai-service/task-operations.test.js +362 -0
  213. package/dist/test/lib/config.test.d.ts +2 -0
  214. package/dist/test/lib/config.test.d.ts.map +1 -0
  215. package/dist/test/lib/config.test.js +128 -0
  216. package/dist/test/lib/git-utils.test.d.ts +2 -0
  217. package/dist/test/lib/git-utils.test.d.ts.map +1 -0
  218. package/dist/test/lib/git-utils.test.js +168 -0
  219. package/dist/test/mocks/mock-ai-operations.d.ts +15 -0
  220. package/dist/test/mocks/mock-ai-operations.d.ts.map +1 -0
  221. package/dist/test/mocks/mock-ai-operations.js +107 -0
  222. package/dist/test/mocks/mock-context-builder.d.ts +10 -0
  223. package/dist/test/mocks/mock-context-builder.d.ts.map +1 -0
  224. package/dist/test/mocks/mock-context-builder.js +81 -0
  225. package/dist/test/mocks/mock-model-provider.d.ts +7 -0
  226. package/dist/test/mocks/mock-model-provider.d.ts.map +1 -0
  227. package/dist/test/mocks/mock-model-provider.js +21 -0
  228. package/dist/test/mocks/mock-service-factory.d.ts +11 -0
  229. package/dist/test/mocks/mock-service-factory.d.ts.map +1 -0
  230. package/dist/test/mocks/mock-service-factory.js +61 -0
  231. package/dist/test/mocks/mock-storage.d.ts +50 -0
  232. package/dist/test/mocks/mock-storage.d.ts.map +1 -0
  233. package/dist/test/mocks/mock-storage.js +145 -0
  234. package/dist/test/model-parsing.test.d.ts +2 -0
  235. package/dist/test/model-parsing.test.d.ts.map +1 -0
  236. package/dist/test/model-parsing.test.js +73 -0
  237. package/dist/test/services/task-service.test.d.ts +2 -0
  238. package/dist/test/services/task-service.test.d.ts.map +1 -0
  239. package/dist/test/services/task-service.test.js +459 -0
  240. package/dist/test/storage.test.d.ts +2 -0
  241. package/dist/test/storage.test.d.ts.map +1 -0
  242. package/dist/test/storage.test.js +207 -0
  243. package/dist/test/task-loop-git.test.d.ts +2 -0
  244. package/dist/test/task-loop-git.test.d.ts.map +1 -0
  245. package/dist/test/task-loop-git.test.js +95 -0
  246. package/dist/test/test-mock-setup.d.ts +26 -0
  247. package/dist/test/test-mock-setup.d.ts.map +1 -0
  248. package/dist/test/test-mock-setup.js +41 -0
  249. package/dist/test/test-setup.d.ts +9 -0
  250. package/dist/test/test-setup.d.ts.map +1 -0
  251. package/dist/test/test-setup.js +44 -0
  252. package/dist/test/test-utils.d.ts +22 -0
  253. package/dist/test/test-utils.d.ts.map +1 -0
  254. package/dist/test/test-utils.js +37 -0
  255. package/dist/test/utils/ai-operation-utility.test.d.ts +2 -0
  256. package/dist/test/utils/ai-operation-utility.test.d.ts.map +1 -0
  257. package/dist/test/utils/ai-operation-utility.test.js +290 -0
  258. package/dist/test/utils/error-handling.test.d.ts +2 -0
  259. package/dist/test/utils/error-handling.test.d.ts.map +1 -0
  260. package/dist/test/utils/error-handling.test.js +231 -0
  261. package/dist/test/utils/file-utils.test.d.ts +2 -0
  262. package/dist/test/utils/file-utils.test.d.ts.map +1 -0
  263. package/dist/test/utils/file-utils.test.js +76 -0
  264. package/dist/test/utils/id-generator.test.d.ts +2 -0
  265. package/dist/test/utils/id-generator.test.d.ts.map +1 -0
  266. package/dist/test/utils/id-generator.test.js +41 -0
  267. package/dist/test/utils/model-parser.test.d.ts +2 -0
  268. package/dist/test/utils/model-parser.test.d.ts.map +1 -0
  269. package/dist/test/utils/model-parser.test.js +65 -0
  270. package/dist/test/validation.test.d.ts +2 -0
  271. package/dist/test/validation.test.d.ts.map +1 -0
  272. package/dist/test/validation.test.js +22 -0
  273. package/dist/types/callbacks.d.ts +30 -0
  274. package/dist/types/callbacks.d.ts.map +1 -0
  275. package/dist/types/callbacks.js +2 -0
  276. package/dist/types/index.d.ts +435 -0
  277. package/dist/types/index.d.ts.map +1 -0
  278. package/dist/types/index.js +30 -0
  279. package/dist/types/mcp.d.ts +3 -0
  280. package/dist/types/mcp.d.ts.map +1 -0
  281. package/dist/types/mcp.js +3 -0
  282. package/dist/types/options.d.ts +112 -0
  283. package/dist/types/options.d.ts.map +1 -0
  284. package/dist/types/options.js +2 -0
  285. package/dist/types/results.d.ts +200 -0
  286. package/dist/types/results.d.ts.map +1 -0
  287. package/dist/types/results.js +2 -0
  288. package/dist/types/workflow-options.d.ts +82 -0
  289. package/dist/types/workflow-options.d.ts.map +1 -0
  290. package/dist/types/workflow-options.js +2 -0
  291. package/dist/types/workflow-results.d.ts +82 -0
  292. package/dist/types/workflow-results.d.ts.map +1 -0
  293. package/dist/types/workflow-results.js +2 -0
  294. package/dist/utils/ai-config-builder.d.ts +14 -0
  295. package/dist/utils/ai-config-builder.d.ts.map +1 -0
  296. package/dist/utils/ai-config-builder.js +22 -0
  297. package/dist/utils/ai-operation-utility.d.ts +142 -0
  298. package/dist/utils/ai-operation-utility.d.ts.map +1 -0
  299. package/dist/utils/ai-operation-utility.js +303 -0
  300. package/dist/utils/ai-service-factory.d.ts +34 -0
  301. package/dist/utils/ai-service-factory.d.ts.map +1 -0
  302. package/dist/utils/ai-service-factory.js +99 -0
  303. package/dist/utils/error-utils.d.ts +70 -0
  304. package/dist/utils/error-utils.d.ts.map +1 -0
  305. package/dist/utils/error-utils.js +104 -0
  306. package/dist/utils/file-utils.d.ts +107 -0
  307. package/dist/utils/file-utils.d.ts.map +1 -0
  308. package/dist/utils/file-utils.js +171 -0
  309. package/dist/utils/id-generator.d.ts +92 -0
  310. package/dist/utils/id-generator.d.ts.map +1 -0
  311. package/dist/utils/id-generator.js +146 -0
  312. package/dist/utils/metadata-utils.d.ts +40 -0
  313. package/dist/utils/metadata-utils.d.ts.map +1 -0
  314. package/dist/utils/metadata-utils.js +43 -0
  315. package/dist/utils/model-executor-parser.d.ts +38 -0
  316. package/dist/utils/model-executor-parser.d.ts.map +1 -0
  317. package/dist/utils/model-executor-parser.js +69 -0
  318. package/dist/utils/model-parser.d.ts +6 -0
  319. package/dist/utils/model-parser.d.ts.map +1 -0
  320. package/dist/utils/model-parser.js +49 -0
  321. package/dist/utils/stack-formatter.d.ts +12 -0
  322. package/dist/utils/stack-formatter.d.ts.map +1 -0
  323. package/dist/utils/stack-formatter.js +36 -0
  324. package/dist/utils/storage-utils.d.ts +49 -0
  325. package/dist/utils/storage-utils.d.ts.map +1 -0
  326. package/dist/utils/storage-utils.js +80 -0
  327. package/dist/utils/streaming-utils.d.ts +38 -0
  328. package/dist/utils/streaming-utils.d.ts.map +1 -0
  329. package/dist/utils/streaming-utils.js +64 -0
  330. package/dist/utils/task-o-matic-error.d.ts +206 -0
  331. package/dist/utils/task-o-matic-error.d.ts.map +1 -0
  332. package/dist/utils/task-o-matic-error.js +304 -0
  333. package/package.json +40 -0
  334. package/src/index.ts +36 -0
  335. package/src/lib/ai-service/ai-operations.ts +310 -0
  336. package/src/lib/ai-service/base-operations.ts +139 -0
  337. package/src/lib/ai-service/documentation-operations.ts +438 -0
  338. package/src/lib/ai-service/filesystem-tools.ts +73 -0
  339. package/src/lib/ai-service/gemini-proxy.ts.bak +52 -0
  340. package/src/lib/ai-service/json-parser.ts +203 -0
  341. package/src/lib/ai-service/mcp-client.ts +54 -0
  342. package/src/lib/ai-service/model-provider.ts +192 -0
  343. package/src/lib/ai-service/prd-operations.ts +854 -0
  344. package/src/lib/ai-service/research-tools.ts +207 -0
  345. package/src/lib/ai-service/retry-handler.ts +89 -0
  346. package/src/lib/ai-service/task-operations.ts +342 -0
  347. package/src/lib/benchmark/registry.ts +307 -0
  348. package/src/lib/benchmark/runner.ts +190 -0
  349. package/src/lib/benchmark/storage.ts +140 -0
  350. package/src/lib/benchmark/types.ts +121 -0
  351. package/src/lib/better-t-stack-cli.ts +524 -0
  352. package/src/lib/bootstrap/cli-bootstrap.ts +397 -0
  353. package/src/lib/bootstrap/index.ts +2 -0
  354. package/src/lib/bootstrap/medusa-bootstrap.ts +261 -0
  355. package/src/lib/config-validation.ts +278 -0
  356. package/src/lib/config.ts +435 -0
  357. package/src/lib/context-builder.ts +383 -0
  358. package/src/lib/executors/claude-code-executor.ts +83 -0
  359. package/src/lib/executors/codex-executor.ts +85 -0
  360. package/src/lib/executors/executor-factory.ts +28 -0
  361. package/src/lib/executors/gemini-executor.ts +80 -0
  362. package/src/lib/executors/kilo-executor.ts +83 -0
  363. package/src/lib/executors/opencode-executor.ts +81 -0
  364. package/src/lib/git-utils.ts +334 -0
  365. package/src/lib/hooks.ts +121 -0
  366. package/src/lib/index.ts +166 -0
  367. package/src/lib/logger.ts +43 -0
  368. package/src/lib/notifications.ts +103 -0
  369. package/src/lib/prompt-builder.ts +471 -0
  370. package/src/lib/prompt-registry.ts +491 -0
  371. package/src/lib/provider-defaults.json +32 -0
  372. package/src/lib/storage/file-system.ts +864 -0
  373. package/src/lib/storage/storage-callbacks.ts +120 -0
  374. package/src/lib/storage/types.ts +58 -0
  375. package/src/lib/task-execution-core.ts +591 -0
  376. package/src/lib/task-execution.ts +59 -0
  377. package/src/lib/task-loop-execution.ts +214 -0
  378. package/src/lib/task-planning.ts +157 -0
  379. package/src/lib/task-review.ts +138 -0
  380. package/src/lib/validation.ts +140 -0
  381. package/src/prompts/documentation-detection.ts +21 -0
  382. package/src/prompts/documentation-recap.ts +11 -0
  383. package/src/prompts/index.ts +14 -0
  384. package/src/prompts/prd-combination.ts +32 -0
  385. package/src/prompts/prd-generation.ts +46 -0
  386. package/src/prompts/prd-parsing.ts +170 -0
  387. package/src/prompts/prd-question-answer.ts +25 -0
  388. package/src/prompts/prd-question.ts +38 -0
  389. package/src/prompts/prd-rework.ts +79 -0
  390. package/src/prompts/prd-suggest-stack.ts +97 -0
  391. package/src/prompts/task-breakdown.ts +149 -0
  392. package/src/prompts/task-enhancement.ts +138 -0
  393. package/src/prompts/task-execution.ts +22 -0
  394. package/src/prompts/task-planning.ts +64 -0
  395. package/src/prompts/workflow-assistance.ts +151 -0
  396. package/src/prompts/workflow-prompts.ts +97 -0
  397. package/src/services/benchmark.ts +433 -0
  398. package/src/services/prd.ts +845 -0
  399. package/src/services/tasks.ts +1515 -0
  400. package/src/services/workflow-ai-assistant.ts +298 -0
  401. package/src/services/workflow-benchmark.ts +339 -0
  402. package/src/services/workflow.ts +779 -0
  403. package/src/test/hooks.test.ts +77 -0
  404. package/src/test/integration/callbacks.test.ts +39 -0
  405. package/src/test/lib/ai-service/task-operations.test.ts +430 -0
  406. package/src/test/lib/config.test.ts +150 -0
  407. package/src/test/lib/git-utils.test.ts +198 -0
  408. package/src/test/mocks/mock-ai-operations.ts +205 -0
  409. package/src/test/mocks/mock-context-builder.ts +84 -0
  410. package/src/test/mocks/mock-model-provider.ts +21 -0
  411. package/src/test/mocks/mock-service-factory.ts +64 -0
  412. package/src/test/mocks/mock-storage.ts +204 -0
  413. package/src/test/model-parsing.test.ts +78 -0
  414. package/src/test/services/task-service.test.ts +551 -0
  415. package/src/test/storage.test.ts +206 -0
  416. package/src/test/task-loop-git.test.ts +142 -0
  417. package/src/test/test-mock-setup.ts +46 -0
  418. package/src/test/test-setup.ts +48 -0
  419. package/src/test/test-utils.ts +45 -0
  420. package/src/test/utils/ai-operation-utility.test.ts +306 -0
  421. package/src/test/utils/error-handling.test.ts +241 -0
  422. package/src/test/utils/file-utils.test.ts +80 -0
  423. package/src/test/utils/id-generator.test.ts +44 -0
  424. package/src/test/utils/model-parser.test.ts +67 -0
  425. package/src/test/validation.test.ts +19 -0
  426. package/src/types/callbacks.ts +14 -0
  427. package/src/types/index.ts +628 -0
  428. package/src/types/mcp.ts +5 -0
  429. package/src/types/options.ts +165 -0
  430. package/src/types/results.ts +216 -0
  431. package/src/types/workflow-options.ts +113 -0
  432. package/src/types/workflow-results.ts +87 -0
  433. package/src/utils/ai-config-builder.ts +33 -0
  434. package/src/utils/ai-operation-utility.ts +380 -0
  435. package/src/utils/ai-service-factory.ts +125 -0
  436. package/src/utils/error-utils.ts +124 -0
  437. package/src/utils/file-utils.ts +197 -0
  438. package/src/utils/id-generator.ts +168 -0
  439. package/src/utils/metadata-utils.ts +48 -0
  440. package/src/utils/model-executor-parser.ts +80 -0
  441. package/src/utils/model-parser.ts +58 -0
  442. package/src/utils/stack-formatter.ts +53 -0
  443. package/src/utils/storage-utils.ts +94 -0
  444. package/src/utils/streaming-utils.ts +91 -0
  445. package/src/utils/task-o-matic-error.ts +393 -0
  446. package/tsconfig.json +20 -0
  447. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,156 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeTaskLoop = executeTaskLoop;
4
+ const logger_1 = require("./logger");
5
+ const notifications_1 = require("./notifications");
6
+ const tasks_1 = require("../services/tasks");
7
+ const task_execution_core_1 = require("./task-execution-core");
8
+ /**
9
+ * Execute multiple tasks in a loop with retry and verification
10
+ * This delegates to the unified executeTaskCore for each task
11
+ */
12
+ async function executeTaskLoop(options) {
13
+ const startTime = Date.now();
14
+ const { filters = {}, tool = "opencode", config = {}, dry = false } = options;
15
+ const { maxRetries = 3, verificationCommands = [], autoCommit = false, tryModels, plan, planModel, reviewPlan, review, reviewModel, customMessage, continueSession, model, includeCompleted = false, includePrd = false, notifyTargets, } = config;
16
+ logger_1.logger.info("\n🔄 Starting Task Loop Execution\n");
17
+ logger_1.logger.progress(`Executor Tool: ${tool}`);
18
+ if (model)
19
+ logger_1.logger.progress(`Executor Model: ${model}`);
20
+ logger_1.logger.progress(`Max Retries per Task: ${maxRetries}`);
21
+ logger_1.logger.progress(`Verification Commands: ${verificationCommands.length > 0
22
+ ? verificationCommands.join(", ")
23
+ : "None"}`);
24
+ logger_1.logger.progress(`Auto Commit: ${autoCommit ? "Yes" : "No"}`);
25
+ logger_1.logger.progress(`Dry Run: ${dry ? "Yes" : "No"}\n`);
26
+ // Get tasks to execute
27
+ let tasksToExecute = [];
28
+ if (filters.taskIds && filters.taskIds.length > 0) {
29
+ // Execute specific tasks by ID
30
+ for (const taskId of filters.taskIds) {
31
+ const task = await tasks_1.taskService.getTask(taskId);
32
+ if (task) {
33
+ tasksToExecute.push(task);
34
+ }
35
+ else {
36
+ logger_1.logger.warn(`⚠️ Task ${taskId} not found, skipping`);
37
+ }
38
+ }
39
+ }
40
+ else {
41
+ // Get all tasks matching filters
42
+ tasksToExecute = await tasks_1.taskService.listTasks({
43
+ status: filters.status,
44
+ tag: filters.tag,
45
+ });
46
+ }
47
+ // Filter out completed tasks unless includeCompleted is set
48
+ if (!includeCompleted) {
49
+ const beforeCount = tasksToExecute.length;
50
+ tasksToExecute = tasksToExecute.filter((t) => t.status !== "completed");
51
+ const filtered = beforeCount - tasksToExecute.length;
52
+ if (filtered > 0) {
53
+ logger_1.logger.info(` (Skipped ${filtered} already-completed task(s))\n`);
54
+ }
55
+ }
56
+ if (tasksToExecute.length === 0) {
57
+ logger_1.logger.warn("⚠️ No tasks to execute (all may be completed)");
58
+ const emptyResult = {
59
+ totalTasks: 0,
60
+ completedTasks: 0,
61
+ failedTasks: 0,
62
+ taskResults: [],
63
+ duration: Date.now() - startTime,
64
+ };
65
+ if (notifyTargets?.length)
66
+ await (0, notifications_1.sendNotifications)(notifyTargets, emptyResult);
67
+ return emptyResult;
68
+ }
69
+ logger_1.logger.info(`📋 Found ${tasksToExecute.length} task(s) to execute\n`);
70
+ const taskResults = [];
71
+ let completedTasks = 0;
72
+ let failedTasks = 0;
73
+ // Execute tasks sequentially
74
+ for (let i = 0; i < tasksToExecute.length; i++) {
75
+ const task = tasksToExecute[i];
76
+ logger_1.logger.info(`\n${"=".repeat(60)}\n📌 Task ${i + 1}/${tasksToExecute.length}: ${task.title} (${task.id})\n${"=".repeat(60)}\n`);
77
+ // Build unified task execution config
78
+ const taskConfig = {
79
+ tool,
80
+ customMessage, // NEW: Support custom message override
81
+ executorConfig: {
82
+ continueLastSession: continueSession, // NEW: Support session continuation
83
+ model, // NEW: Pass model to executor
84
+ },
85
+ verificationCommands,
86
+ enableRetry: true, // Always enable retry in loop
87
+ maxRetries,
88
+ tryModels,
89
+ enablePlanPhase: plan,
90
+ planModel,
91
+ reviewPlan,
92
+ enableReviewPhase: review,
93
+ reviewModel,
94
+ autoCommit,
95
+ executeSubtasks: true, // Now supports subtasks!
96
+ includeCompleted, // Pass through to subtask execution
97
+ includePrd, // Pass through to execution core
98
+ dry,
99
+ };
100
+ try {
101
+ // Execute task using unified core
102
+ const result = await (0, task_execution_core_1.executeTaskCore)(task.id, taskConfig);
103
+ // Check if task succeeded
104
+ const succeeded = result.success;
105
+ if (succeeded) {
106
+ completedTasks++;
107
+ logger_1.logger.success(`\n✅ Task ${task.title} completed successfully after ${result.attempts.length} attempt(s)\n`);
108
+ }
109
+ else {
110
+ failedTasks++;
111
+ logger_1.logger.error(`\n❌ Task ${task.title} failed after ${result.attempts.length} attempt(s)\n`);
112
+ }
113
+ taskResults.push({
114
+ taskId: task.id,
115
+ taskTitle: task.title,
116
+ attempts: result.attempts,
117
+ finalStatus: succeeded ? "completed" : "failed",
118
+ });
119
+ // Stop the loop on first failure
120
+ if (!succeeded) {
121
+ break;
122
+ }
123
+ }
124
+ catch (error) {
125
+ failedTasks++;
126
+ logger_1.logger.error(`\n❌ Task ${task.title} failed with error: ${error instanceof Error ? error.message : "Unknown error"}\n`);
127
+ taskResults.push({
128
+ taskId: task.id,
129
+ taskTitle: task.title,
130
+ attempts: [],
131
+ finalStatus: "failed",
132
+ });
133
+ // Stop the loop on error
134
+ break;
135
+ }
136
+ }
137
+ const duration = Date.now() - startTime;
138
+ // Print summary
139
+ logger_1.logger.info(`\n${"=".repeat(60)}\n📊 Execution Summary\n${"=".repeat(60)}`);
140
+ logger_1.logger.progress(`Total Tasks: ${tasksToExecute.length}`);
141
+ logger_1.logger.success(`✅ Completed: ${completedTasks}`);
142
+ logger_1.logger.error(`❌ Failed: ${failedTasks}`);
143
+ logger_1.logger.progress(`⏱ Duration: ${(duration / 1000).toFixed(2)} seconds\n`);
144
+ const result = {
145
+ totalTasks: tasksToExecute.length,
146
+ completedTasks,
147
+ failedTasks,
148
+ taskResults,
149
+ duration,
150
+ };
151
+ // Send notifications if configured
152
+ if (notifyTargets?.length) {
153
+ await (0, notifications_1.sendNotifications)(notifyTargets, result);
154
+ }
155
+ return result;
156
+ }
@@ -0,0 +1,29 @@
1
+ import { ExecutorTool, Task } from "../types";
2
+ /**
3
+ * Planning phase configuration
4
+ */
5
+ export interface PlanningConfig {
6
+ planModel?: string;
7
+ reviewPlan?: boolean;
8
+ autoCommit?: boolean;
9
+ dry?: boolean;
10
+ onPlanReview?: (planFile: string) => Promise<string | undefined>;
11
+ }
12
+ /**
13
+ * Planning phase result
14
+ */
15
+ export interface PlanningResult {
16
+ planContent?: string;
17
+ planFileName?: string;
18
+ success: boolean;
19
+ error?: string;
20
+ }
21
+ /**
22
+ * Execute planning phase for a task
23
+ * Creates an AI-generated implementation plan with optional human review
24
+ */
25
+ export declare function executePlanningPhase(task: Task, defaultTool: ExecutorTool, config: PlanningConfig, execFn?: (command: string) => Promise<{
26
+ stdout: string;
27
+ stderr: string;
28
+ }>): Promise<PlanningResult>;
29
+ //# sourceMappingURL=task-planning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-planning.d.ts","sourceRoot":"","sources":["../../src/lib/task-planning.ts"],"names":[],"mappings":"AAEA,OAAO,EAAkB,YAAY,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAS9D;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,YAAY,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;CAClE;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,IAAI,EAAE,IAAI,EACV,WAAW,EAAE,YAAY,EACzB,MAAM,EAAE,cAAc,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,cAAc,CAAC,CAiHzB"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executePlanningPhase = executePlanningPhase;
4
+ const logger_1 = require("./logger");
5
+ const executor_factory_1 = require("./executors/executor-factory");
6
+ const fs_1 = require("fs");
7
+ const child_process_1 = require("child_process");
8
+ const util_1 = require("util");
9
+ const git_utils_1 = require("./git-utils");
10
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
11
+ /**
12
+ * Execute planning phase for a task
13
+ * Creates an AI-generated implementation plan with optional human review
14
+ */
15
+ async function executePlanningPhase(task, defaultTool, config, execFn = execAsync) {
16
+ const { planModel, reviewPlan, autoCommit, dry, onPlanReview } = config;
17
+ logger_1.logger.info(`\n🧠 Starting Planning Phase for Task: ${task.title}`);
18
+ const planFileName = `task-${task.id}-plan.md`;
19
+ // Parse executor and model from planModel string
20
+ const planExecutor = planModel
21
+ ? planModel.split(":")[0]
22
+ : defaultTool;
23
+ const planModelName = planModel ? planModel.split(":")[1] : undefined;
24
+ let planningPrompt = `You are a senior software architect. Analyze the following task and create a detailed implementation plan.
25
+
26
+ Task: ${task.title}
27
+ Description: ${task.description || "No description provided."}
28
+
29
+ Requirements:
30
+ 1. Analyze the task requirements.
31
+ 2. Create a detailed step-by-step implementation plan.
32
+ 3. Identify necessary file changes.
33
+ 4. Write this plan to a file named "${planFileName}" in the current directory.
34
+ 5. Do NOT implement the code yet, just create the plan file.
35
+
36
+ Please create the "${planFileName}" file now.`;
37
+ logger_1.logger.progress(` Using executor for planning: ${planExecutor}${planModelName ? ` (${planModelName})` : ""}`);
38
+ // Create executor for planning
39
+ const planningConfig = {
40
+ model: planModelName,
41
+ continueLastSession: false,
42
+ };
43
+ const executor = executor_factory_1.ExecutorFactory.create(planExecutor, planningConfig);
44
+ try {
45
+ let planningComplete = false;
46
+ let planContent;
47
+ while (!planningComplete) {
48
+ await executor.execute(planningPrompt, dry, planningConfig);
49
+ if (!dry) {
50
+ // Verify plan file exists and read it
51
+ if ((0, fs_1.existsSync)(planFileName)) {
52
+ planContent = (0, fs_1.readFileSync)(planFileName, "utf-8");
53
+ logger_1.logger.success(`✅ Plan created successfully: ${planFileName}`);
54
+ // Human Review Loop
55
+ if (reviewPlan) {
56
+ if (onPlanReview) {
57
+ logger_1.logger.warn(`\n👀 Pausing for Human Review of the Plan: ${planFileName}`);
58
+ const feedback = await onPlanReview(planFileName);
59
+ if (feedback && feedback.trim() !== "") {
60
+ logger_1.logger.info("🔄 Refining plan based on feedback...");
61
+ planningPrompt = `The user provided the following feedback on the plan you just created:
62
+
63
+ "${feedback}"
64
+
65
+ Please update the plan file "${planFileName}" to incorporate this feedback.`;
66
+ // Continue loop to regenerate plan
67
+ continue;
68
+ }
69
+ }
70
+ else {
71
+ logger_1.logger.warn("Review requested but no review callback provided.");
72
+ }
73
+ }
74
+ // Auto-commit plan if enabled (only after approval)
75
+ if (autoCommit) {
76
+ await (0, git_utils_1.commitFile)(planFileName, `docs: create implementation plan for task ${task.id}`, execFn);
77
+ }
78
+ planningComplete = true;
79
+ }
80
+ else {
81
+ logger_1.logger.warn(`⚠️ Plan file ${planFileName} was not created by the executor.`);
82
+ planningComplete = true; // Exit loop to avoid infinite retry if file not created
83
+ }
84
+ }
85
+ else {
86
+ planningComplete = true; // Dry run
87
+ }
88
+ }
89
+ return {
90
+ planContent,
91
+ planFileName,
92
+ success: true,
93
+ };
94
+ }
95
+ catch (error) {
96
+ const errorMessage = error instanceof Error ? error.message : String(error);
97
+ logger_1.logger.error(`❌ Planning phase failed: ${errorMessage}`);
98
+ return {
99
+ success: false,
100
+ error: errorMessage,
101
+ };
102
+ }
103
+ }
@@ -0,0 +1,27 @@
1
+ import { Task } from "../types";
2
+ /**
3
+ * Review phase configuration
4
+ */
5
+ export interface ReviewConfig {
6
+ reviewModel?: string;
7
+ planContent?: string;
8
+ dry?: boolean;
9
+ }
10
+ /**
11
+ * Review phase result
12
+ */
13
+ export interface ReviewResult {
14
+ approved: boolean;
15
+ feedback: string;
16
+ success: boolean;
17
+ error?: string;
18
+ }
19
+ /**
20
+ * Execute AI review phase for task execution
21
+ * Reviews code changes and provides feedback
22
+ */
23
+ export declare function executeReviewPhase(task: Task, config: ReviewConfig, execFn?: (command: string) => Promise<{
24
+ stdout: string;
25
+ stderr: string;
26
+ }>): Promise<ReviewResult>;
27
+ //# sourceMappingURL=task-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-review.d.ts","sourceRoot":"","sources":["../../src/lib/task-review.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,IAAI,EAAE,MAAM,UAAU,CAAC;AAO9C;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,YAAY,EACpB,MAAM,GAAE,CACN,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAa,GAC3D,OAAO,CAAC,YAAY,CAAC,CAoGvB"}
@@ -0,0 +1,103 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.executeReviewPhase = executeReviewPhase;
4
+ const logger_1 = require("./logger");
5
+ const ai_service_factory_1 = require("../utils/ai-service-factory");
6
+ const child_process_1 = require("child_process");
7
+ const util_1 = require("util");
8
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
9
+ /**
10
+ * Execute AI review phase for task execution
11
+ * Reviews code changes and provides feedback
12
+ */
13
+ async function executeReviewPhase(task, config, execFn = execAsync) {
14
+ const { reviewModel, planContent, dry } = config;
15
+ logger_1.logger.info("\n🕵️ Starting AI Review Phase...");
16
+ if (dry) {
17
+ logger_1.logger.warn("🔍 DRY RUN - Review phase skipped");
18
+ return {
19
+ approved: true,
20
+ feedback: "Dry run - review skipped",
21
+ success: true,
22
+ };
23
+ }
24
+ try {
25
+ // Get git diff
26
+ const { stdout: diff } = await execFn("git diff HEAD");
27
+ if (!diff.trim()) {
28
+ logger_1.logger.warn("⚠️ No changes detected to review.");
29
+ return {
30
+ approved: true,
31
+ feedback: "No changes to review",
32
+ success: true,
33
+ };
34
+ }
35
+ // Parse executor and model from reviewModel string
36
+ const reviewExecutor = reviewModel
37
+ ? reviewModel.split(":")[0]
38
+ : undefined;
39
+ const reviewModelName = reviewModel ? reviewModel.split(":")[1] : undefined;
40
+ if (reviewExecutor && reviewModelName) {
41
+ logger_1.logger.progress(` Using executor for review: ${reviewExecutor} (${reviewModelName})`);
42
+ }
43
+ else {
44
+ logger_1.logger.progress(" Using default AI provider for review");
45
+ }
46
+ const reviewPrompt = `You are a strict code reviewer. Review the following changes for the task.
47
+
48
+ Task: ${task.title}
49
+ ${planContent ? `Plan: ${planContent}` : "Plan: No plan provided."}
50
+
51
+ Git Diff:
52
+ ${diff.substring(0, 10000)}
53
+
54
+ Analyze the changes for:
55
+ 1. Correctness (does it solve the task?)
56
+ 2. Code Quality (clean code, best practices)
57
+ 3. Potential Bugs
58
+
59
+ Return a JSON object:
60
+ {
61
+ "approved": boolean,
62
+ "feedback": "Detailed feedback explaining why it was rejected or approved"
63
+ }
64
+ `;
65
+ // Use AI operations to get review response
66
+ const aiOps = (0, ai_service_factory_1.getAIOperations)();
67
+ const aiResponse = await aiOps.streamText(reviewPrompt);
68
+ const jsonMatch = aiResponse.match(/\{[\s\S]*\}/);
69
+ if (jsonMatch) {
70
+ const reviewResult = JSON.parse(jsonMatch[0]);
71
+ if (!reviewResult.approved) {
72
+ logger_1.logger.error(`❌ AI Review Rejected Changes: ${reviewResult.feedback}`);
73
+ }
74
+ else {
75
+ logger_1.logger.success(`✅ AI Review Approved: ${reviewResult.feedback}`);
76
+ }
77
+ return {
78
+ approved: reviewResult.approved,
79
+ feedback: reviewResult.feedback,
80
+ success: true,
81
+ };
82
+ }
83
+ else {
84
+ logger_1.logger.warn("⚠️ Could not parse AI review response. Assuming approval.");
85
+ return {
86
+ approved: true,
87
+ feedback: "Could not parse review response, assuming approval",
88
+ success: true,
89
+ };
90
+ }
91
+ }
92
+ catch (error) {
93
+ const errorMessage = error instanceof Error ? error.message : String(error);
94
+ logger_1.logger.error(`❌ AI Review failed: ${errorMessage}`);
95
+ // If review crashes, warn but don't fail the task
96
+ return {
97
+ approved: true,
98
+ feedback: `Review failed: ${errorMessage}`,
99
+ success: false,
100
+ error: errorMessage,
101
+ };
102
+ }
103
+ }
@@ -0,0 +1,26 @@
1
+ import { AIConfig } from "../types";
2
+ /**
3
+ * Validation/Verification result for a single command
4
+ */
5
+ export interface ValidationResult {
6
+ command: string;
7
+ success: boolean;
8
+ output?: string;
9
+ error?: string;
10
+ }
11
+ /**
12
+ * Format verification error for AI feedback
13
+ * Produces a structured message that AI can easily parse and act upon
14
+ */
15
+ export declare function formatVerificationError(result: ValidationResult): string;
16
+ export declare function isValidAIProvider(provider: string): provider is NonNullable<AIConfig["provider"]>;
17
+ /**
18
+ * Run validation/verification commands and return results
19
+ * Supports both --validate and --verify as aliases
20
+ * Returns detailed results for each command
21
+ */
22
+ export declare function runValidations(validations: string[], dry: boolean, execFn?: (command: string) => Promise<{
23
+ stdout: string;
24
+ stderr: string;
25
+ }>): Promise<ValidationResult[]>;
26
+ //# sourceMappingURL=validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../../src/lib/validation.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAIpC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAcxE;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,MAAM,GACf,QAAQ,IAAI,WAAW,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAE/C;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EAAE,EACrB,GAAG,EAAE,OAAO,EACZ,MAAM,GAAE,CACN,OAAO,EAAE,MAAM,KACZ,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAa,GAC3D,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAqF7B"}
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatVerificationError = formatVerificationError;
4
+ exports.isValidAIProvider = isValidAIProvider;
5
+ exports.runValidations = runValidations;
6
+ const child_process_1 = require("child_process");
7
+ const util_1 = require("util");
8
+ const logger_1 = require("./logger");
9
+ const execAsync = (0, util_1.promisify)(child_process_1.exec);
10
+ /**
11
+ * Format verification error for AI feedback
12
+ * Produces a structured message that AI can easily parse and act upon
13
+ */
14
+ function formatVerificationError(result) {
15
+ return `## Verification Failed: ${result.command}
16
+
17
+ **Error Output**:
18
+ \`\`\`
19
+ ${result.error || "No error output captured"}
20
+ \`\`\`
21
+
22
+ Please analyze this error carefully and fix the issue. Common causes include:
23
+ - Syntax errors in the code
24
+ - Type errors (missing types, wrong types)
25
+ - Missing imports or dependencies
26
+ - Logic errors or incorrect implementations
27
+ - Build configuration issues`;
28
+ }
29
+ function isValidAIProvider(provider) {
30
+ return ["openrouter", "openai", "anthropic", "custom"].includes(provider);
31
+ }
32
+ /**
33
+ * Run validation/verification commands and return results
34
+ * Supports both --validate and --verify as aliases
35
+ * Returns detailed results for each command
36
+ */
37
+ async function runValidations(validations, dry, execFn = execAsync) {
38
+ const results = [];
39
+ if (validations.length === 0) {
40
+ return results;
41
+ }
42
+ if (dry) {
43
+ logger_1.logger.warn("🔍 DRY RUN - Validation/verification commands that would run:");
44
+ validations.forEach((cmd) => {
45
+ logger_1.logger.progress(` ${cmd}`);
46
+ results.push({
47
+ command: cmd,
48
+ success: true,
49
+ output: "DRY RUN - not executed",
50
+ });
51
+ });
52
+ return results;
53
+ }
54
+ logger_1.logger.info(`🧪 Running ${validations.length} validation/verification command${validations.length > 1 ? "s" : ""}...`);
55
+ for (let i = 0; i < validations.length; i++) {
56
+ const validation = validations[i];
57
+ logger_1.logger.info(`🧪 Running validation [${i + 1}/${validations.length}]: ${validation}`);
58
+ try {
59
+ const { stdout, stderr } = await execFn(validation);
60
+ logger_1.logger.success(`✅ Validation passed: ${validation}`);
61
+ // Show stdout if there's any output
62
+ if (stdout && stdout.trim()) {
63
+ logger_1.logger.progress(` Output: ${stdout.trim()}`);
64
+ }
65
+ results.push({
66
+ command: validation,
67
+ success: true,
68
+ output: stdout.trim(),
69
+ });
70
+ }
71
+ catch (error) {
72
+ logger_1.logger.error(`❌ Validation failed: ${validation}`);
73
+ const errorOutput = error.stderr || error.stdout || error.message;
74
+ // Show error details
75
+ if (error.stdout && error.stdout.trim()) {
76
+ logger_1.logger.warn(` stdout: ${error.stdout.trim()}`);
77
+ }
78
+ if (error.stderr && error.stderr.trim()) {
79
+ logger_1.logger.error(` stderr: ${error.stderr.trim()}`);
80
+ }
81
+ if (error.message) {
82
+ logger_1.logger.error(` Error: ${error.message}`);
83
+ }
84
+ results.push({
85
+ command: validation,
86
+ success: false,
87
+ error: errorOutput,
88
+ });
89
+ // Return early on first failure
90
+ break;
91
+ }
92
+ }
93
+ const allPassed = results.every((r) => r.success);
94
+ if (allPassed) {
95
+ logger_1.logger.success(`🎉 All ${validations.length} validation${validations.length > 1 ? "s" : ""} passed!`);
96
+ }
97
+ return results;
98
+ }
@@ -0,0 +1,2 @@
1
+ export declare const DOCUMENTATION_DETECTION_PROMPT = "You are an expert developer. Your job is to analyze a task and fetch relevant documentation using Context7 and create a dedicated documentation for the task.\n\nDo not create a plan, i want a documentation for the actual task using the knowledge you gained from the research.\n\n## Task:\n**Title**: {TASK_TITLE}\n**Description**: {TASK_DESCRIPTION}\n\n## Current Stack:\n{STACK_INFO}\n\n## Already Researched:\n{EXISTING_RESEARCH}\n\n## Instructions:\n1. Identify technologies/libraries mentioned in the task that need documentation\n2. Skip anything already covered in existing research\n3. Use Context7 to resolve library names and fetch documentation\n4. Create a focused documentation only on what's actually needed for this specific task\n\nGet the documentation libraries needed for this task.";
2
+ //# sourceMappingURL=documentation-detection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation-detection.d.ts","sourceRoot":"","sources":["../../src/prompts/documentation-detection.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,8BAA8B,qyBAoBW,CAAC"}
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DOCUMENTATION_DETECTION_PROMPT = void 0;
4
+ exports.DOCUMENTATION_DETECTION_PROMPT = `You are an expert developer. Your job is to analyze a task and fetch relevant documentation using Context7 and create a dedicated documentation for the task.
5
+
6
+ Do not create a plan, i want a documentation for the actual task using the knowledge you gained from the research.
7
+
8
+ ## Task:
9
+ **Title**: {TASK_TITLE}
10
+ **Description**: {TASK_DESCRIPTION}
11
+
12
+ ## Current Stack:
13
+ {STACK_INFO}
14
+
15
+ ## Already Researched:
16
+ {EXISTING_RESEARCH}
17
+
18
+ ## Instructions:
19
+ 1. Identify technologies/libraries mentioned in the task that need documentation
20
+ 2. Skip anything already covered in existing research
21
+ 3. Use Context7 to resolve library names and fetch documentation
22
+ 4. Create a focused documentation only on what's actually needed for this specific task
23
+
24
+ Get the documentation libraries needed for this task.`;
@@ -0,0 +1,3 @@
1
+ export declare const DOCUMENTATION_RECAP_PROMPT = "Create a concise recap of the documentation fetched for these libraries:\n\nLibraries:\n{LIBRARIES_LIST}\n\nDocumentation Contents:\n{DOCUMENTATION_CONTENTS}\n\nPlease provide a 2-3 sentence summary of what documentation is available and how it relates to the task.";
2
+ export declare const DOCUMENTATION_RECAP_SYSTEM_PROMPT = "You are a technical writer who creates concise summaries of documentation collections.";
3
+ //# sourceMappingURL=documentation-recap.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentation-recap.d.ts","sourceRoot":"","sources":["../../src/prompts/documentation-recap.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,0BAA0B,8QAQkE,CAAC;AAE1G,eAAO,MAAM,iCAAiC,2FAA2F,CAAC"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DOCUMENTATION_RECAP_SYSTEM_PROMPT = exports.DOCUMENTATION_RECAP_PROMPT = void 0;
4
+ exports.DOCUMENTATION_RECAP_PROMPT = `Create a concise recap of the documentation fetched for these libraries:
5
+
6
+ Libraries:
7
+ {LIBRARIES_LIST}
8
+
9
+ Documentation Contents:
10
+ {DOCUMENTATION_CONTENTS}
11
+
12
+ Please provide a 2-3 sentence summary of what documentation is available and how it relates to the task.`;
13
+ exports.DOCUMENTATION_RECAP_SYSTEM_PROMPT = `You are a technical writer who creates concise summaries of documentation collections.`;
@@ -0,0 +1,15 @@
1
+ export * from "./prd-parsing";
2
+ export * from "./task-breakdown";
3
+ export * from "./task-enhancement";
4
+ export * from "./prd-rework";
5
+ export * from "./documentation-detection";
6
+ export * from "./task-planning";
7
+ export * from "./task-execution";
8
+ export * from "./prd-question";
9
+ export * from "./prd-generation";
10
+ export * from "./prd-combination";
11
+ export * from "./documentation-recap";
12
+ export * from "./prd-question-answer";
13
+ export * from "./workflow-prompts";
14
+ export * from "./prd-suggest-stack";
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/prompts/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,oBAAoB,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./prd-parsing"), exports);
18
+ __exportStar(require("./task-breakdown"), exports);
19
+ __exportStar(require("./task-enhancement"), exports);
20
+ __exportStar(require("./prd-rework"), exports);
21
+ __exportStar(require("./documentation-detection"), exports);
22
+ __exportStar(require("./task-planning"), exports);
23
+ __exportStar(require("./task-execution"), exports);
24
+ __exportStar(require("./prd-question"), exports);
25
+ __exportStar(require("./prd-generation"), exports);
26
+ __exportStar(require("./prd-combination"), exports);
27
+ __exportStar(require("./documentation-recap"), exports);
28
+ __exportStar(require("./prd-question-answer"), exports);
29
+ __exportStar(require("./workflow-prompts"), exports);
30
+ __exportStar(require("./prd-suggest-stack"), exports);