ralph-starter 0.0.1 → 0.1.1-beta.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 (382) hide show
  1. package/README.md +707 -17
  2. package/dist/auth/browser.d.ts +10 -0
  3. package/dist/auth/browser.d.ts.map +1 -0
  4. package/dist/auth/browser.js +56 -0
  5. package/dist/auth/browser.js.map +1 -0
  6. package/dist/auth/index.d.ts +5 -0
  7. package/dist/auth/index.d.ts.map +1 -0
  8. package/dist/auth/index.js +5 -0
  9. package/dist/auth/index.js.map +1 -0
  10. package/dist/auth/oauth-server.d.ts +20 -0
  11. package/dist/auth/oauth-server.d.ts.map +1 -0
  12. package/dist/auth/oauth-server.js +168 -0
  13. package/dist/auth/oauth-server.js.map +1 -0
  14. package/dist/auth/pkce.d.ts +46 -0
  15. package/dist/auth/pkce.d.ts.map +1 -0
  16. package/dist/auth/pkce.js +57 -0
  17. package/dist/auth/pkce.js.map +1 -0
  18. package/dist/auth/providers/base.d.ts +52 -0
  19. package/dist/auth/providers/base.d.ts.map +1 -0
  20. package/dist/auth/providers/base.js +70 -0
  21. package/dist/auth/providers/base.js.map +1 -0
  22. package/dist/auth/providers/index.d.ts +23 -0
  23. package/dist/auth/providers/index.d.ts.map +1 -0
  24. package/dist/auth/providers/index.js +39 -0
  25. package/dist/auth/providers/index.js.map +1 -0
  26. package/dist/auth/providers/linear.d.ts +37 -0
  27. package/dist/auth/providers/linear.d.ts.map +1 -0
  28. package/dist/auth/providers/linear.js +46 -0
  29. package/dist/auth/providers/linear.js.map +1 -0
  30. package/dist/auth/providers/notion.d.ts +36 -0
  31. package/dist/auth/providers/notion.d.ts.map +1 -0
  32. package/dist/auth/providers/notion.js +75 -0
  33. package/dist/auth/providers/notion.js.map +1 -0
  34. package/dist/auth/providers/todoist.d.ts +29 -0
  35. package/dist/auth/providers/todoist.d.ts.map +1 -0
  36. package/dist/auth/providers/todoist.js +40 -0
  37. package/dist/auth/providers/todoist.js.map +1 -0
  38. package/dist/automation/git.d.ts +15 -0
  39. package/dist/automation/git.d.ts.map +1 -0
  40. package/dist/automation/git.js +73 -0
  41. package/dist/automation/git.js.map +1 -0
  42. package/dist/cli.d.ts +3 -0
  43. package/dist/cli.d.ts.map +1 -0
  44. package/dist/cli.js +192 -19
  45. package/dist/cli.js.map +1 -0
  46. package/dist/commands/auth.d.ts +14 -0
  47. package/dist/commands/auth.d.ts.map +1 -0
  48. package/dist/commands/auth.js +243 -0
  49. package/dist/commands/auth.js.map +1 -0
  50. package/dist/commands/check.d.ts +12 -0
  51. package/dist/commands/check.d.ts.map +1 -0
  52. package/dist/commands/check.js +124 -0
  53. package/dist/commands/check.js.map +1 -0
  54. package/dist/commands/config.d.ts +13 -0
  55. package/dist/commands/config.d.ts.map +1 -0
  56. package/dist/commands/config.js +376 -0
  57. package/dist/commands/config.js.map +1 -0
  58. package/dist/commands/init.d.ts +31 -0
  59. package/dist/commands/init.d.ts.map +1 -0
  60. package/dist/commands/init.js +353 -0
  61. package/dist/commands/init.js.map +1 -0
  62. package/dist/commands/integrations.d.ts +17 -0
  63. package/dist/commands/integrations.d.ts.map +1 -0
  64. package/dist/commands/integrations.js +193 -0
  65. package/dist/commands/integrations.js.map +1 -0
  66. package/dist/commands/plan.d.ts +5 -0
  67. package/dist/commands/plan.d.ts.map +1 -0
  68. package/dist/commands/plan.js +80 -0
  69. package/dist/commands/plan.js.map +1 -0
  70. package/dist/commands/run.d.ts +26 -0
  71. package/dist/commands/run.d.ts.map +1 -0
  72. package/dist/commands/run.js +351 -0
  73. package/dist/commands/run.js.map +1 -0
  74. package/dist/commands/scaffold.d.ts +9 -0
  75. package/dist/commands/scaffold.d.ts.map +1 -0
  76. package/dist/commands/scaffold.js +128 -0
  77. package/dist/commands/scaffold.js.map +1 -0
  78. package/dist/commands/setup.d.ts +12 -0
  79. package/dist/commands/setup.d.ts.map +1 -0
  80. package/dist/commands/setup.js +27 -0
  81. package/dist/commands/setup.js.map +1 -0
  82. package/dist/commands/skill.d.ts +6 -0
  83. package/dist/commands/skill.d.ts.map +1 -0
  84. package/dist/commands/skill.js +151 -0
  85. package/dist/commands/skill.js.map +1 -0
  86. package/dist/commands/source.d.ts +17 -0
  87. package/dist/commands/source.d.ts.map +1 -0
  88. package/dist/commands/source.js +173 -0
  89. package/dist/commands/source.js.map +1 -0
  90. package/dist/config/manager.d.ts +70 -0
  91. package/dist/config/manager.d.ts.map +1 -0
  92. package/dist/config/manager.js +227 -0
  93. package/dist/config/manager.js.map +1 -0
  94. package/dist/index.d.ts +26 -0
  95. package/dist/index.d.ts.map +1 -0
  96. package/dist/index.js +27 -2
  97. package/dist/index.js.map +1 -0
  98. package/dist/integrations/_template/auth.d.ts +29 -0
  99. package/dist/integrations/_template/auth.d.ts.map +1 -0
  100. package/dist/integrations/_template/auth.js +42 -0
  101. package/dist/integrations/_template/auth.js.map +1 -0
  102. package/dist/integrations/_template/index.d.ts +8 -0
  103. package/dist/integrations/_template/index.d.ts.map +1 -0
  104. package/dist/integrations/_template/index.js +8 -0
  105. package/dist/integrations/_template/index.js.map +1 -0
  106. package/dist/integrations/_template/source.d.ts +34 -0
  107. package/dist/integrations/_template/source.d.ts.map +1 -0
  108. package/dist/integrations/_template/source.js +124 -0
  109. package/dist/integrations/_template/source.js.map +1 -0
  110. package/dist/integrations/base.d.ts +158 -0
  111. package/dist/integrations/base.d.ts.map +1 -0
  112. package/dist/integrations/base.js +109 -0
  113. package/dist/integrations/base.js.map +1 -0
  114. package/dist/integrations/github/index.d.ts +8 -0
  115. package/dist/integrations/github/index.d.ts.map +1 -0
  116. package/dist/integrations/github/index.js +8 -0
  117. package/dist/integrations/github/index.js.map +1 -0
  118. package/dist/integrations/github/source.d.ts +26 -0
  119. package/dist/integrations/github/source.d.ts.map +1 -0
  120. package/dist/integrations/github/source.js +190 -0
  121. package/dist/integrations/github/source.js.map +1 -0
  122. package/dist/integrations/index.d.ts +37 -0
  123. package/dist/integrations/index.d.ts.map +1 -0
  124. package/dist/integrations/index.js +71 -0
  125. package/dist/integrations/index.js.map +1 -0
  126. package/dist/integrations/linear/auth.d.ts +37 -0
  127. package/dist/integrations/linear/auth.d.ts.map +1 -0
  128. package/dist/integrations/linear/auth.js +45 -0
  129. package/dist/integrations/linear/auth.js.map +1 -0
  130. package/dist/integrations/linear/index.d.ts +9 -0
  131. package/dist/integrations/linear/index.d.ts.map +1 -0
  132. package/dist/integrations/linear/index.js +9 -0
  133. package/dist/integrations/linear/index.js.map +1 -0
  134. package/dist/integrations/linear/source.d.ts +26 -0
  135. package/dist/integrations/linear/source.d.ts.map +1 -0
  136. package/dist/integrations/linear/source.js +248 -0
  137. package/dist/integrations/linear/source.js.map +1 -0
  138. package/dist/integrations/notion/index.d.ts +8 -0
  139. package/dist/integrations/notion/index.d.ts.map +1 -0
  140. package/dist/integrations/notion/index.js +8 -0
  141. package/dist/integrations/notion/index.js.map +1 -0
  142. package/dist/integrations/notion/source.d.ts +53 -0
  143. package/dist/integrations/notion/source.d.ts.map +1 -0
  144. package/dist/integrations/notion/source.js +463 -0
  145. package/dist/integrations/notion/source.js.map +1 -0
  146. package/dist/llm/api.d.ts +29 -0
  147. package/dist/llm/api.d.ts.map +1 -0
  148. package/dist/llm/api.js +152 -0
  149. package/dist/llm/api.js.map +1 -0
  150. package/dist/llm/index.d.ts +7 -0
  151. package/dist/llm/index.d.ts.map +1 -0
  152. package/dist/llm/index.js +7 -0
  153. package/dist/llm/index.js.map +1 -0
  154. package/dist/llm/providers.d.ts +24 -0
  155. package/dist/llm/providers.d.ts.map +1 -0
  156. package/dist/llm/providers.js +51 -0
  157. package/dist/llm/providers.js.map +1 -0
  158. package/dist/loop/__tests__/agents.test.d.ts +2 -0
  159. package/dist/loop/__tests__/agents.test.d.ts.map +1 -0
  160. package/dist/loop/__tests__/agents.test.js +183 -0
  161. package/dist/loop/__tests__/agents.test.js.map +1 -0
  162. package/dist/loop/__tests__/circuit-breaker.test.d.ts +2 -0
  163. package/dist/loop/__tests__/circuit-breaker.test.d.ts.map +1 -0
  164. package/dist/loop/__tests__/circuit-breaker.test.js +161 -0
  165. package/dist/loop/__tests__/circuit-breaker.test.js.map +1 -0
  166. package/dist/loop/__tests__/cost-tracker.test.d.ts +2 -0
  167. package/dist/loop/__tests__/cost-tracker.test.d.ts.map +1 -0
  168. package/dist/loop/__tests__/cost-tracker.test.js +200 -0
  169. package/dist/loop/__tests__/cost-tracker.test.js.map +1 -0
  170. package/dist/loop/__tests__/rate-limiter.test.d.ts +2 -0
  171. package/dist/loop/__tests__/rate-limiter.test.d.ts.map +1 -0
  172. package/dist/loop/__tests__/rate-limiter.test.js +198 -0
  173. package/dist/loop/__tests__/rate-limiter.test.js.map +1 -0
  174. package/dist/loop/__tests__/validation.test.d.ts +2 -0
  175. package/dist/loop/__tests__/validation.test.d.ts.map +1 -0
  176. package/dist/loop/__tests__/validation.test.js +234 -0
  177. package/dist/loop/__tests__/validation.test.js.map +1 -0
  178. package/dist/loop/agents.d.ts +26 -0
  179. package/dist/loop/agents.d.ts.map +1 -0
  180. package/dist/loop/agents.js +188 -0
  181. package/dist/loop/agents.js.map +1 -0
  182. package/dist/loop/circuit-breaker.d.ts +61 -0
  183. package/dist/loop/circuit-breaker.d.ts.map +1 -0
  184. package/dist/loop/circuit-breaker.js +143 -0
  185. package/dist/loop/circuit-breaker.js.map +1 -0
  186. package/dist/loop/cost-tracker.d.ts +90 -0
  187. package/dist/loop/cost-tracker.d.ts.map +1 -0
  188. package/dist/loop/cost-tracker.js +229 -0
  189. package/dist/loop/cost-tracker.js.map +1 -0
  190. package/dist/loop/estimator.d.ts +20 -0
  191. package/dist/loop/estimator.d.ts.map +1 -0
  192. package/dist/loop/estimator.js +123 -0
  193. package/dist/loop/estimator.js.map +1 -0
  194. package/dist/loop/executor.d.ts +44 -0
  195. package/dist/loop/executor.d.ts.map +1 -0
  196. package/dist/loop/executor.js +646 -0
  197. package/dist/loop/executor.js.map +1 -0
  198. package/dist/loop/progress.d.ts +34 -0
  199. package/dist/loop/progress.d.ts.map +1 -0
  200. package/dist/loop/progress.js +186 -0
  201. package/dist/loop/progress.js.map +1 -0
  202. package/dist/loop/rate-limiter.d.ts +71 -0
  203. package/dist/loop/rate-limiter.d.ts.map +1 -0
  204. package/dist/loop/rate-limiter.js +151 -0
  205. package/dist/loop/rate-limiter.js.map +1 -0
  206. package/dist/loop/semantic-analyzer.d.ts +33 -0
  207. package/dist/loop/semantic-analyzer.d.ts.map +1 -0
  208. package/dist/loop/semantic-analyzer.js +153 -0
  209. package/dist/loop/semantic-analyzer.js.map +1 -0
  210. package/dist/loop/skills.d.ts +29 -0
  211. package/dist/loop/skills.d.ts.map +1 -0
  212. package/dist/loop/skills.js +174 -0
  213. package/dist/loop/skills.js.map +1 -0
  214. package/dist/loop/step-detector.d.ts +17 -0
  215. package/dist/loop/step-detector.d.ts.map +1 -0
  216. package/dist/loop/step-detector.js +280 -0
  217. package/dist/loop/step-detector.js.map +1 -0
  218. package/dist/loop/task-counter.d.ts +41 -0
  219. package/dist/loop/task-counter.d.ts.map +1 -0
  220. package/dist/loop/task-counter.js +99 -0
  221. package/dist/loop/task-counter.js.map +1 -0
  222. package/dist/loop/validation.d.ts +28 -0
  223. package/dist/loop/validation.d.ts.map +1 -0
  224. package/dist/loop/validation.js +138 -0
  225. package/dist/loop/validation.js.map +1 -0
  226. package/dist/mcp/core/init.d.ts +15 -0
  227. package/dist/mcp/core/init.d.ts.map +1 -0
  228. package/dist/mcp/core/init.js +272 -0
  229. package/dist/mcp/core/init.js.map +1 -0
  230. package/dist/mcp/core/plan.d.ts +15 -0
  231. package/dist/mcp/core/plan.d.ts.map +1 -0
  232. package/dist/mcp/core/plan.js +90 -0
  233. package/dist/mcp/core/plan.js.map +1 -0
  234. package/dist/mcp/core/run.d.ts +26 -0
  235. package/dist/mcp/core/run.d.ts.map +1 -0
  236. package/dist/mcp/core/run.js +114 -0
  237. package/dist/mcp/core/run.js.map +1 -0
  238. package/dist/mcp/prompts.d.ts +10 -0
  239. package/dist/mcp/prompts.d.ts.map +1 -0
  240. package/dist/mcp/prompts.js +163 -0
  241. package/dist/mcp/prompts.js.map +1 -0
  242. package/dist/mcp/resources.d.ts +16 -0
  243. package/dist/mcp/resources.d.ts.map +1 -0
  244. package/dist/mcp/resources.js +114 -0
  245. package/dist/mcp/resources.js.map +1 -0
  246. package/dist/mcp/server.d.ts +10 -0
  247. package/dist/mcp/server.d.ts.map +1 -0
  248. package/dist/mcp/server.js +73 -0
  249. package/dist/mcp/server.js.map +1 -0
  250. package/dist/mcp/tools.d.ts +15 -0
  251. package/dist/mcp/tools.d.ts.map +1 -0
  252. package/dist/mcp/tools.js +316 -0
  253. package/dist/mcp/tools.js.map +1 -0
  254. package/dist/presets/index.d.ts +36 -0
  255. package/dist/presets/index.d.ts.map +1 -0
  256. package/dist/presets/index.js +236 -0
  257. package/dist/presets/index.js.map +1 -0
  258. package/dist/setup/agent-detector.d.ts +57 -0
  259. package/dist/setup/agent-detector.d.ts.map +1 -0
  260. package/dist/setup/agent-detector.js +170 -0
  261. package/dist/setup/agent-detector.js.map +1 -0
  262. package/dist/setup/index.d.ts +7 -0
  263. package/dist/setup/index.d.ts.map +1 -0
  264. package/dist/setup/index.js +7 -0
  265. package/dist/setup/index.js.map +1 -0
  266. package/dist/setup/llm-tester.d.ts +33 -0
  267. package/dist/setup/llm-tester.d.ts.map +1 -0
  268. package/dist/setup/llm-tester.js +105 -0
  269. package/dist/setup/llm-tester.js.map +1 -0
  270. package/dist/setup/wizard.d.ts +19 -0
  271. package/dist/setup/wizard.d.ts.map +1 -0
  272. package/dist/setup/wizard.js +313 -0
  273. package/dist/setup/wizard.js.map +1 -0
  274. package/dist/sources/__tests__/file.test.d.ts +2 -0
  275. package/dist/sources/__tests__/file.test.d.ts.map +1 -0
  276. package/dist/sources/__tests__/file.test.js +126 -0
  277. package/dist/sources/__tests__/file.test.js.map +1 -0
  278. package/dist/sources/__tests__/github.test.d.ts +2 -0
  279. package/dist/sources/__tests__/github.test.d.ts.map +1 -0
  280. package/dist/sources/__tests__/github.test.js +157 -0
  281. package/dist/sources/__tests__/github.test.js.map +1 -0
  282. package/dist/sources/base.d.ts +72 -0
  283. package/dist/sources/base.d.ts.map +1 -0
  284. package/dist/sources/base.js +127 -0
  285. package/dist/sources/base.js.map +1 -0
  286. package/dist/sources/builtin/file.d.ts +21 -0
  287. package/dist/sources/builtin/file.d.ts.map +1 -0
  288. package/dist/sources/builtin/file.js +129 -0
  289. package/dist/sources/builtin/file.js.map +1 -0
  290. package/dist/sources/builtin/github-scraper.d.ts +65 -0
  291. package/dist/sources/builtin/github-scraper.d.ts.map +1 -0
  292. package/dist/sources/builtin/github-scraper.js +324 -0
  293. package/dist/sources/builtin/github-scraper.js.map +1 -0
  294. package/dist/sources/builtin/pdf.d.ts +24 -0
  295. package/dist/sources/builtin/pdf.d.ts.map +1 -0
  296. package/dist/sources/builtin/pdf.js +174 -0
  297. package/dist/sources/builtin/pdf.js.map +1 -0
  298. package/dist/sources/builtin/url.d.ts +47 -0
  299. package/dist/sources/builtin/url.d.ts.map +1 -0
  300. package/dist/sources/builtin/url.js +429 -0
  301. package/dist/sources/builtin/url.js.map +1 -0
  302. package/dist/sources/config.d.ts +72 -0
  303. package/dist/sources/config.d.ts.map +1 -0
  304. package/dist/sources/config.js +215 -0
  305. package/dist/sources/config.js.map +1 -0
  306. package/dist/sources/index.d.ts +47 -0
  307. package/dist/sources/index.d.ts.map +1 -0
  308. package/dist/sources/index.js +210 -0
  309. package/dist/sources/index.js.map +1 -0
  310. package/dist/sources/integrations/github.d.ts +24 -0
  311. package/dist/sources/integrations/github.d.ts.map +1 -0
  312. package/dist/sources/integrations/github.js +193 -0
  313. package/dist/sources/integrations/github.js.map +1 -0
  314. package/dist/sources/integrations/linear.d.ts +18 -0
  315. package/dist/sources/integrations/linear.d.ts.map +1 -0
  316. package/dist/sources/integrations/linear.js +197 -0
  317. package/dist/sources/integrations/linear.js.map +1 -0
  318. package/dist/sources/integrations/notion.d.ts +39 -0
  319. package/dist/sources/integrations/notion.d.ts.map +1 -0
  320. package/dist/sources/integrations/notion.js +343 -0
  321. package/dist/sources/integrations/notion.js.map +1 -0
  322. package/dist/sources/integrations/todoist.d.ts +18 -0
  323. package/dist/sources/integrations/todoist.d.ts.map +1 -0
  324. package/dist/sources/integrations/todoist.js +154 -0
  325. package/dist/sources/integrations/todoist.js.map +1 -0
  326. package/dist/sources/types.d.ts +106 -0
  327. package/dist/sources/types.d.ts.map +1 -0
  328. package/dist/sources/types.js +9 -0
  329. package/dist/sources/types.js.map +1 -0
  330. package/dist/ui/index.d.ts +3 -0
  331. package/dist/ui/index.d.ts.map +1 -0
  332. package/dist/ui/index.js +3 -0
  333. package/dist/ui/index.js.map +1 -0
  334. package/dist/ui/progress-renderer.d.ts +54 -0
  335. package/dist/ui/progress-renderer.d.ts.map +1 -0
  336. package/dist/ui/progress-renderer.js +118 -0
  337. package/dist/ui/progress-renderer.js.map +1 -0
  338. package/dist/ui/shimmer.d.ts +16 -0
  339. package/dist/ui/shimmer.d.ts.map +1 -0
  340. package/dist/ui/shimmer.js +31 -0
  341. package/dist/ui/shimmer.js.map +1 -0
  342. package/dist/wizard/ascii-art.d.ts +93 -0
  343. package/dist/wizard/ascii-art.d.ts.map +1 -0
  344. package/dist/wizard/ascii-art.js +378 -0
  345. package/dist/wizard/ascii-art.js.map +1 -0
  346. package/dist/wizard/idea-prompts.d.ts +18 -0
  347. package/dist/wizard/idea-prompts.d.ts.map +1 -0
  348. package/dist/wizard/idea-prompts.js +154 -0
  349. package/dist/wizard/idea-prompts.js.map +1 -0
  350. package/dist/wizard/idea-ui.d.ts +34 -0
  351. package/dist/wizard/idea-ui.d.ts.map +1 -0
  352. package/dist/wizard/idea-ui.js +225 -0
  353. package/dist/wizard/idea-ui.js.map +1 -0
  354. package/dist/wizard/ideas.d.ts +27 -0
  355. package/dist/wizard/ideas.d.ts.map +1 -0
  356. package/dist/wizard/ideas.js +511 -0
  357. package/dist/wizard/ideas.js.map +1 -0
  358. package/dist/wizard/index.d.ts +11 -0
  359. package/dist/wizard/index.d.ts.map +1 -0
  360. package/dist/wizard/index.js +472 -0
  361. package/dist/wizard/index.js.map +1 -0
  362. package/dist/wizard/llm.d.ts +14 -0
  363. package/dist/wizard/llm.d.ts.map +1 -0
  364. package/dist/wizard/llm.js +420 -0
  365. package/dist/wizard/llm.js.map +1 -0
  366. package/dist/wizard/prompts.d.ts +75 -0
  367. package/dist/wizard/prompts.d.ts.map +1 -0
  368. package/dist/wizard/prompts.js +455 -0
  369. package/dist/wizard/prompts.js.map +1 -0
  370. package/dist/wizard/spec-generator.d.ts +14 -0
  371. package/dist/wizard/spec-generator.d.ts.map +1 -0
  372. package/dist/wizard/spec-generator.js +200 -0
  373. package/dist/wizard/spec-generator.js.map +1 -0
  374. package/dist/wizard/types.d.ts +53 -0
  375. package/dist/wizard/types.d.ts.map +1 -0
  376. package/dist/wizard/types.js +10 -0
  377. package/dist/wizard/types.js.map +1 -0
  378. package/dist/wizard/ui.d.ts +57 -0
  379. package/dist/wizard/ui.d.ts.map +1 -0
  380. package/dist/wizard/ui.js +211 -0
  381. package/dist/wizard/ui.js.map +1 -0
  382. package/package.json +59 -8
@@ -0,0 +1,80 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import chalk from 'chalk';
4
+ import { detectBestAgent, runAgent } from '../loop/agents.js';
5
+ import { detectStepFromOutput } from '../loop/step-detector.js';
6
+ import { ProgressRenderer } from '../ui/progress-renderer.js';
7
+ export async function planCommand(options) {
8
+ const cwd = process.cwd();
9
+ console.log();
10
+ console.log(chalk.cyan.bold('Ralph Planning Mode'));
11
+ console.log(chalk.dim('Analyzing specs and creating implementation plan'));
12
+ console.log();
13
+ // Check for Ralph Playbook files
14
+ const promptPlanPath = join(cwd, 'PROMPT_plan.md');
15
+ const specsDir = join(cwd, 'specs');
16
+ if (!existsSync(promptPlanPath)) {
17
+ console.log(chalk.red('Ralph Playbook not found.'));
18
+ console.log(chalk.dim('Run `ralph-starter init` first to set up the playbook files.'));
19
+ return;
20
+ }
21
+ if (!existsSync(specsDir)) {
22
+ console.log(chalk.yellow('No specs/ folder found.'));
23
+ console.log(chalk.dim('Create specs in the specs/ folder first.'));
24
+ return;
25
+ }
26
+ // Read planning prompt
27
+ const planPrompt = readFileSync(promptPlanPath, 'utf-8');
28
+ // Detect agent with progress
29
+ const detectProgress = new ProgressRenderer();
30
+ detectProgress.start('Detecting coding agent...');
31
+ const agent = await detectBestAgent();
32
+ if (!agent) {
33
+ detectProgress.fail('No coding agent found');
34
+ console.log(chalk.dim('Install Claude Code, Cursor, Codex, or OpenCode.'));
35
+ return;
36
+ }
37
+ detectProgress.stop(`Using ${agent.name}`);
38
+ console.log();
39
+ // Build the full prompt
40
+ const fullPrompt = `${planPrompt}
41
+
42
+ Please analyze the specs/ folder and update IMPLEMENTATION_PLAN.md with a prioritized task list.
43
+
44
+ Focus on:
45
+ 1. Reading all specification files in specs/
46
+ 2. Understanding the current codebase state
47
+ 3. Identifying gaps between specs and implementation
48
+ 4. Creating actionable, small tasks
49
+
50
+ Do not implement anything - only plan.`;
51
+ // Run the agent in planning mode with progress feedback
52
+ const planProgress = new ProgressRenderer();
53
+ planProgress.start('Planning...');
54
+ const result = await runAgent(agent, {
55
+ task: fullPrompt,
56
+ cwd,
57
+ auto: options.auto,
58
+ maxTurns: 10, // Increased from 5 for more complex projects
59
+ streamOutput: false, // Don't dump raw JSON
60
+ onOutput: (line) => {
61
+ const step = detectStepFromOutput(line);
62
+ if (step) {
63
+ planProgress.updateStep(step);
64
+ }
65
+ },
66
+ });
67
+ if (result.exitCode === 0) {
68
+ planProgress.stop('Planning complete');
69
+ console.log();
70
+ console.log(chalk.green(' Updated IMPLEMENTATION_PLAN.md'));
71
+ console.log();
72
+ console.log(chalk.yellow(' Next step:'));
73
+ console.log(chalk.gray(' ralph-starter run # Execute the plan'));
74
+ }
75
+ else {
76
+ planProgress.fail('Planning failed');
77
+ console.log(chalk.dim(result.output.slice(0, 500)));
78
+ }
79
+ }
80
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ export interface RunCommandOptions {
2
+ auto?: boolean;
3
+ commit?: boolean;
4
+ push?: boolean;
5
+ pr?: boolean;
6
+ validate?: boolean;
7
+ docker?: boolean;
8
+ prd?: string;
9
+ maxIterations?: number;
10
+ agent?: string;
11
+ from?: string;
12
+ project?: string;
13
+ label?: string;
14
+ status?: string;
15
+ limit?: number;
16
+ preset?: string;
17
+ completionPromise?: string;
18
+ requireExitSignal?: boolean;
19
+ rateLimit?: number;
20
+ trackProgress?: boolean;
21
+ trackCost?: boolean;
22
+ circuitBreakerFailures?: number;
23
+ circuitBreakerErrors?: number;
24
+ }
25
+ export declare function runCommand(task: string | undefined, options: RunCommandOptions): Promise<void>;
26
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAkEA,MAAM,WAAW,iBAAiB;IAChC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,EAAE,CAAC,EAAE,OAAO,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IAEf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAkVf"}
@@ -0,0 +1,351 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import chalk from 'chalk';
4
+ import { execa } from 'execa';
5
+ import inquirer from 'inquirer';
6
+ import ora from 'ora';
7
+ import { initGitRepo, isGitRepo } from '../automation/git.js';
8
+ import { detectAvailableAgents, detectBestAgent, printAgentStatus, } from '../loop/agents.js';
9
+ import { formatCost, formatTokens } from '../loop/cost-tracker.js';
10
+ import { runLoop } from '../loop/executor.js';
11
+ import { calculateOptimalIterations } from '../loop/task-counter.js';
12
+ import { formatPresetsHelp, getPreset } from '../presets/index.js';
13
+ import { fetchFromSource } from '../sources/index.js';
14
+ /**
15
+ * Detect how to run the project based on package.json scripts or common patterns
16
+ */
17
+ function detectRunCommand(cwd) {
18
+ // Check package.json for scripts
19
+ const packageJsonPath = join(cwd, 'package.json');
20
+ if (existsSync(packageJsonPath)) {
21
+ try {
22
+ const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
23
+ const scripts = pkg.scripts || {};
24
+ // Priority order for dev commands
25
+ if (scripts.dev) {
26
+ return { command: 'npm', args: ['run', 'dev'], description: 'npm run dev' };
27
+ }
28
+ if (scripts.start) {
29
+ return { command: 'npm', args: ['run', 'start'], description: 'npm run start' };
30
+ }
31
+ if (scripts.serve) {
32
+ return { command: 'npm', args: ['run', 'serve'], description: 'npm run serve' };
33
+ }
34
+ if (scripts.preview) {
35
+ return { command: 'npm', args: ['run', 'preview'], description: 'npm run preview' };
36
+ }
37
+ }
38
+ catch {
39
+ // Ignore parse errors
40
+ }
41
+ }
42
+ // Check for Python projects
43
+ if (existsSync(join(cwd, 'main.py'))) {
44
+ return { command: 'python', args: ['main.py'], description: 'python main.py' };
45
+ }
46
+ if (existsSync(join(cwd, 'app.py'))) {
47
+ return { command: 'python', args: ['app.py'], description: 'python app.py' };
48
+ }
49
+ // Check for Go projects
50
+ if (existsSync(join(cwd, 'main.go'))) {
51
+ return { command: 'go', args: ['run', 'main.go'], description: 'go run main.go' };
52
+ }
53
+ return null;
54
+ }
55
+ export async function runCommand(task, options) {
56
+ const cwd = process.cwd();
57
+ const spinner = ora();
58
+ console.log();
59
+ console.log(chalk.cyan.bold('ralph-starter'));
60
+ console.log(chalk.dim('Ralph Wiggum made easy'));
61
+ console.log();
62
+ // Check for git repo
63
+ if (options.commit || options.push || options.pr) {
64
+ const isRepo = await isGitRepo(cwd);
65
+ if (!isRepo) {
66
+ const { initGit } = await inquirer.prompt([
67
+ {
68
+ type: 'confirm',
69
+ name: 'initGit',
70
+ message: 'Git repo not found. Initialize one?',
71
+ default: true,
72
+ },
73
+ ]);
74
+ if (initGit) {
75
+ await initGitRepo(cwd);
76
+ console.log(chalk.green('Git repository initialized'));
77
+ }
78
+ else {
79
+ console.log(chalk.yellow('Git automation disabled (no repo)'));
80
+ options.commit = false;
81
+ options.push = false;
82
+ options.pr = false;
83
+ }
84
+ }
85
+ }
86
+ // Handle --from source
87
+ let sourceSpec = null;
88
+ if (options.from) {
89
+ spinner.start('Fetching spec from source...');
90
+ try {
91
+ const result = await fetchFromSource(options.from, {
92
+ project: options.project,
93
+ label: options.label,
94
+ status: options.status,
95
+ limit: options.limit,
96
+ });
97
+ spinner.succeed(`Fetched spec from ${result.source}`);
98
+ sourceSpec = result.content;
99
+ // Write to specs directory
100
+ const specsDir = join(cwd, 'specs');
101
+ if (!existsSync(specsDir)) {
102
+ mkdirSync(specsDir, { recursive: true });
103
+ }
104
+ const specFilename = result.title
105
+ ? `${result.title.toLowerCase().replace(/[^a-z0-9]+/g, '-')}.md`
106
+ : 'source-spec.md';
107
+ const specPath = join(specsDir, specFilename);
108
+ writeFileSync(specPath, sourceSpec);
109
+ console.log(chalk.dim(` Written to: ${specPath}`));
110
+ }
111
+ catch (error) {
112
+ spinner.fail('Failed to fetch from source');
113
+ console.error(chalk.red(error.message));
114
+ process.exit(1);
115
+ }
116
+ }
117
+ // Detect agent - use explicit selection or auto-detect best
118
+ let agent = null;
119
+ if (options.agent) {
120
+ // Explicit agent selection via --agent flag
121
+ spinner.start('Checking agent...');
122
+ const agents = await detectAvailableAgents();
123
+ const found = agents.find((a) => a.type === options.agent || a.name.toLowerCase() === options.agent?.toLowerCase());
124
+ spinner.stop();
125
+ if (!found || !found.available) {
126
+ console.log(chalk.red(`Agent "${options.agent}" not found or not available.`));
127
+ printAgentStatus(agents);
128
+ process.exit(1);
129
+ }
130
+ agent = found;
131
+ }
132
+ else {
133
+ // Auto-detect best agent (same as plan.ts)
134
+ spinner.start('Detecting coding agent...');
135
+ agent = await detectBestAgent();
136
+ spinner.stop();
137
+ if (!agent) {
138
+ console.log(chalk.red('No coding agents found!'));
139
+ console.log();
140
+ console.log(chalk.yellow('Please install one of these:'));
141
+ console.log(chalk.gray(' Claude Code: npm install -g @anthropic-ai/claude-code'));
142
+ console.log(chalk.gray(' Cursor: https://cursor.sh'));
143
+ console.log(chalk.gray(' Codex: npm install -g codex'));
144
+ console.log(chalk.gray(' OpenCode: npm install -g opencode'));
145
+ process.exit(1);
146
+ }
147
+ }
148
+ console.log(chalk.dim(`Using agent: ${agent.name}`));
149
+ // Check for Ralph Playbook files
150
+ const buildPromptPath = join(cwd, 'PROMPT_build.md');
151
+ const implementationPlanPath = join(cwd, 'IMPLEMENTATION_PLAN.md');
152
+ const hasPlaybook = existsSync(buildPromptPath) && existsSync(implementationPlanPath);
153
+ // Get task if not provided
154
+ let finalTask = task;
155
+ let isBuildMode = false;
156
+ // If we fetched from a source, use that as the task
157
+ if (sourceSpec && !finalTask) {
158
+ finalTask = `Build the following project based on this specification:
159
+
160
+ ${sourceSpec}
161
+
162
+ Analyze the specification and implement all required features. Create a proper project structure with all necessary files.`;
163
+ console.log(chalk.cyan('Using fetched specification as task'));
164
+ }
165
+ if (!finalTask && !options.prd) {
166
+ // Check for Ralph Playbook build mode
167
+ if (hasPlaybook) {
168
+ console.log(chalk.cyan('Ralph Playbook detected'));
169
+ console.log(chalk.dim('Using build mode from IMPLEMENTATION_PLAN.md'));
170
+ console.log();
171
+ // Read the build prompt and implementation plan
172
+ const buildPrompt = readFileSync(buildPromptPath, 'utf-8');
173
+ const implementationPlan = readFileSync(implementationPlanPath, 'utf-8');
174
+ finalTask = `${buildPrompt}
175
+
176
+ ## Current Implementation Plan
177
+
178
+ ${implementationPlan}
179
+
180
+ Work through the tasks in the implementation plan. Mark tasks as complete as you finish them.
181
+ Focus on one task at a time. After completing a task, update IMPLEMENTATION_PLAN.md.`;
182
+ isBuildMode = true;
183
+ }
184
+ else {
185
+ const { inputTask } = await inquirer.prompt([
186
+ {
187
+ type: 'input',
188
+ name: 'inputTask',
189
+ message: 'What would you like to build?',
190
+ validate: (input) => (input.trim() ? true : 'Please enter a task'),
191
+ },
192
+ ]);
193
+ finalTask = inputTask;
194
+ }
195
+ }
196
+ // Handle PRD file
197
+ if (options.prd) {
198
+ // TODO: Implement PRD parsing
199
+ console.log(chalk.yellow('PRD mode coming soon!'));
200
+ console.log(chalk.dim(`Would read tasks from: ${options.prd}`));
201
+ return;
202
+ }
203
+ if (!finalTask) {
204
+ console.log(chalk.red('No task provided.'));
205
+ console.log(chalk.dim('Either provide a task or run `ralph-starter init` to set up Ralph Playbook.'));
206
+ process.exit(1);
207
+ }
208
+ // Docker mode
209
+ if (options.docker) {
210
+ console.log(chalk.yellow('Docker sandbox mode coming soon!'));
211
+ return;
212
+ }
213
+ // Apply preset if specified
214
+ let preset;
215
+ if (options.preset) {
216
+ preset = getPreset(options.preset);
217
+ if (!preset) {
218
+ console.log(chalk.red(`Unknown preset: ${options.preset}`));
219
+ console.log();
220
+ console.log(formatPresetsHelp());
221
+ process.exit(1);
222
+ }
223
+ console.log(chalk.cyan(`Using preset: ${preset.name}`));
224
+ console.log(chalk.dim(preset.description));
225
+ }
226
+ // Run the loop
227
+ const prTitle = isBuildMode
228
+ ? 'Ralph: Implementation from plan'
229
+ : `Ralph: ${finalTask.slice(0, 50)}`;
230
+ // Calculate smart iterations based on tasks (if in build mode and no explicit override)
231
+ let smartIterations = 10; // default
232
+ if (isBuildMode && !options.maxIterations && !preset?.maxIterations) {
233
+ const { iterations, taskCount, reason } = calculateOptimalIterations(cwd);
234
+ smartIterations = iterations;
235
+ if (taskCount.total > 0) {
236
+ console.log(chalk.dim(`Tasks: ${taskCount.pending} pending, ${taskCount.completed} completed`));
237
+ console.log(chalk.dim(`Max iterations: ${iterations} (${reason})`));
238
+ }
239
+ }
240
+ // Apply preset values with CLI overrides
241
+ const loopOptions = {
242
+ task: preset?.promptPrefix ? `${preset.promptPrefix}\n\n${finalTask}` : finalTask,
243
+ cwd,
244
+ agent,
245
+ maxIterations: options.maxIterations ?? preset?.maxIterations ?? smartIterations,
246
+ auto: options.auto,
247
+ commit: options.commit ?? preset?.commit,
248
+ push: options.push,
249
+ pr: options.pr,
250
+ prTitle,
251
+ validate: options.validate ?? preset?.validate,
252
+ // New options
253
+ completionPromise: options.completionPromise ?? preset?.completionPromise,
254
+ requireExitSignal: options.requireExitSignal,
255
+ rateLimit: options.rateLimit ?? preset?.rateLimit,
256
+ trackProgress: options.trackProgress ?? true, // Default to true
257
+ trackCost: options.trackCost ?? true, // Default to true
258
+ model: agent.type === 'claude-code' ? 'claude-3-sonnet' : 'default',
259
+ checkFileCompletion: true, // Always check for file-based completion
260
+ circuitBreaker: preset?.circuitBreaker
261
+ ? {
262
+ maxConsecutiveFailures: options.circuitBreakerFailures ?? preset.circuitBreaker.maxConsecutiveFailures,
263
+ maxSameErrorCount: options.circuitBreakerErrors ?? preset.circuitBreaker.maxSameErrorCount,
264
+ }
265
+ : options.circuitBreakerFailures || options.circuitBreakerErrors
266
+ ? {
267
+ maxConsecutiveFailures: options.circuitBreakerFailures ?? 3,
268
+ maxSameErrorCount: options.circuitBreakerErrors ?? 5,
269
+ }
270
+ : undefined,
271
+ };
272
+ const result = await runLoop(loopOptions);
273
+ // Print summary
274
+ console.log();
275
+ if (result.success) {
276
+ console.log(chalk.green.bold('Loop completed!'));
277
+ console.log(chalk.dim(`Exit reason: ${result.exitReason}`));
278
+ console.log(chalk.dim(`Iterations: ${result.iterations}`));
279
+ if (result.commits.length > 0) {
280
+ console.log(chalk.dim(`Commits: ${result.commits.length}`));
281
+ }
282
+ if (result.stats) {
283
+ const durationSec = Math.round(result.stats.totalDuration / 1000);
284
+ console.log(chalk.dim(`Total duration: ${durationSec}s`));
285
+ if (result.stats.validationFailures > 0) {
286
+ console.log(chalk.dim(`Validation failures: ${result.stats.validationFailures}`));
287
+ }
288
+ if (result.stats.costStats) {
289
+ const cost = result.stats.costStats;
290
+ console.log(chalk.dim(`Total cost: ${formatCost(cost.totalCost.totalCost)} (${formatTokens(cost.totalTokens.totalTokens)} tokens)`));
291
+ }
292
+ }
293
+ // Offer to run the project
294
+ const runCmd = detectRunCommand(cwd);
295
+ if (runCmd) {
296
+ console.log();
297
+ const { shouldRun } = await inquirer.prompt([
298
+ {
299
+ type: 'confirm',
300
+ name: 'shouldRun',
301
+ message: `Run the project with ${chalk.cyan(runCmd.description)}?`,
302
+ default: true,
303
+ },
304
+ ]);
305
+ if (shouldRun) {
306
+ console.log();
307
+ console.log(chalk.cyan(`Starting: ${runCmd.description}`));
308
+ console.log(chalk.dim('Press Ctrl+C to stop'));
309
+ console.log();
310
+ try {
311
+ // Run with stdio inherited so user can see output and interact
312
+ await execa(runCmd.command, runCmd.args, {
313
+ cwd,
314
+ stdio: 'inherit',
315
+ });
316
+ }
317
+ catch (error) {
318
+ // User likely pressed Ctrl+C, which is expected
319
+ if (error &&
320
+ typeof error === 'object' &&
321
+ 'signal' in error &&
322
+ error.signal === 'SIGINT') {
323
+ console.log();
324
+ console.log(chalk.dim('Stopped.'));
325
+ }
326
+ else {
327
+ console.log(chalk.yellow('Process exited'));
328
+ }
329
+ }
330
+ }
331
+ }
332
+ }
333
+ else {
334
+ // Check if it's a rate limit issue (already shown detailed message in executor)
335
+ const isRateLimit = result.error?.includes('Rate limit');
336
+ if (!isRateLimit) {
337
+ // Only show generic failure for non-rate-limit errors
338
+ console.log(chalk.red.bold('Loop failed'));
339
+ console.log(chalk.dim(`Exit reason: ${result.exitReason}`));
340
+ if (result.error) {
341
+ console.log(chalk.dim(result.error));
342
+ }
343
+ if (result.stats?.circuitBreakerStats) {
344
+ const cb = result.stats.circuitBreakerStats;
345
+ console.log(chalk.dim(`Circuit breaker: ${cb.consecutiveFailures} consecutive failures, ${cb.uniqueErrors} unique errors`));
346
+ }
347
+ }
348
+ // Rate limit message was already shown in executor
349
+ }
350
+ }
351
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ interface ScaffoldOptions {
2
+ name?: string;
3
+ typescript?: boolean;
4
+ run?: boolean;
5
+ auto?: boolean;
6
+ }
7
+ export declare function scaffoldCommand(template: string, options: ScaffoldOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=scaffold.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.d.ts","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"AAWA,UAAU,eAAe;IACvB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAcD,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmG/F"}
@@ -0,0 +1,128 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync, readdirSync } from 'fs';
2
+ import { join, dirname } from 'path';
3
+ import { fileURLToPath } from 'url';
4
+ import inquirer from 'inquirer';
5
+ import chalk from 'chalk';
6
+ import ora from 'ora';
7
+ import Handlebars from 'handlebars';
8
+ const __dirname = dirname(fileURLToPath(import.meta.url));
9
+ const TEMPLATES_DIR = join(__dirname, '..', '..', 'templates');
10
+ export async function scaffoldCommand(template, options) {
11
+ const spinner = ora();
12
+ // Check if template exists
13
+ const templatePath = join(TEMPLATES_DIR, template);
14
+ if (!existsSync(templatePath)) {
15
+ const available = getAvailableTemplates();
16
+ console.log(chalk.red(`Template "${template}" not found.`));
17
+ console.log();
18
+ console.log(chalk.yellow('Available templates:'));
19
+ available.forEach(t => console.log(chalk.gray(` - ${t}`)));
20
+ process.exit(1);
21
+ }
22
+ // Load template config
23
+ const configPath = join(templatePath, 'ralph.yaml');
24
+ let templateConfig = { name: template, description: '' };
25
+ if (existsSync(configPath)) {
26
+ // For now, we'll use a simple JSON config instead of YAML
27
+ // TODO: Add yaml parsing
28
+ }
29
+ // Get project name
30
+ let projectName = options.name;
31
+ if (!projectName && !options.auto) {
32
+ const answers = await inquirer.prompt([
33
+ {
34
+ type: 'input',
35
+ name: 'projectName',
36
+ message: 'Project name:',
37
+ default: `my-${template}-app`,
38
+ validate: (input) => {
39
+ if (!input.trim())
40
+ return 'Project name is required';
41
+ if (existsSync(input))
42
+ return 'Directory already exists';
43
+ return true;
44
+ }
45
+ }
46
+ ]);
47
+ projectName = answers.projectName;
48
+ }
49
+ projectName = projectName || `my-${template}-app`;
50
+ // Check if directory exists
51
+ if (existsSync(projectName)) {
52
+ console.log(chalk.red(`Directory "${projectName}" already exists.`));
53
+ process.exit(1);
54
+ }
55
+ // Gather template variables
56
+ const variables = {
57
+ projectName,
58
+ typescript: options.typescript !== false,
59
+ };
60
+ // TODO: Ask template-specific questions from ralph.yaml
61
+ console.log();
62
+ console.log(chalk.cyan(`Creating ${template} project: ${chalk.bold(projectName)}`));
63
+ console.log();
64
+ // Create project directory
65
+ spinner.start('Creating project directory...');
66
+ mkdirSync(projectName, { recursive: true });
67
+ spinner.succeed('Project directory created');
68
+ // Copy template files
69
+ spinner.start('Copying template files...');
70
+ const templateFilesPath = join(templatePath, 'template');
71
+ if (existsSync(templateFilesPath)) {
72
+ copyTemplateDir(templateFilesPath, projectName, variables);
73
+ }
74
+ spinner.succeed('Template files copied');
75
+ // Copy .claude folder if it exists (with template processing)
76
+ const claudeConfigPath = join(templatePath, '.claude');
77
+ if (existsSync(claudeConfigPath)) {
78
+ spinner.start('Setting up Claude Code configuration...');
79
+ mkdirSync(join(projectName, '.claude'), { recursive: true });
80
+ copyTemplateDir(claudeConfigPath, join(projectName, '.claude'), variables);
81
+ spinner.succeed('Claude Code configuration ready');
82
+ }
83
+ console.log();
84
+ console.log(chalk.green('Project created successfully!'));
85
+ console.log();
86
+ console.log(chalk.yellow('Next steps:'));
87
+ console.log(chalk.gray(` cd ${projectName}`));
88
+ console.log(chalk.gray(' npm install'));
89
+ console.log(chalk.gray(' ralph-starter run # Start Claude Code loop'));
90
+ console.log();
91
+ // Optionally start the loop
92
+ if (options.run) {
93
+ const { runLoop } = await import('./run.js');
94
+ await runLoop(projectName, {});
95
+ }
96
+ }
97
+ function getAvailableTemplates() {
98
+ if (!existsSync(TEMPLATES_DIR)) {
99
+ return [];
100
+ }
101
+ return readdirSync(TEMPLATES_DIR, { withFileTypes: true })
102
+ .filter(dirent => dirent.isDirectory())
103
+ .map(dirent => dirent.name);
104
+ }
105
+ function copyTemplateDir(src, dest, variables) {
106
+ const entries = readdirSync(src, { withFileTypes: true });
107
+ for (const entry of entries) {
108
+ const srcPath = join(src, entry.name);
109
+ const destPath = join(dest, entry.name);
110
+ if (entry.isDirectory()) {
111
+ mkdirSync(destPath, { recursive: true });
112
+ copyTemplateDir(srcPath, destPath, variables);
113
+ }
114
+ else {
115
+ // Process template variables in file content
116
+ let content = readFileSync(srcPath, 'utf-8');
117
+ // Only process .hbs files or files that contain handlebars syntax
118
+ if (entry.name.endsWith('.hbs') || content.includes('{{')) {
119
+ const template = Handlebars.compile(content);
120
+ content = template(variables);
121
+ }
122
+ // Remove .hbs extension if present
123
+ const finalPath = destPath.replace(/\.hbs$/, '');
124
+ writeFileSync(finalPath, content);
125
+ }
126
+ }
127
+ }
128
+ //# sourceMappingURL=scaffold.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffold.js","sourceRoot":"","sources":["../../src/commands/scaffold.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Setup command for ralph-starter
3
+ * Interactive setup wizard to configure LLM and agents
4
+ */
5
+ export interface SetupCommandOptions {
6
+ force?: boolean;
7
+ }
8
+ /**
9
+ * Run the setup command
10
+ */
11
+ export declare function setupCommand(options: SetupCommandOptions): Promise<void>;
12
+ //# sourceMappingURL=setup.d.ts.map