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,397 @@
1
+ import { exec } from "node:child_process";
2
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
3
+ import { join } from "node:path";
4
+ import { promisify } from "node:util";
5
+
6
+ import type { CliDependencyLevel } from "../../types";
7
+ import { logger } from "../logger";
8
+
9
+ const execAsync = promisify(exec);
10
+
11
+ export interface CliBootstrapOptions {
12
+ projectName: string;
13
+ projectPath: string;
14
+ dependencyLevel: CliDependencyLevel;
15
+ packageManager: "npm" | "pnpm" | "bun";
16
+ runtime: "node" | "bun";
17
+ typescript: boolean;
18
+ }
19
+
20
+ export async function bootstrapCliProject(
21
+ options: CliBootstrapOptions
22
+ ): Promise<{ success: boolean; message: string }> {
23
+ try {
24
+ logger.info(`\n🚀 Bootstrapping CLI project: ${options.projectName}`);
25
+
26
+ // Create project directory
27
+ if (!existsSync(options.projectPath)) {
28
+ mkdirSync(options.projectPath, { recursive: true });
29
+ logger.success(` ✓ Created project directory`);
30
+ }
31
+
32
+ // Create directory structure
33
+ const dirs = [
34
+ "src/cli",
35
+ "src/commands",
36
+ "src/types",
37
+ ];
38
+
39
+ // Add services dir for standard+
40
+ if (options.dependencyLevel !== "minimal") {
41
+ dirs.push("src/services");
42
+ }
43
+
44
+ // Add test dir for full+
45
+ if (options.dependencyLevel === "full" || options.dependencyLevel === "task-o-matic") {
46
+ dirs.push("src/test");
47
+ }
48
+
49
+ for (const dir of dirs) {
50
+ const fullPath = join(options.projectPath, dir);
51
+ mkdirSync(fullPath, { recursive: true });
52
+ }
53
+ logger.success(` ✓ Created directory structure`);
54
+
55
+ // Generate files
56
+ writeFileSync(
57
+ join(options.projectPath, "package.json"),
58
+ generatePackageJson(options)
59
+ );
60
+ logger.success(` ✓ Created package.json`);
61
+
62
+ writeFileSync(
63
+ join(options.projectPath, "tsconfig.json"),
64
+ generateTsConfig(options.dependencyLevel === "full" || options.dependencyLevel === "task-o-matic")
65
+ );
66
+ logger.success(` ✓ Created tsconfig.json`);
67
+
68
+ writeFileSync(
69
+ join(options.projectPath, "src/cli/bin.ts"),
70
+ generateBinTemplate()
71
+ );
72
+ logger.success(` ✓ Created src/cli/bin.ts`);
73
+
74
+ writeFileSync(
75
+ join(options.projectPath, "src/index.ts"),
76
+ generateIndexTemplate(options.projectName)
77
+ );
78
+ logger.success(` ✓ Created src/index.ts`);
79
+
80
+ writeFileSync(
81
+ join(options.projectPath, "src/commands/index.ts"),
82
+ generateCommandsIndexTemplate()
83
+ );
84
+ logger.success(` ✓ Created src/commands/index.ts`);
85
+
86
+ writeFileSync(
87
+ join(options.projectPath, "src/commands/example.ts"),
88
+ generateExampleCommandTemplate()
89
+ );
90
+ logger.success(` ✓ Created src/commands/example.ts`);
91
+
92
+ writeFileSync(
93
+ join(options.projectPath, "src/types/index.ts"),
94
+ generateTypesTemplate()
95
+ );
96
+ logger.success(` ✓ Created src/types/index.ts`);
97
+
98
+ writeFileSync(
99
+ join(options.projectPath, "README.md"),
100
+ generateReadmeTemplate(options)
101
+ );
102
+ logger.success(` ✓ Created README.md`);
103
+
104
+ writeFileSync(
105
+ join(options.projectPath, ".gitignore"),
106
+ generateGitignoreTemplate()
107
+ );
108
+ logger.success(` ✓ Created .gitignore`);
109
+
110
+ // Install dependencies
111
+ logger.progress(`\n 📦 Installing dependencies with ${options.packageManager}...`);
112
+ const installCmd = options.packageManager === "npm" ? "npm install" :
113
+ options.packageManager === "pnpm" ? "pnpm install" :
114
+ "bun install";
115
+
116
+ await execAsync(installCmd, { cwd: options.projectPath });
117
+ logger.success(` ✓ Dependencies installed`);
118
+
119
+ return {
120
+ success: true,
121
+ message: `CLI project "${options.projectName}" created successfully!`
122
+ };
123
+ } catch (error) {
124
+ const message = error instanceof Error ? error.message : String(error);
125
+ return {
126
+ success: false,
127
+ message: `Failed to bootstrap CLI project: ${message}`
128
+ };
129
+ }
130
+ }
131
+
132
+ function generatePackageJson(options: CliBootstrapOptions): string {
133
+ const deps = getBaseDependencies(options.dependencyLevel);
134
+ const devDeps = getDevDependencies(options);
135
+ const scripts = getScripts(options);
136
+
137
+ const pkg = {
138
+ name: options.projectName,
139
+ version: "0.1.0",
140
+ type: "module",
141
+ main: "./dist/lib/index.js",
142
+ types: "./dist/lib/index.d.ts",
143
+ bin: {
144
+ [options.projectName]: "./dist/cli/bin.js"
145
+ },
146
+ scripts,
147
+ dependencies: deps,
148
+ devDependencies: devDeps,
149
+ };
150
+
151
+ return JSON.stringify(pkg, null, 2);
152
+ }
153
+
154
+ function getBaseDependencies(level: CliDependencyLevel): Record<string, string> {
155
+ const deps: Record<string, Record<string, string>> = {
156
+ minimal: {
157
+ commander: "latest",
158
+ chalk: "latest"
159
+ },
160
+ standard: {
161
+ commander: "latest",
162
+ chalk: "latest",
163
+ inquirer: "latest",
164
+ dotenv: "latest"
165
+ },
166
+ full: {
167
+ commander: "latest",
168
+ chalk: "latest",
169
+ inquirer: "latest",
170
+ dotenv: "latest"
171
+ },
172
+ "task-o-matic": {
173
+ commander: "latest",
174
+ chalk: "latest",
175
+ inquirer: "latest",
176
+ dotenv: "latest",
177
+ ai: "latest",
178
+ "@ai-sdk/anthropic": "latest",
179
+ "@ai-sdk/openai": "latest",
180
+ zod: "latest"
181
+ }
182
+ };
183
+
184
+ return deps[level];
185
+ }
186
+
187
+ function getDevDependencies(options: CliBootstrapOptions): Record<string, string> {
188
+ const devDeps: Record<string, string> = {
189
+ typescript: "latest",
190
+ "@types/node": "latest",
191
+ };
192
+
193
+ if (options.dependencyLevel === "full" || options.dependencyLevel === "task-o-matic") {
194
+ devDeps.mocha = "latest";
195
+ devDeps.tsx = "latest";
196
+ devDeps["@types/mocha"] = "latest";
197
+ }
198
+
199
+ return devDeps;
200
+ }
201
+
202
+ function getScripts(options: CliBootstrapOptions): Record<string, string> {
203
+ const scripts: Record<string, string> = {
204
+ build: "rm -rf dist && tsc",
205
+ "build:watch": "tsc --watch",
206
+ dev: "tsx src/cli/bin.ts",
207
+ start: "node dist/cli/bin.js",
208
+ "check-types": "tsc --noEmit"
209
+ };
210
+
211
+ if (options.dependencyLevel === "full" || options.dependencyLevel === "task-o-matic") {
212
+ scripts.test = "mocha -r tsx/cjs src/test/**/*.test.ts";
213
+ }
214
+
215
+ return scripts;
216
+ }
217
+
218
+ function generateBinTemplate(): string {
219
+ return `#!/usr/bin/env node
220
+ import { runCLI } from "../index.js";
221
+
222
+ runCLI().catch((error) => {
223
+ console.error(error);
224
+ process.exit(1);
225
+ });
226
+ `;
227
+ }
228
+
229
+ function generateIndexTemplate(projectName: string): string {
230
+ return `import { Command } from "commander";
231
+ import chalk from "chalk";
232
+ import { exampleCommand } from "./commands/example.js";
233
+
234
+ const program = new Command();
235
+
236
+ program
237
+ .name("${projectName}")
238
+ .description("CLI application generated by task-o-matic")
239
+ .version("0.1.0");
240
+
241
+ program.addCommand(exampleCommand);
242
+
243
+ program.action(() => {
244
+ console.log(chalk.blue("Welcome to ${projectName}!"));
245
+ console.log(chalk.gray("Run with --help to see available commands"));
246
+ });
247
+
248
+ export const runCLI = async () => {
249
+ await program.parseAsync(process.argv);
250
+ };
251
+ `;
252
+ }
253
+
254
+ function generateCommandsIndexTemplate(): string {
255
+ return `export * from "./example.js";
256
+ `;
257
+ }
258
+
259
+ function generateExampleCommandTemplate(): string {
260
+ return `import { Command } from "commander";
261
+ import chalk from "chalk";
262
+
263
+ export const exampleCommand = new Command("hello")
264
+ .description("Example command that greets the user")
265
+ .argument("[name]", "Name to greet", "World")
266
+ .action((name: string) => {
267
+ console.log(chalk.green(\`Hello, \${name}!\`));
268
+ });
269
+ `;
270
+ }
271
+
272
+ function generateTypesTemplate(): string {
273
+ return `// Add your custom types here
274
+
275
+ export interface ExampleType {
276
+ name: string;
277
+ value: number;
278
+ }
279
+ `;
280
+ }
281
+
282
+ function generateTsConfig(strict: boolean): string {
283
+ const config = {
284
+ compilerOptions: {
285
+ target: "ES2022",
286
+ module: "ESNext",
287
+ moduleResolution: "bundler",
288
+ strict: strict,
289
+ esModuleInterop: true,
290
+ skipLibCheck: true,
291
+ declaration: true,
292
+ declarationMap: true,
293
+ outDir: "dist",
294
+ rootDir: "src",
295
+ },
296
+ include: ["src/**/*"],
297
+ exclude: ["node_modules", "dist"]
298
+ };
299
+
300
+ return JSON.stringify(config, null, 2);
301
+ }
302
+
303
+ function generateReadmeTemplate(options: CliBootstrapOptions): string {
304
+ return `# ${options.projectName}
305
+
306
+ CLI application generated by task-o-matic
307
+
308
+ ## Installation
309
+
310
+ \`\`\`bash
311
+ ${options.packageManager} install
312
+ \`\`\`
313
+
314
+ ## Development
315
+
316
+ \`\`\`bash
317
+ # Run in development mode
318
+ ${options.packageManager} run dev
319
+
320
+ # Build the project
321
+ ${options.packageManager} run build
322
+
323
+ # Run the built CLI
324
+ ${options.packageManager} start
325
+ \`\`\`
326
+
327
+ ## Usage
328
+
329
+ \`\`\`bash
330
+ ${options.projectName} --help
331
+ ${options.projectName} hello World
332
+ \`\`\`
333
+
334
+ ## Project Structure
335
+
336
+ - \`src/cli/bin.ts\` - CLI entry point
337
+ - \`src/index.ts\` - Main CLI setup with Commander.js
338
+ - \`src/commands/\` - Command implementations
339
+ - \`src/types/\` - TypeScript type definitions
340
+ ${options.dependencyLevel !== "minimal" ? "- `src/services/` - Business logic services\n" : ""}${(options.dependencyLevel === "full" || options.dependencyLevel === "task-o-matic") ? "- `src/test/` - Test files\n" : ""}
341
+ ## Dependencies
342
+
343
+ This project uses:
344
+ - **Commander.js** - CLI framework
345
+ - **Chalk** - Terminal string styling
346
+ ${options.dependencyLevel !== "minimal" ? "- **Inquirer** - Interactive CLI prompts\n- **Dotenv** - Environment variable management\n" : ""}${options.dependencyLevel === "task-o-matic" ? "- **Vercel AI SDK** - AI integration\n- **Zod** - Runtime type validation\n" : ""}
347
+ ## Scripts
348
+
349
+ - \`${options.packageManager} run build\` - Build the TypeScript project
350
+ - \`${options.packageManager} run dev\` - Run in development mode with tsx
351
+ - \`${options.packageManager} start\` - Run the built CLI
352
+ - \`${options.packageManager} run check-types\` - Type check without compilation
353
+ ${(options.dependencyLevel === "full" || options.dependencyLevel === "task-o-matic") ? `- \`${options.packageManager} test\` - Run tests with Mocha\n` : ""}
354
+ ---
355
+
356
+ Generated with [task-o-matic](https://github.com/anthropics/task-o-matic)
357
+ `;
358
+ }
359
+
360
+ function generateGitignoreTemplate(): string {
361
+ return `# Dependencies
362
+ node_modules/
363
+ .pnp
364
+ .pnp.js
365
+
366
+ # Testing
367
+ coverage/
368
+
369
+ # Production
370
+ dist/
371
+ build/
372
+
373
+ # Misc
374
+ .DS_Store
375
+ .env
376
+ .env.local
377
+ .env.development.local
378
+ .env.test.local
379
+ .env.production.local
380
+
381
+ # Logs
382
+ npm-debug.log*
383
+ yarn-debug.log*
384
+ yarn-error.log*
385
+ lerna-debug.log*
386
+
387
+ # IDEs
388
+ .idea/
389
+ .vscode/
390
+ *.swp
391
+ *.swo
392
+ *~
393
+
394
+ # TypeScript
395
+ *.tsbuildinfo
396
+ `;
397
+ }
@@ -0,0 +1,2 @@
1
+ export * from "./cli-bootstrap.js";
2
+ export * from "./medusa-bootstrap.js";
@@ -0,0 +1,261 @@
1
+ import { exec } from "node:child_process";
2
+ import { randomBytes } from "node:crypto";
3
+ import { existsSync, mkdirSync, writeFileSync } from "node:fs";
4
+ import { join } from "node:path";
5
+ import { promisify } from "node:util";
6
+
7
+ import { logger } from "../logger";
8
+
9
+ const execAsync = promisify(exec);
10
+
11
+ export interface MedusaBootstrapOptions {
12
+ projectName: string;
13
+ projectPath: string;
14
+ packageManager: "npm" | "pnpm" | "bun";
15
+ database?: "postgres" | "sqlite";
16
+ skipDb?: boolean;
17
+ skipInstall?: boolean;
18
+ version?: string;
19
+ }
20
+
21
+ export async function bootstrapMedusaProject(
22
+ options: MedusaBootstrapOptions
23
+ ): Promise<{ success: boolean; message: string }> {
24
+ try {
25
+ logger.info(
26
+ `\n🚀 Bootstrapping MedusaJS project: ${options.projectName}`
27
+ );
28
+
29
+ // Create project directory
30
+ if (!existsSync(options.projectPath)) {
31
+ mkdirSync(options.projectPath, { recursive: true });
32
+ logger.success(` ✓ Created project directory`);
33
+ }
34
+
35
+ // Build create-medusa-app command with correct package runner
36
+ const versionFlag = options.version ? `@${options.version}` : "@latest";
37
+ const dbFlag =
38
+ options.database === "postgres"
39
+ ? "--db-type postgres"
40
+ : "--db-type sqlite";
41
+ const skipInstallFlag = options.skipInstall ? "--skip-install" : "";
42
+
43
+ // Respect package manager for the runner
44
+ const packageRunner =
45
+ options.packageManager === "npm"
46
+ ? "npx"
47
+ : options.packageManager === "pnpm"
48
+ ? "pnpm dlx"
49
+ : "bunx";
50
+
51
+ // Use the project path as the target directory
52
+ const createCmd = `${packageRunner} create-medusa-app${versionFlag} ${options.projectPath} ${dbFlag} ${skipInstallFlag} --skip-db --no-browser`;
53
+
54
+ logger.progress(
55
+ `\n 📦 Running create-medusa-app with ${options.packageManager}...`
56
+ );
57
+ await execAsync(createCmd, { cwd: process.cwd() });
58
+ logger.success(` ✓ MedusaJS project scaffolded`);
59
+
60
+ // Generate environment file
61
+ const envContent = generateEnvFile(options);
62
+ writeFileSync(join(options.projectPath, ".env"), envContent);
63
+ logger.success(` ✓ Created .env file`);
64
+
65
+ // Generate README
66
+ const readmeContent = generateReadme(options);
67
+ writeFileSync(join(options.projectPath, "README.md"), readmeContent);
68
+ logger.success(` ✓ Created README.md`);
69
+
70
+ // Install dependencies if not skipped
71
+ if (!options.skipInstall) {
72
+ logger.progress(
73
+ `\n 📦 Installing dependencies with ${options.packageManager}...`
74
+ );
75
+ const installCmd =
76
+ options.packageManager === "npm"
77
+ ? "npm install"
78
+ : options.packageManager === "pnpm"
79
+ ? "pnpm install"
80
+ : "bun install";
81
+
82
+ await execAsync(installCmd, { cwd: options.projectPath });
83
+ logger.success(` ✓ Dependencies installed`);
84
+ }
85
+
86
+ // Setup database if not skipped
87
+ if (!options.skipDb) {
88
+ logger.progress(`\n 🗄️ Setting up database...`);
89
+ try {
90
+ const dbPackageRunner =
91
+ options.packageManager === "npm"
92
+ ? "npx"
93
+ : options.packageManager === "pnpm"
94
+ ? "pnpm dlx"
95
+ : "bunx";
96
+ await execAsync(`${dbPackageRunner} medusa db:setup`, {
97
+ cwd: options.projectPath,
98
+ });
99
+ logger.success(` ✓ Database setup complete`);
100
+ } catch (_error) {
101
+ const dbPackageRunner =
102
+ options.packageManager === "npm"
103
+ ? "npx"
104
+ : options.packageManager === "pnpm"
105
+ ? "pnpm dlx"
106
+ : "bunx";
107
+ logger.warn(
108
+ ` ⚠️ Database setup skipped (run '${dbPackageRunner} medusa db:setup' manually)`
109
+ );
110
+ }
111
+ }
112
+
113
+ return {
114
+ success: true,
115
+ message: `MedusaJS project "${options.projectName}" created successfully!`,
116
+ };
117
+ } catch (error) {
118
+ const message = error instanceof Error ? error.message : String(error);
119
+ return {
120
+ success: false,
121
+ message: `Failed to bootstrap MedusaJS project: ${message}`,
122
+ };
123
+ }
124
+ }
125
+
126
+ function generateEnvFile(options: MedusaBootstrapOptions): string {
127
+ const database = options.database || "sqlite";
128
+ const databaseUrl =
129
+ database === "postgres"
130
+ ? "postgres://postgres:postgres@localhost:5432/medusa-store"
131
+ : "sqlite://./medusa.db";
132
+
133
+ // Generate secure random secrets
134
+ const jwtSecret = randomBytes(32).toString("hex");
135
+ const cookieSecret = randomBytes(32).toString("hex");
136
+
137
+ return `# Database Configuration
138
+ DATABASE_URL=${databaseUrl}
139
+
140
+ # Authentication Secrets (auto-generated)
141
+ JWT_SECRET=${jwtSecret}
142
+ COOKIE_SECRET=${cookieSecret}
143
+
144
+ # CORS Configuration (adjust for your frontend)
145
+ STORE_CORS=http://localhost:8000
146
+ ADMIN_CORS=http://localhost:7001,http://localhost:7000
147
+
148
+ # Server Configuration
149
+ PORT=9000
150
+
151
+ # Redis (optional - uncomment for production)
152
+ # REDIS_URL=redis://localhost:6379
153
+
154
+ # Worker Mode (shared = single process, server = API only, worker = background jobs only)
155
+ WORKER_MODE=shared
156
+ `;
157
+ }
158
+
159
+ function generateReadme(options: MedusaBootstrapOptions): string {
160
+ const database = options.database || "sqlite";
161
+
162
+ return `# ${options.projectName}
163
+
164
+ MedusaJS e-commerce backend generated by task-o-matic
165
+
166
+ ## Getting Started
167
+
168
+ ### Prerequisites
169
+
170
+ ${
171
+ database === "postgres"
172
+ ? `- PostgreSQL database running
173
+ - Update \`DATABASE_URL\` in \`.env\` with your database credentials`
174
+ : `- SQLite (no additional setup required)`
175
+ }
176
+
177
+ ### Installation
178
+
179
+ \`\`\`bash
180
+ ${options.packageManager} install
181
+ \`\`\`
182
+
183
+ ### Database Setup
184
+
185
+ \`\`\`bash
186
+ # Run migrations and seed data
187
+ ${
188
+ options.packageManager === "npm"
189
+ ? "npx"
190
+ : options.packageManager === "pnpm"
191
+ ? "pnpm dlx"
192
+ : "bunx"
193
+ } medusa db:setup
194
+ \`\`\`
195
+
196
+ ### Development
197
+
198
+ \`\`\`bash
199
+ # Start development server
200
+ ${options.packageManager} run dev
201
+
202
+ # The API will be available at http://localhost:9000
203
+ # Admin dashboard at http://localhost:9000/app
204
+ \`\`\`
205
+
206
+ ### Build
207
+
208
+ \`\`\`bash
209
+ # Build for production
210
+ ${options.packageManager} run build
211
+
212
+ # Start production server
213
+ ${options.packageManager} start
214
+ \`\`\`
215
+
216
+ ## Project Structure
217
+
218
+ - \`src/\` - Source code
219
+ - \`src/admin/\` - Admin dashboard customizations
220
+ - \`src/api/\` - API routes and middlewares
221
+ - \`src/modules/\` - Custom modules
222
+ - \`src/workflows/\` - Business logic workflows
223
+ - \`src/subscribers/\` - Event subscribers
224
+ - \`medusa-config.ts\` - MedusaJS configuration
225
+ - \`.env\` - Environment variables
226
+
227
+ ## Environment Variables
228
+
229
+ Key environment variables (see \`.env\` for full list):
230
+
231
+ - \`DATABASE_URL\` - Database connection string
232
+ - \`JWT_SECRET\` - Secret for JWT tokens
233
+ - \`COOKIE_SECRET\` - Secret for cookies
234
+ - \`STORE_CORS\` - Allowed origins for storefront
235
+ - \`ADMIN_CORS\` - Allowed origins for admin
236
+
237
+ ## Documentation
238
+
239
+ - [MedusaJS Documentation](https://docs.medusajs.com)
240
+ - [API Reference](https://docs.medusajs.com/api)
241
+ - [Admin Guide](https://docs.medusajs.com/admin)
242
+
243
+ ## Next Steps
244
+
245
+ 1. Configure your database connection in \`.env\`
246
+ 2. Run \`${
247
+ options.packageManager === "npm"
248
+ ? "npx"
249
+ : options.packageManager === "pnpm"
250
+ ? "pnpm dlx"
251
+ : "bunx"
252
+ } medusa db:setup\` to initialize the database
253
+ 3. Start the development server with \`${options.packageManager} run dev\`
254
+ 4. Access the admin dashboard at http://localhost:9000/app
255
+ 5. Create your first admin user
256
+
257
+ ---
258
+
259
+ Generated with [task-o-matic](https://github.com/DimitriGilbert/task-o-matic)
260
+ `;
261
+ }