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,93 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TASK_SPLITTING_ASSISTANCE_SYSTEM_PROMPT = exports.TASK_SPLITTING_ASSISTANCE_PROMPT = exports.TASK_PRIORITIZATION_SYSTEM_PROMPT = exports.TASK_PRIORITIZATION_PROMPT = exports.PRD_IMPROVEMENT_SYSTEM_PROMPT = exports.PRD_IMPROVEMENT_PROMPT = exports.PROJECT_INIT_SUGGESTION_SYSTEM_PROMPT = exports.PROJECT_INIT_SUGGESTION_PROMPT = void 0;
4
+ // Project Initialization Suggestion
5
+ exports.PROJECT_INIT_SUGGESTION_PROMPT = `You are helping a developer configure their project initialization and tech stack.
6
+
7
+ Available Options:
8
+ - AI Providers: openrouter, anthropic, openai, custom
9
+ - Frontend Frameworks: next, tanstack-router, react-router, vite-react, remix
10
+ - Backend Frameworks: hono, express, elysia, fastify
11
+ - Databases: sqlite, postgres, mysql, mongodb, turso, neon
12
+ - Authentication: better-auth (recommended), clerk, auth0, custom
13
+
14
+ User's Description:
15
+ "{USER_DESCRIPTION}"
16
+
17
+ Based on the user's description, recommend a complete configuration. Consider:
18
+ 1. Project complexity and scale
19
+ 2. Developer experience level (infer from description)
20
+ 3. Modern best practices for 2025
21
+ 4. Compatibility between chosen technologies
22
+
23
+ Respond in JSON format:
24
+ {
25
+ "projectName": "suggested-project-name",
26
+ "aiProvider": "recommended-provider",
27
+ "aiModel": "recommended-model",
28
+ "frontend": "recommended-frontend",
29
+ "backend": "recommended-backend",
30
+ "database": "recommended-database",
31
+ "auth": true/false,
32
+ "reasoning": "Brief explanation of your choices"
33
+ }`;
34
+ exports.PROJECT_INIT_SUGGESTION_SYSTEM_PROMPT = `You are an expert full-stack developer helping to configure modern web projects.`;
35
+ // PRD Improvement
36
+ exports.PRD_IMPROVEMENT_PROMPT = `You are a product manager reviewing and improving a PRD.
37
+
38
+ Current PRD:
39
+ {CURRENT_PRD}
40
+
41
+ User's Feedback:
42
+ "{USER_FEEDBACK}"
43
+
44
+ Improve the PRD based on the feedback. Consider:
45
+ 1. Clarity and specificity
46
+ 2. Completeness of requirements
47
+ 3. Feasibility and scope
48
+ 4. Technical details
49
+ 5. Success criteria
50
+
51
+ Return the improved PRD in the same format, incorporating the user's feedback.`;
52
+ exports.PRD_IMPROVEMENT_SYSTEM_PROMPT = `You are an experienced product manager specializing in writing clear, actionable PRDs.`;
53
+ // Task Prioritization
54
+ exports.TASK_PRIORITIZATION_PROMPT = `You are a project manager helping to prioritize tasks.
55
+
56
+ Tasks:
57
+ {TASKS_DESCRIPTION}
58
+
59
+ User's Guidance:
60
+ "{USER_GUIDANCE}"
61
+
62
+ Prioritize these tasks (1 = highest priority) based on:
63
+ 1. Dependencies (what needs to be done first)
64
+ 2. User's guidance
65
+ 3. MVP vs. nice-to-have
66
+ 4. Risk and complexity
67
+
68
+ Respond in JSON format:
69
+ {
70
+ "prioritizedTasks": [
71
+ {"id": "task-id", "priority": 1, "reasoning": "why this priority"},
72
+ ...
73
+ ],
74
+ "recommendations": "Overall recommendations for task execution"
75
+ }`;
76
+ exports.TASK_PRIORITIZATION_SYSTEM_PROMPT = `You are an experienced project manager with expertise in agile methodologies and task prioritization.`;
77
+ // Task Splitting Assistance
78
+ exports.TASK_SPLITTING_ASSISTANCE_PROMPT = `You are a technical lead helping to break down a complex task.
79
+
80
+ Task: {TASK_TITLE}
81
+ {TASK_CONTENT}
82
+
83
+ User's Guidance:
84
+ "{USER_GUIDANCE}"
85
+
86
+ Generate specific instructions for how to split this task into subtasks. Consider:
87
+ 1. Logical breakdown points
88
+ 2. Size constraints (e.g., 2-4 hour chunks)
89
+ 3. Dependencies between subtasks
90
+ 4. Testing and validation steps
91
+
92
+ Provide clear, actionable instructions for the AI that will perform the split.`;
93
+ exports.TASK_SPLITTING_ASSISTANCE_SYSTEM_PROMPT = `You are a technical lead with deep expertise in breaking down complex software development tasks into manageable pieces.`;
@@ -0,0 +1,26 @@
1
+ import { BenchmarkConfig, BenchmarkRun, BenchmarkProgressEvent } from "../lib/benchmark/types";
2
+ import { ExecuteLoopOptions } from "../types";
3
+ import { WorkflowBenchmarkInput } from "../lib/benchmark/types";
4
+ export interface ExecutionBenchmarkOptions {
5
+ taskId: string;
6
+ verificationCommands?: string[];
7
+ maxRetries?: number;
8
+ keepBranches?: boolean;
9
+ }
10
+ export declare class BenchmarkService {
11
+ runBenchmark(operationId: string, input: any, config: BenchmarkConfig, onProgress?: (event: BenchmarkProgressEvent) => void): Promise<BenchmarkRun>;
12
+ runExecutionBenchmark(options: ExecutionBenchmarkOptions, config: BenchmarkConfig, onProgress?: (event: BenchmarkProgressEvent) => void): Promise<BenchmarkRun>;
13
+ runExecuteLoopBenchmark(options: {
14
+ loopOptions: ExecuteLoopOptions;
15
+ keepBranches?: boolean;
16
+ }, config: BenchmarkConfig, onProgress?: (event: BenchmarkProgressEvent) => void): Promise<BenchmarkRun>;
17
+ runWorkflowBenchmark(input: WorkflowBenchmarkInput, config: BenchmarkConfig, onProgress?: (event: BenchmarkProgressEvent) => void): Promise<BenchmarkRun>;
18
+ getRun(id: string): BenchmarkRun | null;
19
+ listRuns(): Array<{
20
+ id: string;
21
+ timestamp: number;
22
+ command: string;
23
+ }>;
24
+ }
25
+ export declare const benchmarkService: BenchmarkService;
26
+ //# sourceMappingURL=benchmark.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"benchmark.d.ts","sourceRoot":"","sources":["../../src/services/benchmark.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,eAAe,EACf,YAAY,EACZ,sBAAsB,EAEvB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EAAuB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAInE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAIhE,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,qBAAa,gBAAgB;IACrB,YAAY,CAChB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,GAAG,EACV,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,GACnD,OAAO,CAAC,YAAY,CAAC;IAIlB,qBAAqB,CACzB,OAAO,EAAE,yBAAyB,EAClC,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,GACnD,OAAO,CAAC,YAAY,CAAC;IA8HlB,uBAAuB,CAC3B,OAAO,EAAE;QACP,WAAW,EAAE,kBAAkB,CAAC;QAChC,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,EACD,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,GACnD,OAAO,CAAC,YAAY,CAAC;IAoGlB,oBAAoB,CACxB,KAAK,EAAE,sBAAsB,EAC7B,MAAM,EAAE,eAAe,EACvB,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,GACnD,OAAO,CAAC,YAAY,CAAC;IAiJxB,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI;IAIvC,QAAQ,IAAI,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAGtE;AAED,eAAO,MAAM,gBAAgB,kBAAyB,CAAC"}
@@ -0,0 +1,343 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.benchmarkService = exports.BenchmarkService = void 0;
4
+ const runner_1 = require("../lib/benchmark/runner");
5
+ const storage_1 = require("../lib/benchmark/storage");
6
+ const tasks_1 = require("../services/tasks");
7
+ const task_execution_core_1 = require("../lib/task-execution-core");
8
+ const config_1 = require("../lib/config");
9
+ const git_utils_1 = require("../lib/git-utils");
10
+ const logger_1 = require("../lib/logger");
11
+ const task_loop_execution_1 = require("../lib/task-loop-execution");
12
+ const workflow_1 = require("./workflow");
13
+ const path_1 = require("path");
14
+ class BenchmarkService {
15
+ async runBenchmark(operationId, input, config, onProgress) {
16
+ return await runner_1.benchmarkRunner.run(operationId, input, config, onProgress);
17
+ }
18
+ async runExecutionBenchmark(options, config, onProgress) {
19
+ const { taskId, verificationCommands, maxRetries = 3, keepBranches = true } = options;
20
+ // 1. Safety Check: Git state must be clean
21
+ if (!(await (0, git_utils_1.isClean)())) {
22
+ throw new Error("Working directory is not clean. Please commit or stash changes before running benchmarks.");
23
+ }
24
+ const task = await tasks_1.taskService.getTask(taskId);
25
+ if (!task) {
26
+ throw new Error(`Task ${taskId} not found`);
27
+ }
28
+ const baseBranch = await (0, git_utils_1.getCurrentBranch)();
29
+ const runId = `bench-${taskId}-${Date.now()}`;
30
+ const results = [];
31
+ logger_1.logger.info(`🚀 Starting Execution Benchmark for Task: ${task.title}`);
32
+ logger_1.logger.info(`📍 Base Branch: ${baseBranch}`);
33
+ // 2. Iterate Models
34
+ for (const modelConfig of config.models) {
35
+ const modelId = `${modelConfig.provider}:${modelConfig.model}`;
36
+ // Sanitize model name for branch
37
+ const safeModelName = modelConfig.model.replace(/[^a-zA-Z0-9-]/g, "-");
38
+ const branchName = `bench/${taskId}/${safeModelName}-${Date.now()}`;
39
+ onProgress?.({ type: "start", modelId });
40
+ try {
41
+ // 3. Create & Checkout Isolation Branch
42
+ await (0, git_utils_1.createBenchmarkBranch)(branchName, baseBranch);
43
+ await (0, git_utils_1.checkoutBranch)(branchName);
44
+ // 4. Configure Environment
45
+ const previousConfig = config_1.configManager.getAIConfig();
46
+ await config_1.configManager.setAIConfig({
47
+ provider: modelConfig.provider,
48
+ model: modelConfig.model,
49
+ });
50
+ // 5. Execute Task
51
+ const startTime = Date.now();
52
+ const executionConfig = {
53
+ tool: "opencode", // Default executor
54
+ executorConfig: {
55
+ model: modelConfig.model,
56
+ },
57
+ verificationCommands: verificationCommands,
58
+ enableRetry: true,
59
+ maxRetries: maxRetries,
60
+ tryModels: [], // No model fallback during benchmark
61
+ autoCommit: true, // Force commit to capture work in branch
62
+ };
63
+ let output;
64
+ let error;
65
+ try {
66
+ output = await (0, task_execution_core_1.executeTaskCore)(taskId, executionConfig);
67
+ }
68
+ catch (e) {
69
+ error = e instanceof Error ? e.message : String(e);
70
+ }
71
+ const duration = Date.now() - startTime;
72
+ // Restore Config
73
+ await config_1.configManager.setAIConfig(previousConfig);
74
+ // 6. Capture Result
75
+ results.push({
76
+ modelId,
77
+ output: {
78
+ ...output,
79
+ branch: branchName,
80
+ status: output?.success ? "PASS" : "FAIL",
81
+ },
82
+ duration,
83
+ error,
84
+ timestamp: Date.now(),
85
+ });
86
+ onProgress?.({
87
+ type: output?.success ? "complete" : "error",
88
+ modelId,
89
+ duration,
90
+ error,
91
+ });
92
+ // 7. Cleanup
93
+ await (0, git_utils_1.checkoutBranch)(baseBranch);
94
+ if (!keepBranches) {
95
+ await (0, git_utils_1.cleanupBenchmarkBranch)(branchName);
96
+ }
97
+ }
98
+ catch (err) {
99
+ // Critical Failure Loop Rescue
100
+ logger_1.logger.error(`💥 Critical Benchmark Failure for ${modelId}: ${err}`);
101
+ try {
102
+ // Attempt to return to safety
103
+ const current = await (0, git_utils_1.getCurrentBranch)();
104
+ if (current !== baseBranch) {
105
+ await (0, git_utils_1.checkoutBranch)(baseBranch);
106
+ }
107
+ }
108
+ catch (resetErr) {
109
+ logger_1.logger.error(`🔥 FATAL: Could not reset branch: ${resetErr}`);
110
+ throw resetErr; // Stop everything if git state is corrupted
111
+ }
112
+ }
113
+ }
114
+ const run = {
115
+ id: runId,
116
+ timestamp: Date.now(),
117
+ command: "execution-benchmark",
118
+ input: options,
119
+ config,
120
+ results,
121
+ };
122
+ storage_1.benchmarkStorage.saveRun(run);
123
+ return run;
124
+ }
125
+ async runExecuteLoopBenchmark(options, config, onProgress) {
126
+ const { loopOptions, keepBranches = true } = options;
127
+ // 1. Safety Check: Git state must be clean
128
+ if (!(await (0, git_utils_1.isClean)())) {
129
+ throw new Error("Working directory is not clean. Please commit or stash changes before running benchmarks.");
130
+ }
131
+ const baseBranch = await (0, git_utils_1.getCurrentBranch)();
132
+ const runId = `bench-loop-${Date.now()}`;
133
+ const results = [];
134
+ logger_1.logger.info(`🚀 Starting Execute Loop Benchmark`);
135
+ logger_1.logger.info(`📍 Base Branch: ${baseBranch}`);
136
+ // 2. Iterate Models
137
+ for (const modelConfig of config.models) {
138
+ const modelId = `${modelConfig.provider}:${modelConfig.model}`;
139
+ const safeModelName = modelConfig.model.replace(/[^a-zA-Z0-9-]/g, "-");
140
+ const branchName = `bench/loop/${safeModelName}-${Date.now()}`;
141
+ onProgress?.({ type: "start", modelId });
142
+ try {
143
+ // 3. Create & Checkout Isolation Branch
144
+ await (0, git_utils_1.createBenchmarkBranch)(branchName, baseBranch);
145
+ await (0, git_utils_1.checkoutBranch)(branchName);
146
+ // 4. Configure Environment
147
+ const previousConfig = config_1.configManager.getAIConfig();
148
+ await config_1.configManager.setAIConfig({
149
+ provider: modelConfig.provider,
150
+ model: modelConfig.model,
151
+ });
152
+ // 5. Execute Loop
153
+ const startTime = Date.now();
154
+ const loopResult = await (0, task_loop_execution_1.executeTaskLoop)(loopOptions);
155
+ const duration = Date.now() - startTime;
156
+ // Restore Config
157
+ await config_1.configManager.setAIConfig(previousConfig);
158
+ // 6. Capture Result
159
+ const success = loopResult.failedTasks === 0;
160
+ results.push({
161
+ modelId,
162
+ output: {
163
+ ...loopResult,
164
+ branch: branchName,
165
+ status: success ? "PASS" : "FAIL",
166
+ },
167
+ duration,
168
+ error: success
169
+ ? undefined
170
+ : `${loopResult.failedTasks} tasks failed`,
171
+ timestamp: Date.now(),
172
+ });
173
+ onProgress?.({
174
+ type: success ? "complete" : "error",
175
+ modelId,
176
+ duration,
177
+ error: success ? undefined : `${loopResult.failedTasks} tasks failed`,
178
+ });
179
+ // 7. Cleanup
180
+ await (0, git_utils_1.checkoutBranch)(baseBranch);
181
+ if (!keepBranches) {
182
+ await (0, git_utils_1.cleanupBenchmarkBranch)(branchName);
183
+ }
184
+ }
185
+ catch (err) {
186
+ logger_1.logger.error(`💥 Critical Benchmark Failure for ${modelId}: ${err}`);
187
+ try {
188
+ const current = await (0, git_utils_1.getCurrentBranch)();
189
+ if (current !== baseBranch) {
190
+ await (0, git_utils_1.checkoutBranch)(baseBranch);
191
+ }
192
+ }
193
+ catch (resetErr) {
194
+ logger_1.logger.error(`🔥 FATAL: Could not reset branch: ${resetErr}`);
195
+ throw resetErr;
196
+ }
197
+ }
198
+ }
199
+ const run = {
200
+ id: runId,
201
+ timestamp: Date.now(),
202
+ command: "execute-loop-benchmark",
203
+ input: options,
204
+ config,
205
+ results,
206
+ };
207
+ storage_1.benchmarkStorage.saveRun(run);
208
+ return run;
209
+ }
210
+ async runWorkflowBenchmark(input, config, onProgress) {
211
+ const runId = `bench-workflow-${Date.now()}`;
212
+ const results = [];
213
+ const baseDir = input.tempDirBase || (0, path_1.resolve)(process.cwd(), "benchmarks");
214
+ logger_1.logger.info(`🚀 Starting Workflow Benchmark`);
215
+ logger_1.logger.info(`📍 Base Directory: ${baseDir}`);
216
+ for (const modelConfig of config.models) {
217
+ const modelId = `${modelConfig.provider}:${modelConfig.model}`;
218
+ const safeModelName = modelConfig.model.replace(/[^a-zA-Z0-9-]/g, "-");
219
+ const timestamp = Date.now();
220
+ const projectDir = (0, path_1.join)(baseDir, `${input.collectedResponses.projectName}-${safeModelName}-${timestamp}`);
221
+ onProgress?.({ type: "start", modelId });
222
+ const startTime = Date.now();
223
+ try {
224
+ // Prepare AI Options
225
+ const aiOptions = {
226
+ aiProvider: modelConfig.provider,
227
+ aiModel: modelConfig.model,
228
+ aiKey: process.env.AI_API_KEY, // Propagate key
229
+ };
230
+ // 1. Initialize
231
+ const initResult = await workflow_1.workflowService.initializeProject({
232
+ projectName: input.collectedResponses.projectName,
233
+ projectDir,
234
+ initMethod: input.collectedResponses.initMethod,
235
+ projectDescription: input.collectedResponses.projectDescription,
236
+ stackConfig: input.collectedResponses.stackConfig,
237
+ aiOptions,
238
+ bootstrap: true, // Always bootstrap for benchmarks? or follow input
239
+ includeDocs: true,
240
+ });
241
+ // 2. Define PRD
242
+ const prdResult = await workflow_1.workflowService.definePRD({
243
+ method: input.collectedResponses.prdMethod,
244
+ prdContent: input.collectedResponses.prdContent,
245
+ prdDescription: input.collectedResponses.prdDescription,
246
+ prdFile: input.collectedResponses.prdFile,
247
+ projectDir,
248
+ aiOptions,
249
+ });
250
+ // 3. Generate Tasks
251
+ let tasksResult = { tasks: [] };
252
+ if (input.collectedResponses.generateTasks) {
253
+ tasksResult = await workflow_1.workflowService.generateTasks({
254
+ prdFile: prdResult.prdFile,
255
+ method: "ai",
256
+ customInstructions: input.collectedResponses.customInstructions,
257
+ projectDir,
258
+ aiOptions,
259
+ });
260
+ }
261
+ // 4. Split Tasks
262
+ let splitResult;
263
+ if (input.collectedResponses.splitTasks &&
264
+ tasksResult.tasks.length > 0) {
265
+ splitResult = await workflow_1.workflowService.splitTasks({
266
+ taskIds: tasksResult.tasks.map((t) => t.id),
267
+ splitMethod: "standard",
268
+ customInstructions: input.collectedResponses.splitInstructions,
269
+ aiOptions,
270
+ });
271
+ }
272
+ // 5. Execute Tasks (Optional)
273
+ let executionResult;
274
+ if (input.workflowOptions.executeTasks) {
275
+ // Switch to project dir for execution
276
+ const originalCwd = process.cwd();
277
+ process.chdir(projectDir);
278
+ try {
279
+ executionResult = await workflow_1.workflowService.executeTasks({
280
+ options: {
281
+ filters: {}, // Execute all
282
+ tool: "opencode",
283
+ config: {
284
+ maxRetries: 3,
285
+ autoCommit: true,
286
+ },
287
+ dry: false
288
+ }
289
+ });
290
+ }
291
+ finally {
292
+ process.chdir(originalCwd);
293
+ }
294
+ }
295
+ const duration = Date.now() - startTime;
296
+ results.push({
297
+ modelId,
298
+ duration,
299
+ timestamp: Date.now(),
300
+ output: {
301
+ projectDir,
302
+ stats: {
303
+ totalTasks: tasksResult.tasks.length,
304
+ successfulSteps: 5, // Approximate
305
+ totalSteps: 5
306
+ },
307
+ execution: executionResult
308
+ }
309
+ });
310
+ onProgress?.({ type: "complete", modelId, duration });
311
+ }
312
+ catch (error) {
313
+ const duration = Date.now() - startTime;
314
+ results.push({
315
+ modelId,
316
+ duration,
317
+ timestamp: Date.now(),
318
+ error: error instanceof Error ? error.message : String(error),
319
+ output: {}
320
+ });
321
+ onProgress?.({ type: "error", modelId, error: String(error) });
322
+ }
323
+ }
324
+ const run = {
325
+ id: runId,
326
+ timestamp: Date.now(),
327
+ command: "workflow-benchmark",
328
+ input,
329
+ config,
330
+ results,
331
+ };
332
+ storage_1.benchmarkStorage.saveRun(run);
333
+ return run;
334
+ }
335
+ getRun(id) {
336
+ return storage_1.benchmarkStorage.getRun(id);
337
+ }
338
+ listRuns() {
339
+ return storage_1.benchmarkStorage.listRuns();
340
+ }
341
+ }
342
+ exports.BenchmarkService = BenchmarkService;
343
+ exports.benchmarkService = new BenchmarkService();
@@ -0,0 +1,136 @@
1
+ import { getAIOperations, getStorage } from "../utils/ai-service-factory";
2
+ import { AIOptions } from "../utils/ai-config-builder";
3
+ import { StreamingOptions } from "../types";
4
+ import { PRDParseResult, SuggestStackResult } from "../types/results";
5
+ import { ProgressCallback } from "../types/callbacks";
6
+ /**
7
+ * Dependencies for PRDService
8
+ */
9
+ export interface PRDServiceDependencies {
10
+ storage?: ReturnType<typeof getStorage>;
11
+ aiOperations?: ReturnType<typeof getAIOperations>;
12
+ }
13
+ /**
14
+ * PRDService - Business logic for PRD operations
15
+ * Handles PRD parsing, task extraction, and PRD improvement
16
+ */
17
+ export declare class PRDService {
18
+ private storage;
19
+ private aiOperations;
20
+ /**
21
+ * Create a new PRDService
22
+ *
23
+ * @param dependencies - Optional dependencies to inject (for testing)
24
+ */
25
+ constructor(dependencies?: PRDServiceDependencies);
26
+ parsePRD(input: {
27
+ file: string;
28
+ workingDirectory?: string;
29
+ enableFilesystemTools?: boolean;
30
+ aiOptions?: AIOptions;
31
+ promptOverride?: string;
32
+ messageOverride?: string;
33
+ streamingOptions?: StreamingOptions;
34
+ callbacks?: ProgressCallback;
35
+ }): Promise<PRDParseResult>;
36
+ generateQuestions(input: {
37
+ file: string;
38
+ workingDirectory?: string;
39
+ enableFilesystemTools?: boolean;
40
+ aiOptions?: AIOptions;
41
+ promptOverride?: string;
42
+ messageOverride?: string;
43
+ streamingOptions?: StreamingOptions;
44
+ callbacks?: ProgressCallback;
45
+ }): Promise<string[]>;
46
+ reworkPRD(input: {
47
+ file: string;
48
+ feedback: string;
49
+ output?: string;
50
+ workingDirectory?: string;
51
+ enableFilesystemTools?: boolean;
52
+ aiOptions?: AIOptions;
53
+ promptOverride?: string;
54
+ messageOverride?: string;
55
+ streamingOptions?: StreamingOptions;
56
+ callbacks?: ProgressCallback;
57
+ }): Promise<string>;
58
+ refinePRDWithQuestions(input: {
59
+ file: string;
60
+ questionMode: "user" | "ai";
61
+ answers?: Record<string, string>;
62
+ questionAIOptions?: AIOptions;
63
+ workingDirectory?: string;
64
+ enableFilesystemTools?: boolean;
65
+ aiOptions?: AIOptions;
66
+ streamingOptions?: StreamingOptions;
67
+ callbacks?: ProgressCallback;
68
+ }): Promise<{
69
+ questions: string[];
70
+ answers: Record<string, string>;
71
+ refinedPRDPath: string;
72
+ }>;
73
+ generatePRD(input: {
74
+ description: string;
75
+ outputDir?: string;
76
+ filename?: string;
77
+ aiOptions?: AIOptions;
78
+ streamingOptions?: StreamingOptions;
79
+ callbacks?: ProgressCallback;
80
+ }): Promise<{
81
+ path: string;
82
+ content: string;
83
+ stats: {
84
+ duration: number;
85
+ tokenUsage?: {
86
+ prompt: number;
87
+ completion: number;
88
+ total: number;
89
+ };
90
+ timeToFirstToken?: number;
91
+ cost?: number;
92
+ };
93
+ }>;
94
+ combinePRDs(input: {
95
+ prds: string[];
96
+ originalDescription: string;
97
+ outputDir?: string;
98
+ filename?: string;
99
+ aiOptions?: AIOptions;
100
+ streamingOptions?: StreamingOptions;
101
+ callbacks?: ProgressCallback;
102
+ }): Promise<{
103
+ path: string;
104
+ content: string;
105
+ stats: {
106
+ duration: number;
107
+ tokenUsage?: {
108
+ prompt: number;
109
+ completion: number;
110
+ total: number;
111
+ };
112
+ timeToFirstToken?: number;
113
+ cost?: number;
114
+ };
115
+ }>;
116
+ /**
117
+ * Suggest a technology stack based on PRD analysis.
118
+ */
119
+ suggestStack(input: {
120
+ file?: string;
121
+ content?: string;
122
+ projectName?: string;
123
+ output?: string;
124
+ workingDirectory?: string;
125
+ enableFilesystemTools?: boolean;
126
+ save?: boolean;
127
+ aiOptions?: AIOptions;
128
+ promptOverride?: string;
129
+ messageOverride?: string;
130
+ streamingOptions?: StreamingOptions;
131
+ callbacks?: ProgressCallback;
132
+ }): Promise<SuggestStackResult>;
133
+ }
134
+ export declare function getPRDService(): PRDService;
135
+ export declare const prdService: PRDService;
136
+ //# sourceMappingURL=prd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prd.d.ts","sourceRoot":"","sources":["../../src/services/prd.ts"],"names":[],"mappings":"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"}