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,455 @@
1
+ import inquirer from 'inquirer';
2
+ /**
3
+ * Ask if user has an idea or needs help brainstorming
4
+ * @param isExistingProject - If true, show option to improve existing project
5
+ * @param isRalphProject - If true (and isExistingProject), project has Ralph files
6
+ */
7
+ export async function askHasIdea(options) {
8
+ const choices = [];
9
+ // If in an existing project, show improve option first
10
+ if (options?.isExistingProject) {
11
+ const projectLabel = options.isRalphProject
12
+ ? 'Improve this Ralph project'
13
+ : 'Improve this existing project';
14
+ choices.push({
15
+ name: `${projectLabel} → (add features, fix issues, or get suggestions)`,
16
+ value: 'improve_existing',
17
+ });
18
+ }
19
+ choices.push({ name: 'Yes, I know what I want to build', value: 'has_idea' }, { name: 'No, help me brainstorm ideas', value: 'need_help' });
20
+ const { hasIdea } = await inquirer.prompt([
21
+ {
22
+ type: 'list',
23
+ name: 'hasIdea',
24
+ message: options?.isExistingProject
25
+ ? 'What would you like to do?'
26
+ : 'Do you have a project idea?',
27
+ choices,
28
+ },
29
+ ]);
30
+ return hasIdea;
31
+ }
32
+ export async function askImproveAction() {
33
+ console.log();
34
+ const { action } = await inquirer.prompt([
35
+ {
36
+ type: 'list',
37
+ name: 'action',
38
+ message: 'How would you like to improve this project?',
39
+ choices: [
40
+ {
41
+ name: 'Give specific instructions → (describe what you want to change)',
42
+ short: 'Instructions',
43
+ value: 'prompt',
44
+ },
45
+ {
46
+ name: 'Analyze and suggest improvements → (AI reviews code and suggests)',
47
+ short: 'Analyze',
48
+ value: 'analyze',
49
+ },
50
+ ],
51
+ },
52
+ ]);
53
+ return action;
54
+ }
55
+ /**
56
+ * Ask for improvement instructions
57
+ */
58
+ export async function askImprovementPrompt() {
59
+ const { prompt } = await inquirer.prompt([
60
+ {
61
+ type: 'input',
62
+ name: 'prompt',
63
+ message: 'What would you like to change or add?',
64
+ suffix: '\n (e.g., "add dark mode", "fix the footer links", "improve performance")\n >',
65
+ validate: (input) => input.trim().length > 0 ? true : 'Please describe what you want to improve',
66
+ },
67
+ ]);
68
+ return prompt.trim();
69
+ }
70
+ /**
71
+ * Ask for the user's idea
72
+ */
73
+ export async function askForIdea() {
74
+ const { idea } = await inquirer.prompt([
75
+ {
76
+ type: 'input',
77
+ name: 'idea',
78
+ message: "What's your idea for today?",
79
+ suffix: '\n (e.g., "a habit tracker app" or "an API for managing recipes")\n >',
80
+ validate: (input) => (input.trim().length > 0 ? true : 'Please describe your idea'),
81
+ },
82
+ ]);
83
+ return idea.trim();
84
+ }
85
+ /**
86
+ * Ask for project type if not detected
87
+ */
88
+ export async function askForProjectType(suggestedType) {
89
+ const choices = [
90
+ { name: 'Web Application (React, Next.js, Vue, etc.)', value: 'web' },
91
+ { name: 'API / Backend Service', value: 'api' },
92
+ { name: 'Command Line Tool', value: 'cli' },
93
+ { name: 'Mobile App (React Native, etc.)', value: 'mobile' },
94
+ { name: 'Library / Package', value: 'library' },
95
+ { name: 'Automation Script', value: 'automation' },
96
+ ];
97
+ // Move suggested type to top
98
+ if (suggestedType) {
99
+ const idx = choices.findIndex((c) => c.value === suggestedType);
100
+ if (idx > 0) {
101
+ const [choice] = choices.splice(idx, 1);
102
+ choice.name = `${choice.name} (Recommended)`;
103
+ choices.unshift(choice);
104
+ }
105
+ }
106
+ const { projectType } = await inquirer.prompt([
107
+ {
108
+ type: 'list',
109
+ name: 'projectType',
110
+ message: 'What type of project is this?',
111
+ choices,
112
+ },
113
+ ]);
114
+ return projectType;
115
+ }
116
+ /**
117
+ * Ask for tech stack preferences
118
+ */
119
+ export async function askForTechStack(projectType, suggestedStack) {
120
+ const stack = {};
121
+ // Frontend choice (for web/mobile)
122
+ if (projectType === 'web' || projectType === 'mobile') {
123
+ const frontendChoices = projectType === 'web'
124
+ ? [
125
+ { name: 'React', value: 'react' },
126
+ { name: 'Next.js', value: 'nextjs' },
127
+ { name: 'Vue', value: 'vue' },
128
+ { name: 'Svelte', value: 'svelte' },
129
+ { name: 'Vanilla JavaScript', value: 'vanilla' },
130
+ { name: 'Let AI decide', value: 'auto' },
131
+ ]
132
+ : [
133
+ { name: 'React Native', value: 'react-native' },
134
+ { name: 'Expo', value: 'expo' },
135
+ { name: 'Let AI decide', value: 'auto' },
136
+ ];
137
+ // Move suggested to top
138
+ if (suggestedStack?.frontend) {
139
+ const idx = frontendChoices.findIndex((c) => c.value === suggestedStack.frontend);
140
+ if (idx > 0) {
141
+ const [choice] = frontendChoices.splice(idx, 1);
142
+ choice.name = `${choice.name} (Recommended)`;
143
+ frontendChoices.unshift(choice);
144
+ }
145
+ }
146
+ const { frontend } = await inquirer.prompt([
147
+ {
148
+ type: 'list',
149
+ name: 'frontend',
150
+ message: projectType === 'web' ? 'What frontend framework?' : 'What mobile framework?',
151
+ choices: frontendChoices,
152
+ },
153
+ ]);
154
+ if (frontend !== 'auto') {
155
+ stack.frontend = frontend;
156
+ }
157
+ }
158
+ // Backend choice (for web/api)
159
+ if (projectType === 'web' || projectType === 'api') {
160
+ const backendChoices = [
161
+ { name: 'Node.js (Express/Fastify)', value: 'nodejs' },
162
+ { name: 'Python (FastAPI/Flask)', value: 'python' },
163
+ { name: 'Go', value: 'go' },
164
+ { name: 'No backend needed', value: 'none' },
165
+ { name: 'Let AI decide', value: 'auto' },
166
+ ];
167
+ if (suggestedStack?.backend) {
168
+ const idx = backendChoices.findIndex((c) => c.value === suggestedStack.backend);
169
+ if (idx > 0) {
170
+ const [choice] = backendChoices.splice(idx, 1);
171
+ choice.name = `${choice.name} (Recommended)`;
172
+ backendChoices.unshift(choice);
173
+ }
174
+ }
175
+ const { backend } = await inquirer.prompt([
176
+ {
177
+ type: 'list',
178
+ name: 'backend',
179
+ message: 'What backend/server?',
180
+ choices: backendChoices,
181
+ },
182
+ ]);
183
+ if (backend !== 'auto' && backend !== 'none') {
184
+ stack.backend = backend;
185
+ }
186
+ }
187
+ // Database choice
188
+ if (projectType !== 'cli' && projectType !== 'library') {
189
+ const dbChoices = [
190
+ { name: 'SQLite (Simple, file-based)', value: 'sqlite' },
191
+ { name: 'PostgreSQL', value: 'postgres' },
192
+ { name: 'MongoDB', value: 'mongodb' },
193
+ { name: 'No database needed', value: 'none' },
194
+ { name: 'Let AI decide', value: 'auto' },
195
+ ];
196
+ if (suggestedStack?.database) {
197
+ const idx = dbChoices.findIndex((c) => c.value === suggestedStack.database);
198
+ if (idx > 0) {
199
+ const [choice] = dbChoices.splice(idx, 1);
200
+ choice.name = `${choice.name} (Recommended)`;
201
+ dbChoices.unshift(choice);
202
+ }
203
+ }
204
+ const { database } = await inquirer.prompt([
205
+ {
206
+ type: 'list',
207
+ name: 'database',
208
+ message: 'How should it store data?',
209
+ choices: dbChoices,
210
+ },
211
+ ]);
212
+ if (database !== 'auto' && database !== 'none') {
213
+ stack.database = database;
214
+ }
215
+ }
216
+ return stack;
217
+ }
218
+ /**
219
+ * Ask user to select features
220
+ */
221
+ export async function askForFeatures(coreFeatures, suggestedFeatures) {
222
+ const allFeatures = [...new Set([...coreFeatures, ...suggestedFeatures])];
223
+ if (allFeatures.length === 0) {
224
+ return [];
225
+ }
226
+ const { selectedFeatures } = await inquirer.prompt([
227
+ {
228
+ type: 'checkbox',
229
+ name: 'selectedFeatures',
230
+ message: 'Which features do you want to include?',
231
+ choices: allFeatures.map((f) => ({
232
+ name: f,
233
+ checked: coreFeatures.includes(f), // Pre-check core features
234
+ })),
235
+ },
236
+ ]);
237
+ return selectedFeatures;
238
+ }
239
+ /**
240
+ * Ask for project complexity
241
+ */
242
+ export async function askForComplexity(suggestedComplexity) {
243
+ const choices = [
244
+ {
245
+ name: 'Quick Prototype - Basic functionality, minimal polish',
246
+ value: 'prototype',
247
+ },
248
+ {
249
+ name: 'Working MVP - Core features, ready to use',
250
+ value: 'mvp',
251
+ },
252
+ {
253
+ name: 'Full Featured - Complete implementation',
254
+ value: 'full',
255
+ },
256
+ ];
257
+ if (suggestedComplexity) {
258
+ const idx = choices.findIndex((c) => c.value === suggestedComplexity);
259
+ if (idx > 0) {
260
+ const [choice] = choices.splice(idx, 1);
261
+ choice.name = `${choice.name} (Recommended)`;
262
+ choices.unshift(choice);
263
+ }
264
+ }
265
+ const { complexity } = await inquirer.prompt([
266
+ {
267
+ type: 'list',
268
+ name: 'complexity',
269
+ message: 'How comprehensive should the implementation be?',
270
+ choices,
271
+ },
272
+ ]);
273
+ return complexity;
274
+ }
275
+ /**
276
+ * Confirm the refined plan
277
+ */
278
+ export async function confirmPlan() {
279
+ const { action } = await inquirer.prompt([
280
+ {
281
+ type: 'list',
282
+ name: 'action',
283
+ message: 'Does this look right?',
284
+ choices: [
285
+ { name: "Yes, let's build it!", value: 'proceed' },
286
+ { name: 'I want to change something', value: 'modify' },
287
+ { name: 'Start over with a different idea', value: 'restart' },
288
+ ],
289
+ },
290
+ ]);
291
+ return action;
292
+ }
293
+ /**
294
+ * Ask what to modify
295
+ */
296
+ export async function askWhatToModify() {
297
+ const { modify } = await inquirer.prompt([
298
+ {
299
+ type: 'list',
300
+ name: 'modify',
301
+ message: 'What would you like to change?',
302
+ choices: [
303
+ { name: 'Project type', value: 'type' },
304
+ { name: 'Tech stack', value: 'stack' },
305
+ { name: 'Features', value: 'features' },
306
+ { name: 'Complexity level', value: 'complexity' },
307
+ ],
308
+ },
309
+ ]);
310
+ return modify;
311
+ }
312
+ /**
313
+ * Ask for execution options
314
+ */
315
+ export async function askExecutionOptions() {
316
+ console.log();
317
+ const { autoRun } = await inquirer.prompt([
318
+ {
319
+ type: 'list',
320
+ name: 'autoRun',
321
+ message: 'How should we proceed?',
322
+ choices: [
323
+ {
324
+ name: 'Start building automatically → (AI runs immediately after setup)',
325
+ short: 'Build now',
326
+ value: true,
327
+ },
328
+ {
329
+ name: 'Just create the plan → (run "ralph-starter run" later)',
330
+ short: 'Plan only',
331
+ value: false,
332
+ },
333
+ ],
334
+ },
335
+ ]);
336
+ let autoCommit = false;
337
+ if (autoRun) {
338
+ const { commit } = await inquirer.prompt([
339
+ {
340
+ type: 'confirm',
341
+ name: 'commit',
342
+ message: 'Auto-commit changes as we build? (creates git history)',
343
+ default: false,
344
+ },
345
+ ]);
346
+ autoCommit = commit;
347
+ }
348
+ return { autoRun, autoCommit };
349
+ }
350
+ /**
351
+ * Ask for working directory
352
+ */
353
+ export async function askWorkingDirectory(suggestedName) {
354
+ const defaultDir = `./${suggestedName.toLowerCase().replace(/\s+/g, '-')}`;
355
+ const { directory } = await inquirer.prompt([
356
+ {
357
+ type: 'input',
358
+ name: 'directory',
359
+ message: 'Where should we create the project?',
360
+ default: defaultDir,
361
+ validate: (input) => {
362
+ if (!input.trim())
363
+ return 'Please enter a directory';
364
+ return true;
365
+ },
366
+ },
367
+ ]);
368
+ return directory;
369
+ }
370
+ export async function askExistingProjectAction(projectInfo) {
371
+ const projectTypeLabel = projectInfo.type === 'unknown' ? 'project' : projectInfo.type;
372
+ console.log();
373
+ const { action } = await inquirer.prompt([
374
+ {
375
+ type: 'list',
376
+ name: 'action',
377
+ message: `Found an existing ${projectTypeLabel} project. What would you like to do?`,
378
+ choices: [
379
+ {
380
+ name: 'Add features to this existing project',
381
+ short: 'Enhance existing',
382
+ value: 'enhance',
383
+ },
384
+ {
385
+ name: 'Create new project in a subfolder',
386
+ short: 'New subfolder',
387
+ value: 'subfolder',
388
+ },
389
+ {
390
+ name: 'Choose a different directory',
391
+ short: 'Different directory',
392
+ value: 'different',
393
+ },
394
+ ],
395
+ },
396
+ ]);
397
+ return action;
398
+ }
399
+ export async function askRalphPlaybookAction() {
400
+ console.log();
401
+ const { action } = await inquirer.prompt([
402
+ {
403
+ type: 'list',
404
+ name: 'action',
405
+ message: 'This project is already set up for Ralph. What would you like to do?',
406
+ choices: [
407
+ {
408
+ name: 'Continue working on this project → (run build, regenerate plan, or add specs)',
409
+ short: 'Continue',
410
+ value: 'continue',
411
+ },
412
+ {
413
+ name: 'Start fresh → (will overwrite AGENTS.md, specs/, and plans)',
414
+ short: 'Start fresh',
415
+ value: 'fresh',
416
+ },
417
+ {
418
+ name: 'Choose a different directory',
419
+ short: 'Different directory',
420
+ value: 'different',
421
+ },
422
+ ],
423
+ },
424
+ ]);
425
+ return action;
426
+ }
427
+ export async function askContinueAction() {
428
+ console.log();
429
+ const { action } = await inquirer.prompt([
430
+ {
431
+ type: 'list',
432
+ name: 'action',
433
+ message: 'What would you like to do?',
434
+ choices: [
435
+ {
436
+ name: 'Run the build loop → (AI will implement the plan)',
437
+ short: 'Build',
438
+ value: 'run',
439
+ },
440
+ {
441
+ name: 'Regenerate the implementation plan → (re-analyze specs)',
442
+ short: 'Plan',
443
+ value: 'plan',
444
+ },
445
+ {
446
+ name: 'Add a new spec to the project → (create new feature spec)',
447
+ short: 'Add spec',
448
+ value: 'add_spec',
449
+ },
450
+ ],
451
+ },
452
+ ]);
453
+ return action;
454
+ }
455
+ //# sourceMappingURL=prompts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.js","sourceRoot":"","sources":["../../src/wizard/prompts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { WizardAnswers } from './types.js';
2
+ /**
3
+ * Generate a spec markdown file from wizard answers
4
+ */
5
+ export declare function generateSpec(answers: WizardAnswers): string;
6
+ /**
7
+ * Generate AGENTS.md content based on tech stack
8
+ */
9
+ export declare function generateAgentsMd(answers: WizardAnswers): string;
10
+ /**
11
+ * Generate a sanitized filename from project name
12
+ */
13
+ export declare function sanitizeFilename(name: string): string;
14
+ //# sourceMappingURL=spec-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-generator.d.ts","sourceRoot":"","sources":["../../src/wizard/spec-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,YAAY,CAAC;AAG3D;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAwG3D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,aAAa,GAAG,MAAM,CAiE/D;AA+BD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOrD"}