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,46 @@
1
+ import { BaseOAuthProvider } from './base.js';
2
+ /**
3
+ * Linear OAuth Provider with PKCE Support
4
+ *
5
+ * Linear supports PKCE (Proof Key for Code Exchange) which allows
6
+ * public clients (like CLI apps) to authenticate without a client secret.
7
+ *
8
+ * Linear's OAuth flow:
9
+ * https://developers.linear.app/docs/oauth/authentication
10
+ *
11
+ * To configure ralph-starter's Linear OAuth app:
12
+ * 1. Go to https://linear.app/settings/api/applications
13
+ * 2. Create a new OAuth application
14
+ * 3. Set redirect URI to http://127.0.0.1:52847/callback
15
+ * 4. Copy the Client ID and set RALPH_LINEAR_CLIENT_ID env var
16
+ */
17
+ export class LinearOAuthProvider extends BaseOAuthProvider {
18
+ name = 'linear';
19
+ displayName = 'Linear';
20
+ authorizationUrl = 'https://linear.app/oauth/authorize';
21
+ tokenUrl = 'https://api.linear.app/oauth/token';
22
+ // Linear supports PKCE - no client secret needed!
23
+ supportsPKCE = true;
24
+ // Linear scopes
25
+ scopes = [
26
+ 'read', // Read access to all resources
27
+ ];
28
+ // Client ID - can be set via env var or use placeholder
29
+ // TODO: Replace with ralph-starter's registered app client ID after registration
30
+ clientId = process.env.RALPH_LINEAR_CLIENT_ID || '';
31
+ // Client secret is optional with PKCE
32
+ clientSecret = process.env.RALPH_LINEAR_CLIENT_SECRET;
33
+ authParams = {
34
+ prompt: 'consent', // Always show consent screen
35
+ actor: 'user', // Act as the authorizing user
36
+ };
37
+ /**
38
+ * Check if Linear OAuth is configured
39
+ * With PKCE, we only need the client_id (no secret required)
40
+ */
41
+ isConfigured() {
42
+ return !!this.clientId;
43
+ }
44
+ }
45
+ export const linearProvider = new LinearOAuthProvider();
46
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/auth/providers/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IACxD,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,QAAQ,CAAC;IACvB,gBAAgB,GAAG,oCAAoC,CAAC;IACxD,QAAQ,GAAG,oCAAoC,CAAC;IAEhD,kDAAkD;IAClD,YAAY,GAAG,IAAI,CAAC;IAEpB,gBAAgB;IAChB,MAAM,GAAG;QACP,MAAM,EAAE,+BAA+B;KACxC,CAAC;IAEF,wDAAwD;IACxD,iFAAiF;IACjF,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC;IAEpD,sCAAsC;IACtC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAEtD,UAAU,GAAG;QACX,MAAM,EAAE,SAAS,EAAE,6BAA6B;QAChD,KAAK,EAAE,MAAM,EAAE,8BAA8B;KAC9C,CAAC;IAEF;;;OAGG;IACH,YAAY;QACV,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC;IACzB,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { BaseOAuthProvider, type OAuthTokens } from './base.js';
2
+ /**
3
+ * Notion OAuth Provider
4
+ *
5
+ * Notion's OAuth flow requires a client secret (no PKCE support).
6
+ * For CLI apps, we recommend using manual API key configuration instead.
7
+ *
8
+ * https://developers.notion.com/docs/authorization
9
+ *
10
+ * Manual setup:
11
+ * 1. Go to https://www.notion.so/my-integrations
12
+ * 2. Create a new integration
13
+ * 3. Copy the Internal Integration Secret
14
+ * 4. Run: ralph-starter config set notion.apiKey <secret>
15
+ */
16
+ export declare class NotionOAuthProvider extends BaseOAuthProvider {
17
+ name: string;
18
+ displayName: string;
19
+ authorizationUrl: string;
20
+ tokenUrl: string;
21
+ supportsPKCE: boolean;
22
+ scopes: string[];
23
+ clientId: string;
24
+ clientSecret: string | undefined;
25
+ authParams: {
26
+ owner: string;
27
+ };
28
+ constructor();
29
+ /**
30
+ * Notion uses Basic auth for token exchange
31
+ */
32
+ exchangeCode(code: string, redirectUri: string): Promise<OAuthTokens>;
33
+ isConfigured(): boolean;
34
+ }
35
+ export declare const notionProvider: NotionOAuthProvider;
36
+ //# sourceMappingURL=notion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion.d.ts","sourceRoot":"","sources":["../../../src/auth/providers/notion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,IAAI,SAAY;IAChB,WAAW,SAAY;IACvB,gBAAgB,SAA+C;IAC/D,QAAQ,SAA2C;IAGnD,YAAY,UAAS;IAGrB,MAAM,EAAE,MAAM,EAAE,CAAM;IAItB,QAAQ,SAA4C;IACpD,YAAY,qBAA0C;IAEtD,UAAU;;MAER;;IAQF;;OAEG;IACG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAsC3E,YAAY,IAAI,OAAO;CAGxB;AAED,eAAO,MAAM,cAAc,qBAA4B,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { BaseOAuthProvider } from './base.js';
2
+ /**
3
+ * Notion OAuth Provider
4
+ *
5
+ * Notion's OAuth flow requires a client secret (no PKCE support).
6
+ * For CLI apps, we recommend using manual API key configuration instead.
7
+ *
8
+ * https://developers.notion.com/docs/authorization
9
+ *
10
+ * Manual setup:
11
+ * 1. Go to https://www.notion.so/my-integrations
12
+ * 2. Create a new integration
13
+ * 3. Copy the Internal Integration Secret
14
+ * 4. Run: ralph-starter config set notion.apiKey <secret>
15
+ */
16
+ export class NotionOAuthProvider extends BaseOAuthProvider {
17
+ name = 'notion';
18
+ displayName = 'Notion';
19
+ authorizationUrl = 'https://api.notion.com/v1/oauth/authorize';
20
+ tokenUrl = 'https://api.notion.com/v1/oauth/token';
21
+ // Notion doesn't support PKCE - requires client secret
22
+ supportsPKCE = false;
23
+ // Notion doesn't use traditional scopes, but the owner field determines access
24
+ scopes = [];
25
+ // Placeholder - users need to configure their own Notion integration
26
+ // or use ralph-starter's registered app
27
+ clientId = process.env.RALPH_NOTION_CLIENT_ID || '';
28
+ clientSecret = process.env.RALPH_NOTION_CLIENT_SECRET;
29
+ authParams = {
30
+ owner: 'user', // Request access to user's workspaces
31
+ };
32
+ constructor() {
33
+ super();
34
+ // Override clientSecret from env
35
+ this.clientSecret = process.env.RALPH_NOTION_CLIENT_SECRET;
36
+ }
37
+ /**
38
+ * Notion uses Basic auth for token exchange
39
+ */
40
+ async exchangeCode(code, redirectUri) {
41
+ if (!this.clientId || !this.clientSecret) {
42
+ throw new Error('Notion OAuth not configured. Set RALPH_NOTION_CLIENT_ID and RALPH_NOTION_CLIENT_SECRET environment variables.');
43
+ }
44
+ // Notion requires Basic auth with client_id:client_secret
45
+ const basicAuth = Buffer.from(`${this.clientId}:${this.clientSecret}`).toString('base64');
46
+ const response = await fetch(this.tokenUrl, {
47
+ method: 'POST',
48
+ headers: {
49
+ 'Content-Type': 'application/json',
50
+ Authorization: `Basic ${basicAuth}`,
51
+ 'Notion-Version': '2022-06-28',
52
+ },
53
+ body: JSON.stringify({
54
+ grant_type: 'authorization_code',
55
+ code,
56
+ redirect_uri: redirectUri,
57
+ }),
58
+ });
59
+ if (!response.ok) {
60
+ const error = await response.text();
61
+ throw new Error(`Failed to exchange Notion code: ${error}`);
62
+ }
63
+ const data = (await response.json());
64
+ return {
65
+ accessToken: data.access_token,
66
+ tokenType: 'Bearer',
67
+ // Notion tokens don't expire
68
+ };
69
+ }
70
+ isConfigured() {
71
+ return !!this.clientId && !!this.clientSecret;
72
+ }
73
+ }
74
+ export const notionProvider = new NotionOAuthProvider();
75
+ //# sourceMappingURL=notion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion.js","sourceRoot":"","sources":["../../../src/auth/providers/notion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,WAAW,CAAC;AAEhE;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,mBAAoB,SAAQ,iBAAiB;IACxD,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,QAAQ,CAAC;IACvB,gBAAgB,GAAG,2CAA2C,CAAC;IAC/D,QAAQ,GAAG,uCAAuC,CAAC;IAEnD,uDAAuD;IACvD,YAAY,GAAG,KAAK,CAAC;IAErB,+EAA+E;IAC/E,MAAM,GAAa,EAAE,CAAC;IAEtB,qEAAqE;IACrE,wCAAwC;IACxC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,IAAI,EAAE,CAAC;IACpD,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAEtD,UAAU,GAAG;QACX,KAAK,EAAE,MAAM,EAAE,sCAAsC;KACtD,CAAC;IAEF;QACE,KAAK,EAAE,CAAC;QACR,iCAAiC;QACjC,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC;IAC7D,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,IAAY,EAAE,WAAmB;QAClD,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CACb,+GAA+G,CAChH,CAAC;QACJ,CAAC;QAED,0DAA0D;QAC1D,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE1F,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE;YAC1C,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,SAAS,SAAS,EAAE;gBACnC,gBAAgB,EAAE,YAAY;aAC/B;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,UAAU,EAAE,oBAAoB;gBAChC,IAAI;gBACJ,YAAY,EAAE,WAAW;aAC1B,CAAC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,EAAE,CAAC,CAAC;QAC9D,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAA4B,CAAC;QAEhE,OAAO;YACL,WAAW,EAAE,IAAI,CAAC,YAAsB;YACxC,SAAS,EAAE,QAAQ;YACnB,6BAA6B;SAC9B,CAAC;IACJ,CAAC;IAED,YAAY;QACV,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IAChD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,mBAAmB,EAAE,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { BaseOAuthProvider } from './base.js';
2
+ /**
3
+ * Todoist OAuth Provider
4
+ *
5
+ * Todoist's OAuth flow requires a client secret (no PKCE support).
6
+ * For CLI apps, we recommend using manual API key configuration instead.
7
+ *
8
+ * https://developer.todoist.com/guides/#oauth
9
+ *
10
+ * Manual setup:
11
+ * 1. Go to https://todoist.com/prefs/integrations
12
+ * 2. Scroll to "API token" section
13
+ * 3. Copy your API token
14
+ * 4. Run: ralph-starter config set todoist.apiKey <token>
15
+ */
16
+ export declare class TodoistOAuthProvider extends BaseOAuthProvider {
17
+ name: string;
18
+ displayName: string;
19
+ authorizationUrl: string;
20
+ tokenUrl: string;
21
+ supportsPKCE: boolean;
22
+ scopes: string[];
23
+ clientId: string;
24
+ clientSecret: string | undefined;
25
+ constructor();
26
+ isConfigured(): boolean;
27
+ }
28
+ export declare const todoistProvider: TodoistOAuthProvider;
29
+ //# sourceMappingURL=todoist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todoist.d.ts","sourceRoot":"","sources":["../../../src/auth/providers/todoist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;;;;;;;;;;GAaG;AACH,qBAAa,oBAAqB,SAAQ,iBAAiB;IACzD,IAAI,SAAa;IACjB,WAAW,SAAa;IACxB,gBAAgB,SAAyC;IACzD,QAAQ,SAA4C;IAGpD,YAAY,UAAS;IAGrB,MAAM,WAEJ;IAIF,QAAQ,SAA6C;IACrD,YAAY,qBAA2C;;IAOvD,YAAY,IAAI,OAAO;CAGxB;AAED,eAAO,MAAM,eAAe,sBAA6B,CAAC"}
@@ -0,0 +1,40 @@
1
+ import { BaseOAuthProvider } from './base.js';
2
+ /**
3
+ * Todoist OAuth Provider
4
+ *
5
+ * Todoist's OAuth flow requires a client secret (no PKCE support).
6
+ * For CLI apps, we recommend using manual API key configuration instead.
7
+ *
8
+ * https://developer.todoist.com/guides/#oauth
9
+ *
10
+ * Manual setup:
11
+ * 1. Go to https://todoist.com/prefs/integrations
12
+ * 2. Scroll to "API token" section
13
+ * 3. Copy your API token
14
+ * 4. Run: ralph-starter config set todoist.apiKey <token>
15
+ */
16
+ export class TodoistOAuthProvider extends BaseOAuthProvider {
17
+ name = 'todoist';
18
+ displayName = 'Todoist';
19
+ authorizationUrl = 'https://todoist.com/oauth/authorize';
20
+ tokenUrl = 'https://todoist.com/oauth/access_token';
21
+ // Todoist doesn't support PKCE - requires client secret
22
+ supportsPKCE = false;
23
+ // Todoist scopes
24
+ scopes = [
25
+ 'data:read', // Read tasks, projects, labels, etc.
26
+ ];
27
+ // Placeholder - users need to configure their own Todoist app
28
+ // or use ralph-starter's registered app
29
+ clientId = process.env.RALPH_TODOIST_CLIENT_ID || '';
30
+ clientSecret = process.env.RALPH_TODOIST_CLIENT_SECRET;
31
+ constructor() {
32
+ super();
33
+ this.clientSecret = process.env.RALPH_TODOIST_CLIENT_SECRET;
34
+ }
35
+ isConfigured() {
36
+ return !!this.clientId && !!this.clientSecret;
37
+ }
38
+ }
39
+ export const todoistProvider = new TodoistOAuthProvider();
40
+ //# sourceMappingURL=todoist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todoist.js","sourceRoot":"","sources":["../../../src/auth/providers/todoist.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9C;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,oBAAqB,SAAQ,iBAAiB;IACzD,IAAI,GAAG,SAAS,CAAC;IACjB,WAAW,GAAG,SAAS,CAAC;IACxB,gBAAgB,GAAG,qCAAqC,CAAC;IACzD,QAAQ,GAAG,wCAAwC,CAAC;IAEpD,wDAAwD;IACxD,YAAY,GAAG,KAAK,CAAC;IAErB,iBAAiB;IACjB,MAAM,GAAG;QACP,WAAW,EAAE,qCAAqC;KACnD,CAAC;IAEF,8DAA8D;IAC9D,wCAAwC;IACxC,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,EAAE,CAAC;IACrD,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAEvD;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IAC9D,CAAC;IAED,YAAY;QACV,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC;IAChD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,oBAAoB,EAAE,CAAC"}
@@ -0,0 +1,15 @@
1
+ export declare function hasUncommittedChanges(cwd: string): Promise<boolean>;
2
+ export declare function gitCommit(cwd: string, message: string): Promise<void>;
3
+ export declare function gitPush(cwd: string, branch?: string): Promise<void>;
4
+ export declare function getCurrentBranch(cwd: string): Promise<string>;
5
+ export declare function createBranch(cwd: string, branchName: string): Promise<void>;
6
+ export interface PROptions {
7
+ title: string;
8
+ body: string;
9
+ base?: string;
10
+ }
11
+ export declare function createPullRequest(cwd: string, options: PROptions): Promise<string>;
12
+ export declare function isGitRepo(cwd: string): Promise<boolean>;
13
+ export declare function initGitRepo(cwd: string): Promise<void>;
14
+ export declare function getRecentCommits(cwd: string, count?: number): Promise<string[]>;
15
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/automation/git.ts"],"names":[],"mappings":"AAGA,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CASzE;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQ3E;AAED,wBAAsB,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAQzE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAInE;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAGjF;AAED,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAaxF;AAED,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS7D;AAED,wBAAsB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAG5D;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,GAAE,MAAU,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CASxF"}
@@ -0,0 +1,73 @@
1
+ import { execa } from 'execa';
2
+ import { simpleGit } from 'simple-git';
3
+ export async function hasUncommittedChanges(cwd) {
4
+ const git = simpleGit({ baseDir: cwd });
5
+ try {
6
+ const status = await git.status();
7
+ return !status.isClean();
8
+ }
9
+ catch {
10
+ return false;
11
+ }
12
+ }
13
+ export async function gitCommit(cwd, message) {
14
+ const git = simpleGit({ baseDir: cwd });
15
+ // Stage all changes
16
+ await git.add('.');
17
+ // Commit with message
18
+ await git.commit(message);
19
+ }
20
+ export async function gitPush(cwd, branch) {
21
+ const git = simpleGit({ baseDir: cwd });
22
+ if (branch) {
23
+ await git.push('origin', branch);
24
+ }
25
+ else {
26
+ await git.push();
27
+ }
28
+ }
29
+ export async function getCurrentBranch(cwd) {
30
+ const git = simpleGit({ baseDir: cwd });
31
+ const branch = await git.revparse(['--abbrev-ref', 'HEAD']);
32
+ return branch.trim();
33
+ }
34
+ export async function createBranch(cwd, branchName) {
35
+ const git = simpleGit({ baseDir: cwd });
36
+ await git.checkoutLocalBranch(branchName);
37
+ }
38
+ export async function createPullRequest(cwd, options) {
39
+ // Use GitHub CLI (gh) to create PR
40
+ const args = ['pr', 'create', '--title', options.title, '--body', options.body];
41
+ if (options.base) {
42
+ args.push('--base', options.base);
43
+ }
44
+ const result = await execa('gh', args, { cwd });
45
+ // Extract PR URL from output
46
+ const urlMatch = result.stdout.match(/https:\/\/github\.com\/[^\s]+/);
47
+ return urlMatch ? urlMatch[0] : result.stdout;
48
+ }
49
+ export async function isGitRepo(cwd) {
50
+ const git = simpleGit({ baseDir: cwd });
51
+ try {
52
+ await git.revparse(['--git-dir']);
53
+ return true;
54
+ }
55
+ catch {
56
+ return false;
57
+ }
58
+ }
59
+ export async function initGitRepo(cwd) {
60
+ const git = simpleGit({ baseDir: cwd });
61
+ await git.init();
62
+ }
63
+ export async function getRecentCommits(cwd, count = 5) {
64
+ const git = simpleGit({ baseDir: cwd });
65
+ try {
66
+ const log = await git.log({ maxCount: count });
67
+ return log.all.map((commit) => commit.message);
68
+ }
69
+ catch {
70
+ return [];
71
+ }
72
+ }
73
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/automation/git.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js CHANGED
@@ -1,20 +1,193 @@
1
1
  #!/usr/bin/env node
2
-
3
- console.log(`
4
- ╭─────────────────────────────────────────────────────────────╮
5
- │ │
6
- │ 🚀 ralph-starter v0.0.1 │
7
- │ │
8
- │ AI-powered project scaffolder for Claude Code loops │
9
- │ From idea to running loop in one conversation │
10
- │ │
11
- │ Coming soon: │
12
- │ • ralph-starter init - AI chat to define project │
13
- │ • ralph-starter new - Create from template │
14
- │ • ralph-starter skill - Install skills │
15
- │ • ralph-starter run - Execute the loop │
16
- │ │
17
- │ GitHub: https://github.com/rubenmarcus/ralph-starter │
18
- │ │
19
- ╰─────────────────────────────────────────────────────────────╯
20
- `);
2
+ import chalk from 'chalk';
3
+ import { Command } from 'commander';
4
+ import { authCommand } from './commands/auth.js';
5
+ import { checkCommand } from './commands/check.js';
6
+ import { configCommand } from './commands/config.js';
7
+ import { initCommand } from './commands/init.js';
8
+ import { integrationsCommand } from './commands/integrations.js';
9
+ import { planCommand } from './commands/plan.js';
10
+ import { runCommand } from './commands/run.js';
11
+ import { setupCommand } from './commands/setup.js';
12
+ import { skillCommand } from './commands/skill.js';
13
+ import { sourceCommand } from './commands/source.js';
14
+ import { startMcpServer } from './mcp/server.js';
15
+ import { formatPresetsHelp, getPresetNames } from './presets/index.js';
16
+ import { runIdeaMode, runWizard } from './wizard/index.js';
17
+ const VERSION = '0.1.0';
18
+ const program = new Command();
19
+ const banner = `
20
+ ${chalk.cyan('╭─────────────────────────────────────────────────────────────╮')}
21
+ ${chalk.cyan('│')} ${chalk.cyan('│')}
22
+ ${chalk.cyan('│')} ${chalk.bold.white('ralph-starter')} ${chalk.gray(`v${VERSION}`)} ${chalk.cyan('│')}
23
+ ${chalk.cyan('│')} ${chalk.cyan('│')}
24
+ ${chalk.cyan('│')} ${chalk.dim('Ralph Wiggum made easy.')} ${chalk.cyan('│')}
25
+ ${chalk.cyan('│')} ${chalk.dim('One command to run autonomous AI coding loops.')} ${chalk.cyan('│')}
26
+ ${chalk.cyan('│')} ${chalk.cyan('│')}
27
+ ${chalk.cyan('╰─────────────────────────────────────────────────────────────╯')}
28
+ `;
29
+ program
30
+ .name('ralph-starter')
31
+ .description('Ralph Wiggum made easy. Run autonomous AI coding loops with one command.')
32
+ .version(VERSION)
33
+ .addHelpText('beforeAll', banner);
34
+ // ralph-starter run [task] - Main command to run a loop
35
+ program
36
+ .command('run [task]')
37
+ .description('Run an autonomous AI coding loop')
38
+ .option('--auto', 'Run in fully automated mode (skip permissions)')
39
+ .option('--commit', 'Auto-commit after each successful task')
40
+ .option('--push', 'Push commits to remote')
41
+ .option('--pr', 'Create a pull request when done')
42
+ .option('--validate', 'Run tests/lint/build after each iteration (backpressure)')
43
+ .option('--docker', 'Run in Docker sandbox (coming soon)')
44
+ .option('--prd <file>', 'Read tasks from a PRD markdown file')
45
+ .option('--max-iterations <n>', 'Maximum loop iterations', '50')
46
+ .option('--agent <name>', 'Specify agent (claude-code, cursor, codex, opencode)')
47
+ .option('--from <source>', 'Fetch spec from source (file, url, github, todoist, linear, notion)')
48
+ .option('--project <name>', 'Project/repo name for --from integrations')
49
+ .option('--label <name>', 'Label filter for --from integrations')
50
+ .option('--status <status>', 'Status filter for --from integrations')
51
+ .option('--limit <n>', 'Max items to fetch for --from integrations', '20')
52
+ // New options
53
+ .option('--preset <name>', `Use a workflow preset (${getPresetNames().slice(0, 5).join(', ')}...)`)
54
+ .option('--completion-promise <string>', 'Custom completion promise string to detect task done')
55
+ .option('--require-exit-signal', 'Require explicit EXIT_SIGNAL: true for completion')
56
+ .option('--rate-limit <n>', 'Max API calls per hour (default: unlimited)')
57
+ .option('--track-progress', 'Write progress to activity.md (default: true)')
58
+ .option('--no-track-progress', 'Disable progress tracking')
59
+ .option('--track-cost', 'Track token usage and estimated cost (default: true)')
60
+ .option('--no-track-cost', 'Disable cost tracking')
61
+ .option('--circuit-breaker-failures <n>', 'Max consecutive failures before stopping (default: 3)')
62
+ .option('--circuit-breaker-errors <n>', 'Max same error occurrences before stopping (default: 5)')
63
+ .action(runCommand);
64
+ // ralph-starter init - Initialize Ralph in a project
65
+ program
66
+ .command('init')
67
+ .description('Initialize Ralph Wiggum in an existing project')
68
+ .option('-n, --name <name>', 'Project name')
69
+ .action(initCommand);
70
+ // ralph-starter skill - Manage agent skills
71
+ program
72
+ .command('skill <action> [name]')
73
+ .description('Manage agent skills (add, list, search, browse)')
74
+ .option('-g, --global', 'Install skill globally')
75
+ .action(skillCommand);
76
+ // ralph-starter plan - Create implementation plan from specs
77
+ program
78
+ .command('plan')
79
+ .description('Analyze specs and create implementation plan (Ralph Playbook planning mode)')
80
+ .option('--auto', 'Run in automated mode (skip permissions)')
81
+ .action(planCommand);
82
+ // ralph-starter setup - Interactive setup wizard
83
+ program
84
+ .command('setup')
85
+ .description('Interactive setup wizard to configure LLM and agents')
86
+ .option('--force', 'Force re-run setup even if already configured')
87
+ .action(setupCommand);
88
+ // ralph-starter check - Check configuration and test connection
89
+ program
90
+ .command('check')
91
+ .description('Check configuration and test LLM connection')
92
+ .option('--verbose', 'Show detailed output')
93
+ .action(checkCommand);
94
+ // ralph-starter wizard - Interactive wizard (explicit command)
95
+ program
96
+ .command('wizard')
97
+ .description('Launch the interactive wizard to build a new project')
98
+ .action(async () => {
99
+ await runWizard();
100
+ });
101
+ // ralph-starter ideas - Brainstorm project ideas
102
+ program
103
+ .command('ideas')
104
+ .description("Brainstorm project ideas when you don't know what to build")
105
+ .action(async () => {
106
+ const idea = await runIdeaMode();
107
+ if (idea) {
108
+ console.log();
109
+ console.log(' Selected idea:', idea);
110
+ console.log();
111
+ console.log(' To build this project, run:');
112
+ console.log(' ralph-starter wizard');
113
+ console.log();
114
+ }
115
+ });
116
+ // ralph-starter config - Manage source configuration
117
+ program
118
+ .command('config [action] [args...]')
119
+ .description('Manage source configuration (list, get, set, delete)')
120
+ .action(async (action, args) => {
121
+ if (!action) {
122
+ // Show help when no action provided
123
+ await configCommand('help', []);
124
+ return;
125
+ }
126
+ await configCommand(action, args);
127
+ });
128
+ // ralph-starter auth - Browser-based OAuth authentication
129
+ program
130
+ .command('auth [service]')
131
+ .description('Browser-based OAuth authentication for integrations')
132
+ .option('--list', 'Show authentication status for all services')
133
+ .option('--logout <service>', 'Remove credentials for a service')
134
+ .action(async (service, options) => {
135
+ await authCommand(service, options);
136
+ });
137
+ // ralph-starter source - Manage input sources
138
+ program
139
+ .command('source [action] [args...]')
140
+ .description('Manage input sources (list, help, test, preview)')
141
+ .option('--project <name>', 'Project/repo name for integrations')
142
+ .option('--label <name>', 'Label filter')
143
+ .option('--status <status>', 'Status filter')
144
+ .option('--limit <n>', 'Max items to fetch', '10')
145
+ .action(async (action, args, options) => {
146
+ if (!action) {
147
+ // Show help when no action provided
148
+ await sourceCommand('help', []);
149
+ return;
150
+ }
151
+ await sourceCommand(action, args, options);
152
+ });
153
+ // ralph-starter integrations - Manage integrations (unified architecture)
154
+ program
155
+ .command('integrations [action] [args...]')
156
+ .description('Manage integrations (list, help, test, fetch)')
157
+ .option('--project <name>', 'Project/repo name')
158
+ .option('--label <name>', 'Label filter')
159
+ .option('--status <status>', 'Status filter')
160
+ .option('--limit <n>', 'Max items to fetch', '10')
161
+ .action(async (action, args, options) => {
162
+ if (!action) {
163
+ // Default to list when no action provided
164
+ await integrationsCommand('list', [], options);
165
+ return;
166
+ }
167
+ await integrationsCommand(action, args, options);
168
+ });
169
+ // ralph-starter mcp - Start as MCP server
170
+ program
171
+ .command('mcp')
172
+ .description('Start as an MCP (Model Context Protocol) server for Claude Desktop/Code')
173
+ .action(async () => {
174
+ await startMcpServer();
175
+ });
176
+ // ralph-starter presets - List available workflow presets
177
+ program
178
+ .command('presets')
179
+ .description('List available workflow presets')
180
+ .action(() => {
181
+ console.log();
182
+ console.log(formatPresetsHelp());
183
+ console.log('Use with: ralph-starter run --preset <name> [task]');
184
+ console.log();
185
+ });
186
+ // Default action - launch interactive wizard
187
+ program.action(async () => {
188
+ // If user passes --help, commander handles it
189
+ // Otherwise, launch the wizard
190
+ await runWizard();
191
+ });
192
+ program.parse();
193
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export type AuthCommandOptions = {};
2
+ /**
3
+ * Auth command - Browser-based OAuth authentication for integrations
4
+ *
5
+ * Usage:
6
+ * ralph-starter auth <service> Start OAuth flow for a service
7
+ * ralph-starter auth --list Show auth status for all services
8
+ * ralph-starter auth --logout <service> Remove credentials for a service
9
+ */
10
+ export declare function authCommand(service: string | undefined, options: {
11
+ list?: boolean;
12
+ logout?: string;
13
+ }): Promise<void>;
14
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/commands/auth.ts"],"names":[],"mappings":"AAcA,MAAM,MAAM,kBAAkB,GAAG,EAAE,CAAC;AAEpC;;;;;;;GAOG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3C,OAAO,CAAC,IAAI,CAAC,CAqBf"}