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,206 @@
1
+ import { FileSystemStorage } from "../lib/storage/file-system";
2
+ import { TaskRepository } from "../lib/storage/types";
3
+ import { CreateTaskRequest } from "../types";
4
+ import * as assert from "assert";
5
+
6
+ describe("FileSystemStorage", () => {
7
+ let storage: TaskRepository;
8
+
9
+ beforeEach(async () => {
10
+ storage = new FileSystemStorage();
11
+ // Clean up any existing data for fresh test
12
+ try {
13
+ const tasks = await storage.getTopLevelTasks();
14
+ for (const task of tasks) {
15
+ await storage.deleteTask(task.id);
16
+ }
17
+ } catch (error) {
18
+ // Ignore cleanup errors
19
+ }
20
+ });
21
+
22
+ describe("Task Management", () => {
23
+ it("should create a task successfully", async () => {
24
+ const taskRequest: CreateTaskRequest = {
25
+ title: "Test Task",
26
+ description: "A test task description",
27
+ estimatedEffort: "small",
28
+ };
29
+
30
+ const task = await storage.createTask(taskRequest);
31
+
32
+ assert.strictEqual(task.title, "Test Task");
33
+ assert.strictEqual(task.description, "A test task description");
34
+ assert.strictEqual(task.estimatedEffort, "small");
35
+ assert.strictEqual(task.status, "todo");
36
+ assert.ok(task.id);
37
+ assert.ok(task.createdAt);
38
+ assert.ok(task.updatedAt);
39
+ });
40
+
41
+ it("should retrieve a task by ID", async () => {
42
+ const taskRequest: CreateTaskRequest = {
43
+ title: "Test Task for Retrieval",
44
+ };
45
+
46
+ const createdTask = await storage.createTask(taskRequest);
47
+ const retrievedTask = await storage.getTask(createdTask.id);
48
+
49
+ assert.ok(retrievedTask);
50
+ assert.strictEqual(retrievedTask.id, createdTask.id);
51
+ assert.strictEqual(retrievedTask.title, createdTask.title);
52
+ });
53
+
54
+ it("should return null for non-existent task", async () => {
55
+ const task = await storage.getTask("non-existent-id");
56
+ assert.strictEqual(task, null);
57
+ });
58
+
59
+ it("should update a task", async () => {
60
+ const taskRequest: CreateTaskRequest = {
61
+ title: "Original Title",
62
+ };
63
+
64
+ const createdTask = await storage.createTask(taskRequest);
65
+
66
+ // Add a small delay to ensure different timestamps
67
+ await new Promise((resolve) => setTimeout(resolve, 1));
68
+
69
+ const updatedTask = await storage.updateTask(createdTask.id, {
70
+ title: "Updated Title",
71
+ status: "in-progress",
72
+ });
73
+
74
+ assert.ok(updatedTask);
75
+ assert.strictEqual(updatedTask.title, "Updated Title");
76
+ assert.strictEqual(updatedTask.status, "in-progress");
77
+ assert.ok(updatedTask.updatedAt >= createdTask.updatedAt);
78
+ });
79
+
80
+ it("should delete a task", async () => {
81
+ const taskRequest: CreateTaskRequest = {
82
+ title: "Task to Delete",
83
+ };
84
+
85
+ const createdTask = await storage.createTask(taskRequest);
86
+ const deleteResult = await storage.deleteTask(createdTask.id);
87
+
88
+ assert.strictEqual(deleteResult, true);
89
+
90
+ const deletedTask = await storage.getTask(createdTask.id);
91
+ assert.strictEqual(deletedTask, null);
92
+ });
93
+
94
+ it("should handle task dependencies", async () => {
95
+ const task1Request: CreateTaskRequest = {
96
+ title: "First Task",
97
+ };
98
+
99
+ const task2Request: CreateTaskRequest = {
100
+ title: "Second Task",
101
+ dependencies: [],
102
+ };
103
+
104
+ const task1 = await storage.createTask(task1Request);
105
+ const task2 = await storage.createTask({
106
+ ...task2Request,
107
+ dependencies: [task1.id],
108
+ });
109
+
110
+ assert.strictEqual(task2.dependencies?.length, 1);
111
+ assert.strictEqual(task2.dependencies[0], task1.id);
112
+ });
113
+ });
114
+
115
+ describe("Input Validation", () => {
116
+ it("should reject empty task title", async () => {
117
+ try {
118
+ await storage.createTask({ title: "" });
119
+ assert.fail("Should have thrown an error");
120
+ } catch (error) {
121
+ assert.ok(error instanceof Error);
122
+ assert.ok(error.message.includes("title"));
123
+ }
124
+ });
125
+
126
+ it("should reject invalid task ID", async () => {
127
+ try {
128
+ await storage.getTask("");
129
+ assert.fail("Should have thrown an error");
130
+ } catch (error) {
131
+ assert.ok(error instanceof Error);
132
+ assert.ok(error.message.includes("Task ID"));
133
+ }
134
+ });
135
+
136
+ it("should reject invalid estimated effort", async () => {
137
+ try {
138
+ await storage.createTask({
139
+ title: "Test Task",
140
+ estimatedEffort: "invalid" as any,
141
+ });
142
+ assert.fail("Should have thrown an error");
143
+ } catch (error) {
144
+ assert.ok(error instanceof Error);
145
+ assert.ok(error.message.includes("effort"));
146
+ }
147
+ });
148
+ });
149
+
150
+ describe("Storage Validation", () => {
151
+ it("should validate storage integrity", async () => {
152
+ const validation = await storage.validateStorageIntegrity();
153
+ assert.ok(validation.isValid);
154
+ assert.strictEqual(validation.issues.length, 0);
155
+ });
156
+
157
+ it("should detect duplicate task IDs", async () => {
158
+ // This would require manual manipulation to test
159
+ // For now, just ensure the method exists
160
+ const validation = await storage.validateStorageIntegrity();
161
+ assert.ok(typeof validation.isValid === "boolean");
162
+ assert.ok(Array.isArray(validation.issues));
163
+ });
164
+ });
165
+
166
+ describe("Content Management", () => {
167
+ it("should save and retrieve task content", async () => {
168
+ const taskRequest: CreateTaskRequest = {
169
+ title: "Task with Content",
170
+ };
171
+
172
+ const task = await storage.createTask(taskRequest);
173
+ const content = "# Task Content\nThis is the task content.";
174
+
175
+ const contentFile = await storage.saveTaskContent(task.id, content);
176
+ const retrievedContent = await storage.getTaskContent(task.id);
177
+
178
+ assert.strictEqual(retrievedContent, content);
179
+ assert.ok(contentFile.includes(task.id));
180
+ });
181
+
182
+ it("should return null for non-existent content", async () => {
183
+ // First create a task to ensure storage is initialized
184
+ const taskRequest: CreateTaskRequest = {
185
+ title: "Dummy Task for Initialization",
186
+ };
187
+ await storage.createTask(taskRequest);
188
+
189
+ const content = await storage.getTaskContent("non-existent-task");
190
+ assert.strictEqual(content, null);
191
+ });
192
+
193
+ it("should delete task content", async () => {
194
+ const taskRequest: CreateTaskRequest = {
195
+ title: "Task with Content to Delete",
196
+ };
197
+
198
+ const task = await storage.createTask(taskRequest);
199
+ await storage.saveTaskContent(task.id, "Some content");
200
+ await storage.deleteTaskContent(task.id);
201
+
202
+ const content = await storage.getTaskContent(task.id);
203
+ assert.strictEqual(content, null);
204
+ });
205
+ });
206
+ });
@@ -0,0 +1,142 @@
1
+ import assert from "assert";
2
+ import { extractCommitInfo } from "../lib/git-utils";
3
+
4
+ describe("Task Loop Git Integration", () => {
5
+ const mockTaskTitle = "Test Task";
6
+ const mockExecutionMessage = "Executed task";
7
+
8
+ it("should extract commit info from existing commit", async () => {
9
+ const gitState = {
10
+ beforeHead: "abc",
11
+ afterHead: "def",
12
+ hasUncommittedChanges: false,
13
+ };
14
+
15
+ const mockExec = async (cmd: string) => {
16
+ if (cmd.includes("git show")) {
17
+ return {
18
+ stdout: "feat: test commit\n\nBody\n src/file.ts | 10 +",
19
+ stderr: "",
20
+ };
21
+ }
22
+ return { stdout: "", stderr: "" };
23
+ };
24
+
25
+ const result = await extractCommitInfo(
26
+ "1",
27
+ mockTaskTitle,
28
+ mockExecutionMessage,
29
+ gitState,
30
+ mockExec
31
+ );
32
+
33
+ assert.strictEqual(result.message, "feat: test commit");
34
+ assert.deepStrictEqual(result.files, ["src/file.ts"]);
35
+ });
36
+
37
+ it("should generate commit info from uncommitted changes", async () => {
38
+ const gitState = {
39
+ beforeHead: "abc",
40
+ afterHead: "abc",
41
+ hasUncommittedChanges: true,
42
+ };
43
+
44
+ const mockExec = async (cmd: string) => {
45
+ if (cmd.includes("git diff")) {
46
+ return { stdout: "diff content", stderr: "" };
47
+ }
48
+ if (cmd.includes("git status")) {
49
+ return { stdout: " M src/changed.ts", stderr: "" };
50
+ }
51
+ return { stdout: "", stderr: "" };
52
+ };
53
+
54
+ const mockAiOps = {
55
+ streamText: async () => JSON.stringify({ message: "fix: auto commit" }),
56
+ };
57
+
58
+ const result = await extractCommitInfo(
59
+ "1",
60
+ mockTaskTitle,
61
+ mockExecutionMessage,
62
+ gitState,
63
+ mockExec,
64
+ mockAiOps
65
+ );
66
+
67
+ assert.strictEqual(result.message, "fix: auto commit");
68
+ assert.deepStrictEqual(result.files, ["src/changed.ts"]);
69
+ });
70
+
71
+ it("should return default info when no changes", async () => {
72
+ const gitState = {
73
+ beforeHead: "abc",
74
+ afterHead: "abc",
75
+ hasUncommittedChanges: false,
76
+ };
77
+
78
+ const result = await extractCommitInfo(
79
+ "1",
80
+ mockTaskTitle,
81
+ mockExecutionMessage,
82
+ gitState
83
+ );
84
+
85
+ assert.strictEqual(result.message, `feat: complete task ${mockTaskTitle}`);
86
+ assert.deepStrictEqual(result.files, []);
87
+ });
88
+
89
+ it("should handle git command failures gracefully", async () => {
90
+ const gitState = {
91
+ beforeHead: "abc",
92
+ afterHead: "def",
93
+ hasUncommittedChanges: false,
94
+ };
95
+
96
+ const mockExec = async () => {
97
+ throw new Error("Git failed");
98
+ };
99
+
100
+ const result = await extractCommitInfo(
101
+ "1",
102
+ mockTaskTitle,
103
+ mockExecutionMessage,
104
+ gitState,
105
+ mockExec
106
+ );
107
+
108
+ assert.strictEqual(result.message, `feat: complete task ${mockTaskTitle}`);
109
+ assert.deepStrictEqual(result.files, []);
110
+ });
111
+
112
+ it("should handle invalid AI JSON response", async () => {
113
+ const gitState = {
114
+ beforeHead: "abc",
115
+ afterHead: "abc",
116
+ hasUncommittedChanges: true,
117
+ };
118
+
119
+ const mockExec = async (cmd: string) => {
120
+ if (cmd.includes("git diff")) return { stdout: "diff", stderr: "" };
121
+ if (cmd.includes("git status"))
122
+ return { stdout: " M file.ts", stderr: "" };
123
+ return { stdout: "", stderr: "" };
124
+ };
125
+
126
+ const mockAiOps = {
127
+ streamText: async () => "Not JSON",
128
+ };
129
+
130
+ const result = await extractCommitInfo(
131
+ "1",
132
+ mockTaskTitle,
133
+ mockExecutionMessage,
134
+ gitState,
135
+ mockExec,
136
+ mockAiOps
137
+ );
138
+
139
+ assert.strictEqual(result.message, `feat: complete task ${mockTaskTitle}`);
140
+ assert.deepStrictEqual(result.files, ["file.ts"]);
141
+ });
142
+ });
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Test Mock Setup - Provides mock instances for ai-service-factory
3
+ * Uses the injectTestInstances function to inject mocks
4
+ */
5
+
6
+ import { MockStorage } from "./mocks/mock-storage";
7
+ import { MockAIOperations } from "./mocks/mock-ai-operations";
8
+ import { MockModelProvider } from "./mocks/mock-model-provider";
9
+ import { MockContextBuilder } from "./mocks/mock-context-builder";
10
+ import { injectTestInstances } from "../utils/ai-service-factory";
11
+
12
+ // Store mock instances
13
+ export let mockStorage: MockStorage;
14
+ export let mockAIOperations: MockAIOperations;
15
+ export let mockModelProvider: MockModelProvider;
16
+ export let mockContextBuilder: MockContextBuilder;
17
+
18
+ /**
19
+ * Initialize fresh mock instances and inject them into the service factory
20
+ */
21
+ export function resetMocks() {
22
+ mockStorage = new MockStorage();
23
+ mockAIOperations = new MockAIOperations() as any; // Cast to any to avoid type issues
24
+ mockModelProvider = new MockModelProvider() as any;
25
+ mockContextBuilder = new MockContextBuilder(mockStorage) as any;
26
+
27
+ // Inject mocks into the service factory
28
+ injectTestInstances({
29
+ storage: mockStorage,
30
+ aiOperations: mockAIOperations as any,
31
+ modelProvider: mockModelProvider as any,
32
+ contextBuilder: mockContextBuilder as any,
33
+ });
34
+ }
35
+
36
+ /**
37
+ * Get current mock instances for test assertions
38
+ */
39
+ export function getMocks() {
40
+ return {
41
+ storage: mockStorage,
42
+ aiOperations: mockAIOperations,
43
+ modelProvider: mockModelProvider,
44
+ contextBuilder: mockContextBuilder,
45
+ };
46
+ }
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Test Setup - Global test configuration and cleanup
3
+ * This file sets up the test environment to ensure proper isolation and configuration
4
+ */
5
+
6
+ import { configManager } from "../lib/config";
7
+ import { hooks } from "../lib/hooks";
8
+ import { resetMocks } from "./test-mock-setup";
9
+
10
+ // Global test setup
11
+ before(async function () {
12
+ // Set up a test working directory
13
+ const testDir = process.cwd();
14
+ configManager.setWorkingDirectory(testDir);
15
+
16
+ // Set up a minimal test configuration (no need to load from disk)
17
+ configManager.setConfig({
18
+ ai: {
19
+ provider: "openrouter",
20
+ model: "anthropic/claude-3-5-sonnet",
21
+ maxTokens: 4000,
22
+ temperature: 0.7,
23
+ apiKey: "test-key",
24
+ },
25
+ workingDirectory: testDir,
26
+ });
27
+
28
+ // Reset mocks to ensure clean state
29
+ resetMocks();
30
+ });
31
+
32
+ // Clean up between tests
33
+ afterEach(function () {
34
+ // Reset mocks to ensure clean state
35
+ resetMocks();
36
+
37
+ // Clean up hooks to prevent interference
38
+ hooks.clear();
39
+ });
40
+
41
+ // Additional test utilities
42
+ export function setupTestEnvironment() {
43
+ // This can be called in individual tests for additional setup
44
+ return {
45
+ config: configManager.getConfig(),
46
+ workingDir: configManager.getWorkingDirectory(),
47
+ };
48
+ }
@@ -0,0 +1,45 @@
1
+ import { resetMockServices } from "./mocks/mock-service-factory";
2
+ import { MockStorage } from "./mocks/mock-storage";
3
+ import { MockAIOperations } from "./mocks/mock-ai-operations";
4
+ import { MockModelProvider } from "./mocks/mock-model-provider";
5
+ import { MockContextBuilder } from "./mocks/mock-context-builder";
6
+
7
+ export interface TestContext {
8
+ storage: MockStorage;
9
+ aiOperations: MockAIOperations;
10
+ modelProvider: MockModelProvider;
11
+ contextBuilder: MockContextBuilder;
12
+ }
13
+
14
+ export function createTestContext(): TestContext {
15
+ resetMockServices();
16
+
17
+ const storage = new MockStorage();
18
+ const aiOperations = new MockAIOperations();
19
+ const modelProvider = new MockModelProvider();
20
+ const contextBuilder = new MockContextBuilder(storage);
21
+
22
+ return {
23
+ storage,
24
+ aiOperations,
25
+ modelProvider,
26
+ contextBuilder,
27
+ };
28
+ }
29
+
30
+ export function createTestTaskData() {
31
+ return {
32
+ title: "Test Task",
33
+ description: "This is a test task description",
34
+ content: "Full content for the test task",
35
+ effort: "medium" as const,
36
+ };
37
+ }
38
+
39
+ export function createTestPRDData() {
40
+ return {
41
+ description: "Test PRD description",
42
+ content:
43
+ "# Test PRD\n\nThis is a test PRD document with multiple sections.\n\n## Features\n- Feature 1\n- Feature 2\n\n## Requirements\n- Requirement 1\n- Requirement 2",
44
+ };
45
+ }