ralph-starter 0.0.1 → 0.1.1-beta.1

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 +374 -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 +67 -8
@@ -0,0 +1,272 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { basename, join } from 'node:path';
3
+ import YAML from 'yaml';
4
+ import { detectBestAgent } from '../../loop/agents.js';
5
+ function detectProject(cwd) {
6
+ // Node.js
7
+ if (existsSync(join(cwd, 'package.json'))) {
8
+ try {
9
+ const pkg = JSON.parse(readFileSync(join(cwd, 'package.json'), 'utf-8'));
10
+ const scripts = pkg.scripts || {};
11
+ return {
12
+ type: 'nodejs',
13
+ name: pkg.name || basename(cwd),
14
+ testCmd: scripts.test ? 'npm test' : undefined,
15
+ buildCmd: scripts.build ? 'npm run build' : undefined,
16
+ lintCmd: scripts.lint ? 'npm run lint' : undefined,
17
+ };
18
+ }
19
+ catch {
20
+ return { type: 'nodejs', name: basename(cwd) };
21
+ }
22
+ }
23
+ // Python
24
+ if (existsSync(join(cwd, 'pyproject.toml')) || existsSync(join(cwd, 'setup.py'))) {
25
+ return {
26
+ type: 'python',
27
+ name: basename(cwd),
28
+ testCmd: 'pytest',
29
+ lintCmd: 'ruff check .',
30
+ };
31
+ }
32
+ // Rust
33
+ if (existsSync(join(cwd, 'Cargo.toml'))) {
34
+ return {
35
+ type: 'rust',
36
+ name: basename(cwd),
37
+ testCmd: 'cargo test',
38
+ buildCmd: 'cargo build',
39
+ lintCmd: 'cargo clippy',
40
+ };
41
+ }
42
+ // Go
43
+ if (existsSync(join(cwd, 'go.mod'))) {
44
+ return {
45
+ type: 'go',
46
+ name: basename(cwd),
47
+ testCmd: 'go test ./...',
48
+ buildCmd: 'go build ./...',
49
+ lintCmd: 'golangci-lint run',
50
+ };
51
+ }
52
+ return { type: 'unknown', name: basename(cwd) };
53
+ }
54
+ function generateAgentsMd(project) {
55
+ const validationCmds = [project.testCmd, project.buildCmd, project.lintCmd].filter(Boolean);
56
+ return `# AGENTS.md
57
+
58
+ This file defines how Ralph operates in this project.
59
+
60
+ ## Validation Commands
61
+
62
+ Run these after each task to ensure quality:
63
+
64
+ \`\`\`bash
65
+ ${validationCmds.length > 0 ? validationCmds.join('\n') : '# Add your test/build/lint commands here'}
66
+ \`\`\`
67
+
68
+ ## Build Instructions
69
+
70
+ ${project.type === 'nodejs' ? '1. Run `npm install` to install dependencies\n2. Run `npm run build` to build (if applicable)\n3. Run `npm test` to verify' : ''}
71
+ ${project.type === 'python' ? '1. Create virtual environment: `python -m venv venv`\n2. Install dependencies: `pip install -e .`\n3. Run tests: `pytest`' : ''}
72
+ ${project.type === 'rust' ? '1. Run `cargo build` to compile\n2. Run `cargo test` to verify' : ''}
73
+ ${project.type === 'go' ? '1. Run `go mod tidy` to sync dependencies\n2. Run `go build ./...` to compile\n3. Run `go test ./...` to verify' : ''}
74
+ ${project.type === 'unknown' ? '1. Add your build instructions here' : ''}
75
+
76
+ ## Code Patterns
77
+
78
+ - Follow existing code style
79
+ - Add tests for new functionality
80
+ - Keep functions small and focused
81
+ - Use meaningful names
82
+
83
+ ## Task Completion
84
+
85
+ A task is complete when:
86
+ 1. All validation commands pass
87
+ 2. Code is committed (if auto-commit enabled)
88
+ 3. No TODO comments left unaddressed
89
+ `;
90
+ }
91
+ function generatePromptBuild() {
92
+ return `# Building Mode
93
+
94
+ You are in BUILDING mode. Execute tasks from the implementation plan.
95
+
96
+ ## Process
97
+
98
+ 1. Read IMPLEMENTATION_PLAN.md for the current task
99
+ 2. Implement the task following patterns in AGENTS.md
100
+ 3. Run validation commands after each change
101
+ 4. If tests fail, fix the issues before moving on
102
+ 5. Mark the task as complete in IMPLEMENTATION_PLAN.md
103
+ 6. Move to the next task
104
+
105
+ ## Rules
106
+
107
+ - One task at a time
108
+ - Validate after each change
109
+ - Commit working code only
110
+ - Update the plan as you learn
111
+ - Only link to pages that exist - use "#" for placeholder links
112
+ - Use realistic placeholder data (names, dates, content)
113
+
114
+ ## Completion Signal
115
+
116
+ When all tasks are done, output: <TASK_DONE>
117
+ If blocked, output: <TASK_BLOCKED> with explanation
118
+ `;
119
+ }
120
+ function generatePromptPlan() {
121
+ return `# Planning Mode
122
+
123
+ You are in PLANNING mode. Analyze specs and create an implementation plan.
124
+
125
+ ## Process
126
+
127
+ 1. Read all files in specs/ folder
128
+ 2. Analyze existing codebase
129
+ 3. Identify gaps between specs and implementation
130
+ 4. Create prioritized task list in IMPLEMENTATION_PLAN.md
131
+
132
+ ## Task Format
133
+
134
+ Each task in IMPLEMENTATION_PLAN.md should have:
135
+ - [ ] Clear, actionable description
136
+ - Acceptance criteria
137
+ - Dependencies (if any)
138
+
139
+ ## Rules
140
+
141
+ - Do NOT implement anything
142
+ - Only analyze and plan
143
+ - Keep tasks small (< 30 min each)
144
+ - Order by dependencies
145
+
146
+ ## Output
147
+
148
+ Update IMPLEMENTATION_PLAN.md with the task list.
149
+ `;
150
+ }
151
+ function generateImplementationPlan() {
152
+ return `# Implementation Plan
153
+
154
+ > Auto-generated by Ralph. Update as tasks complete.
155
+
156
+ ## Status
157
+
158
+ - [ ] Task 1: (describe first task)
159
+ - [ ] Task 2: (describe second task)
160
+
161
+ ## Notes
162
+
163
+ Add discoveries and learnings here as you work.
164
+ `;
165
+ }
166
+ function generateExampleSpec(projectName) {
167
+ return `# ${projectName} Specification
168
+
169
+ ## Overview
170
+
171
+ Describe what this project does.
172
+
173
+ ## Features
174
+
175
+ ### Feature 1: (name)
176
+
177
+ Description of the feature.
178
+
179
+ **Acceptance Criteria:**
180
+ - [ ] Criterion 1
181
+ - [ ] Criterion 2
182
+
183
+ ### Feature 2: (name)
184
+
185
+ Description of the feature.
186
+
187
+ ## Technical Requirements
188
+
189
+ - List technical constraints
190
+ - Performance requirements
191
+ - Security considerations
192
+ `;
193
+ }
194
+ /**
195
+ * Core initialization logic without CLI dependencies
196
+ */
197
+ export async function initCore(options) {
198
+ const cwd = options.path;
199
+ const filesCreated = [];
200
+ try {
201
+ // Check if directory exists
202
+ if (!existsSync(cwd)) {
203
+ mkdirSync(cwd, { recursive: true });
204
+ }
205
+ // Check if already initialized
206
+ if (existsSync(join(cwd, 'AGENTS.md'))) {
207
+ return {
208
+ success: false,
209
+ path: cwd,
210
+ filesCreated: [],
211
+ error: 'Ralph Playbook files already exist',
212
+ };
213
+ }
214
+ // Detect project
215
+ const project = detectProject(cwd);
216
+ if (options.name) {
217
+ project.name = options.name;
218
+ }
219
+ // Detect agent
220
+ const agent = await detectBestAgent();
221
+ const agentType = agent?.type || 'claude-code';
222
+ // Create AGENTS.md
223
+ writeFileSync(join(cwd, 'AGENTS.md'), generateAgentsMd(project));
224
+ filesCreated.push('AGENTS.md');
225
+ // Create PROMPT files
226
+ writeFileSync(join(cwd, 'PROMPT_build.md'), generatePromptBuild());
227
+ filesCreated.push('PROMPT_build.md');
228
+ writeFileSync(join(cwd, 'PROMPT_plan.md'), generatePromptPlan());
229
+ filesCreated.push('PROMPT_plan.md');
230
+ // Create implementation plan
231
+ writeFileSync(join(cwd, 'IMPLEMENTATION_PLAN.md'), generateImplementationPlan());
232
+ filesCreated.push('IMPLEMENTATION_PLAN.md');
233
+ // Create specs folder with example
234
+ const specsDir = join(cwd, 'specs');
235
+ if (!existsSync(specsDir)) {
236
+ mkdirSync(specsDir, { recursive: true });
237
+ writeFileSync(join(specsDir, 'example.md'), generateExampleSpec(project.name));
238
+ filesCreated.push('specs/example.md');
239
+ }
240
+ // Create .ralph config
241
+ const ralphDir = join(cwd, '.ralph');
242
+ if (!existsSync(ralphDir)) {
243
+ mkdirSync(ralphDir, { recursive: true });
244
+ const config = {
245
+ agent: agentType,
246
+ auto_commit: true,
247
+ max_iterations: 50,
248
+ validation: {
249
+ test: project.testCmd || null,
250
+ build: project.buildCmd || null,
251
+ lint: project.lintCmd || null,
252
+ },
253
+ };
254
+ writeFileSync(join(ralphDir, 'config.yaml'), YAML.stringify(config));
255
+ filesCreated.push('.ralph/config.yaml');
256
+ }
257
+ return {
258
+ success: true,
259
+ path: cwd,
260
+ filesCreated,
261
+ };
262
+ }
263
+ catch (error) {
264
+ return {
265
+ success: false,
266
+ path: cwd,
267
+ filesCreated,
268
+ error: error.message,
269
+ };
270
+ }
271
+ }
272
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/mcp/core/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ export interface PlanCoreOptions {
2
+ path: string;
3
+ auto?: boolean;
4
+ }
5
+ export interface PlanCoreResult {
6
+ success: boolean;
7
+ planPath: string;
8
+ taskCount: number;
9
+ error?: string;
10
+ }
11
+ /**
12
+ * Core planning logic without CLI dependencies
13
+ */
14
+ export declare function planCore(options: PlanCoreOptions): Promise<PlanCoreResult>;
15
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/mcp/core/plan.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CA4FhF"}
@@ -0,0 +1,90 @@
1
+ import { existsSync, readFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { detectBestAgent, runAgent } from '../../loop/agents.js';
4
+ /**
5
+ * Core planning logic without CLI dependencies
6
+ */
7
+ export async function planCore(options) {
8
+ const cwd = options.path;
9
+ const planPath = join(cwd, 'IMPLEMENTATION_PLAN.md');
10
+ try {
11
+ // Check for Ralph Playbook files
12
+ const promptPlanPath = join(cwd, 'PROMPT_plan.md');
13
+ const specsDir = join(cwd, 'specs');
14
+ if (!existsSync(promptPlanPath)) {
15
+ return {
16
+ success: false,
17
+ planPath,
18
+ taskCount: 0,
19
+ error: 'Ralph Playbook not found. Run init first.',
20
+ };
21
+ }
22
+ if (!existsSync(specsDir)) {
23
+ return {
24
+ success: false,
25
+ planPath,
26
+ taskCount: 0,
27
+ error: 'No specs/ folder found. Create specs first.',
28
+ };
29
+ }
30
+ // Read planning prompt
31
+ const planPrompt = readFileSync(promptPlanPath, 'utf-8');
32
+ // Detect agent
33
+ const agent = await detectBestAgent();
34
+ if (!agent) {
35
+ return {
36
+ success: false,
37
+ planPath,
38
+ taskCount: 0,
39
+ error: 'No coding agent found.',
40
+ };
41
+ }
42
+ // Build the full prompt
43
+ const fullPrompt = `${planPrompt}
44
+
45
+ Please analyze the specs/ folder and update IMPLEMENTATION_PLAN.md with a prioritized task list.
46
+
47
+ Focus on:
48
+ 1. Reading all specification files in specs/
49
+ 2. Understanding the current codebase state
50
+ 3. Identifying gaps between specs and implementation
51
+ 4. Creating actionable, small tasks
52
+
53
+ Do not implement anything - only plan.`;
54
+ // Run the agent in planning mode
55
+ const result = await runAgent(agent, {
56
+ task: fullPrompt,
57
+ cwd,
58
+ auto: options.auto,
59
+ maxTurns: 5, // Limited turns for planning
60
+ });
61
+ if (result.exitCode !== 0) {
62
+ return {
63
+ success: false,
64
+ planPath,
65
+ taskCount: 0,
66
+ error: `Planning failed: ${result.output.slice(0, 200)}`,
67
+ };
68
+ }
69
+ // Count tasks in the plan
70
+ let taskCount = 0;
71
+ if (existsSync(planPath)) {
72
+ const planContent = readFileSync(planPath, 'utf-8');
73
+ taskCount = (planContent.match(/- \[[ x]\]/g) || []).length;
74
+ }
75
+ return {
76
+ success: true,
77
+ planPath,
78
+ taskCount,
79
+ };
80
+ }
81
+ catch (error) {
82
+ return {
83
+ success: false,
84
+ planPath,
85
+ taskCount: 0,
86
+ error: error.message,
87
+ };
88
+ }
89
+ }
90
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/mcp/core/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAcjE;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC;IACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;IAErD,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,gBAAgB,CAAC,CAAC;QACnD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAEpC,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,2CAA2C;aACnD,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,6CAA6C;aACrD,CAAC;QACJ,CAAC;QAED,uBAAuB;QACvB,MAAM,UAAU,GAAG,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;QAEzD,eAAe;QACf,MAAM,KAAK,GAAG,MAAM,eAAe,EAAE,CAAC;QAEtC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,wBAAwB;aAChC,CAAC;QACJ,CAAC;QAED,wBAAwB;QACxB,MAAM,UAAU,GAAG,GAAG,UAAU;;;;;;;;;;uCAUG,CAAC;QAEpC,iCAAiC;QACjC,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE;YACnC,IAAI,EAAE,UAAU;YAChB,GAAG;YACH,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,CAAC,EAAE,6BAA6B;SAC3C,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,QAAQ;gBACR,SAAS,EAAE,CAAC;gBACZ,KAAK,EAAE,oBAAoB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE;aACzD,CAAC;QACJ,CAAC;QAED,0BAA0B;QAC1B,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACpD,SAAS,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QAC9D,CAAC;QAED,OAAO;YACL,OAAO,EAAE,IAAI;YACb,QAAQ;YACR,SAAS;SACV,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,KAAK;YACd,QAAQ;YACR,SAAS,EAAE,CAAC;YACZ,KAAK,EAAG,KAAe,CAAC,OAAO;SAChC,CAAC;IACJ,CAAC;AACH,CAAC"}
@@ -0,0 +1,26 @@
1
+ export interface RunCoreOptions {
2
+ path: string;
3
+ task?: string;
4
+ auto?: boolean;
5
+ commit?: boolean;
6
+ push?: boolean;
7
+ pr?: boolean;
8
+ validate?: boolean;
9
+ maxIterations?: number;
10
+ from?: string;
11
+ project?: string;
12
+ label?: string;
13
+ status?: string;
14
+ limit?: number;
15
+ }
16
+ export interface RunCoreResult {
17
+ success: boolean;
18
+ iterations: number;
19
+ commits: string[];
20
+ error?: string;
21
+ }
22
+ /**
23
+ * Core run logic without CLI dependencies
24
+ */
25
+ export declare function runCore(options: RunCoreOptions): Promise<RunCoreResult>;
26
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/mcp/core/run.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,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,aAAa,CAAC,EAAE,MAAM,CAAC;IAEvB,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;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;GAEG;AACH,wBAAsB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAsH7E"}
@@ -0,0 +1,114 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { detectBestAgent } from '../../loop/agents.js';
4
+ import { runLoop } from '../../loop/executor.js';
5
+ import { fetchFromSource } from '../../sources/index.js';
6
+ /**
7
+ * Core run logic without CLI dependencies
8
+ */
9
+ export async function runCore(options) {
10
+ const cwd = options.path;
11
+ try {
12
+ // Handle --from source
13
+ let sourceSpec = null;
14
+ if (options.from) {
15
+ const result = await fetchFromSource(options.from, {
16
+ project: options.project,
17
+ label: options.label,
18
+ status: options.status,
19
+ limit: options.limit,
20
+ });
21
+ sourceSpec = result.content;
22
+ // Write to specs directory
23
+ const specsDir = join(cwd, 'specs');
24
+ if (!existsSync(specsDir)) {
25
+ mkdirSync(specsDir, { recursive: true });
26
+ }
27
+ const specFilename = result.title
28
+ ? `${result.title.toLowerCase().replace(/[^a-z0-9]+/g, '-')}.md`
29
+ : 'source-spec.md';
30
+ writeFileSync(join(specsDir, specFilename), sourceSpec);
31
+ }
32
+ // Detect agent
33
+ const agent = await detectBestAgent();
34
+ if (!agent) {
35
+ return {
36
+ success: false,
37
+ iterations: 0,
38
+ commits: [],
39
+ error: 'No coding agent found.',
40
+ };
41
+ }
42
+ // Check for Ralph Playbook files
43
+ const buildPromptPath = join(cwd, 'PROMPT_build.md');
44
+ const implementationPlanPath = join(cwd, 'IMPLEMENTATION_PLAN.md');
45
+ const hasPlaybook = existsSync(buildPromptPath) && existsSync(implementationPlanPath);
46
+ // Get task
47
+ let finalTask = options.task;
48
+ let isBuildMode = false;
49
+ // If we fetched from a source, use that as the task
50
+ if (sourceSpec && !finalTask) {
51
+ finalTask = `Build the following project based on this specification:
52
+
53
+ ${sourceSpec}
54
+
55
+ Analyze the specification and implement all required features. Create a proper project structure with all necessary files.`;
56
+ }
57
+ if (!finalTask) {
58
+ // Check for Ralph Playbook build mode
59
+ if (hasPlaybook) {
60
+ const buildPrompt = readFileSync(buildPromptPath, 'utf-8');
61
+ const implementationPlan = readFileSync(implementationPlanPath, 'utf-8');
62
+ finalTask = `${buildPrompt}
63
+
64
+ ## Current Implementation Plan
65
+
66
+ ${implementationPlan}
67
+
68
+ Work through the tasks in the implementation plan. Mark tasks as complete as you finish them.
69
+ Focus on one task at a time. After completing a task, update IMPLEMENTATION_PLAN.md.`;
70
+ isBuildMode = true;
71
+ }
72
+ else {
73
+ return {
74
+ success: false,
75
+ iterations: 0,
76
+ commits: [],
77
+ error: 'No task provided and no Ralph Playbook found.',
78
+ };
79
+ }
80
+ }
81
+ // Run the loop
82
+ const prTitle = isBuildMode
83
+ ? 'Ralph: Implementation from plan'
84
+ : `Ralph: ${finalTask.slice(0, 50)}`;
85
+ const loopOptions = {
86
+ task: finalTask,
87
+ cwd,
88
+ agent,
89
+ maxIterations: options.maxIterations || 50,
90
+ auto: options.auto,
91
+ commit: options.commit,
92
+ push: options.push,
93
+ pr: options.pr,
94
+ prTitle,
95
+ validate: options.validate,
96
+ };
97
+ const result = await runLoop(loopOptions);
98
+ return {
99
+ success: result.success,
100
+ iterations: result.iterations,
101
+ commits: result.commits,
102
+ error: result.error,
103
+ };
104
+ }
105
+ catch (error) {
106
+ return {
107
+ success: false,
108
+ iterations: 0,
109
+ commits: [],
110
+ error: error.message,
111
+ };
112
+ }
113
+ }
114
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/mcp/core/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ import type { GetPromptResult, Prompt } from '@modelcontextprotocol/sdk/types.js';
2
+ /**
3
+ * Pre-built workflow prompts for ralph-starter
4
+ */
5
+ export declare function getPrompts(): Prompt[];
6
+ /**
7
+ * Get a specific prompt with arguments filled in
8
+ */
9
+ export declare function handleGetPrompt(name: string, args?: Record<string, string>): GetPromptResult;
10
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../src/mcp/prompts.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAElF;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,EAAE,CA8DrC;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,eAAe,CAiG5F"}