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,37 @@
1
+ /**
2
+ * Linear OAuth Provider with PKCE Support
3
+ *
4
+ * Linear supports PKCE (Proof Key for Code Exchange) which allows
5
+ * public clients (like CLI apps) to authenticate without a client secret.
6
+ *
7
+ * Linear's OAuth flow:
8
+ * https://developers.linear.app/docs/oauth/authentication
9
+ *
10
+ * To configure ralph-starter's Linear OAuth app:
11
+ * 1. Go to https://linear.app/settings/api/applications
12
+ * 2. Create a new OAuth application
13
+ * 3. Set redirect URI to http://127.0.0.1:52847/callback
14
+ * 4. Copy the Client ID and set RALPH_LINEAR_CLIENT_ID env var
15
+ */
16
+ import { BaseOAuthProvider } from '../../auth/providers/base.js';
17
+ export declare class LinearOAuthProvider extends BaseOAuthProvider {
18
+ name: string;
19
+ displayName: string;
20
+ authorizationUrl: string;
21
+ tokenUrl: string;
22
+ supportsPKCE: boolean;
23
+ scopes: string[];
24
+ clientId: string;
25
+ clientSecret: string | undefined;
26
+ authParams: {
27
+ prompt: string;
28
+ actor: string;
29
+ };
30
+ /**
31
+ * Check if Linear OAuth is configured
32
+ * With PKCE, we only need the client_id (no secret required)
33
+ */
34
+ isConfigured(): boolean;
35
+ }
36
+ export declare const linearProvider: LinearOAuthProvider;
37
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,IAAI,SAAY;IAChB,WAAW,SAAY;IACvB,gBAAgB,SAAwC;IACxD,QAAQ,SAAwC;IAGhD,YAAY,UAAQ;IAGpB,MAAM,WAEJ;IAGF,QAAQ,SAA4C;IAGpD,YAAY,qBAA0C;IAEtD,UAAU;;;MAGR;IAEF;;;OAGG;IACH,YAAY,IAAI,OAAO;CAGxB;AAED,eAAO,MAAM,cAAc,qBAA4B,CAAC"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Linear OAuth Provider with PKCE Support
3
+ *
4
+ * Linear supports PKCE (Proof Key for Code Exchange) which allows
5
+ * public clients (like CLI apps) to authenticate without a client secret.
6
+ *
7
+ * Linear's OAuth flow:
8
+ * https://developers.linear.app/docs/oauth/authentication
9
+ *
10
+ * To configure ralph-starter's Linear OAuth app:
11
+ * 1. Go to https://linear.app/settings/api/applications
12
+ * 2. Create a new OAuth application
13
+ * 3. Set redirect URI to http://127.0.0.1:52847/callback
14
+ * 4. Copy the Client ID and set RALPH_LINEAR_CLIENT_ID env var
15
+ */
16
+ import { BaseOAuthProvider } from '../../auth/providers/base.js';
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 from environment variable
29
+ clientId = process.env.RALPH_LINEAR_CLIENT_ID || '';
30
+ // Client secret is optional with PKCE
31
+ clientSecret = process.env.RALPH_LINEAR_CLIENT_SECRET;
32
+ authParams = {
33
+ prompt: 'consent', // Always show consent screen
34
+ actor: 'user', // Act as the authorizing user
35
+ };
36
+ /**
37
+ * Check if Linear OAuth is configured
38
+ * With PKCE, we only need the client_id (no secret required)
39
+ */
40
+ isConfigured() {
41
+ return !!this.clientId;
42
+ }
43
+ }
44
+ export const linearProvider = new LinearOAuthProvider();
45
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/integrations/linear/auth.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAEjE,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,sCAAsC;IACtC,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,9 @@
1
+ /**
2
+ * Linear Integration
3
+ *
4
+ * Fetches issues from Linear workspaces.
5
+ * Uses the Linear CLI for authentication or API key.
6
+ */
7
+ export { LinearOAuthProvider, linearProvider } from './auth.js';
8
+ export { LinearIntegration } from './source.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Linear Integration
3
+ *
4
+ * Fetches issues from Linear workspaces.
5
+ * Uses the Linear CLI for authentication or API key.
6
+ */
7
+ export { LinearOAuthProvider, linearProvider } from './auth.js';
8
+ export { LinearIntegration } from './source.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/linear/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAChE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Linear Integration Source
3
+ *
4
+ * Fetches issues from Linear using GraphQL API.
5
+ * Supports CLI auth (`linear auth login`) or API key.
6
+ */
7
+ import { type AuthMethod, BaseIntegration, type IntegrationOptions, type IntegrationResult } from '../base.js';
8
+ export declare class LinearIntegration extends BaseIntegration {
9
+ name: string;
10
+ displayName: string;
11
+ description: string;
12
+ website: string;
13
+ authMethods: AuthMethod[];
14
+ private readonly API_URL;
15
+ private linearCliAvailable;
16
+ /**
17
+ * Check if Linear CLI is available and authenticated
18
+ */
19
+ protected isCliAvailable(): Promise<boolean>;
20
+ fetch(identifier: string, options?: IntegrationOptions): Promise<IntegrationResult>;
21
+ private getApiKeyFromCli;
22
+ private fetchIssues;
23
+ private formatIssues;
24
+ getHelp(): string;
25
+ }
26
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/integrations/linear/source.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAkCpB,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,IAAI,SAAY;IAChB,WAAW,SAAY;IACvB,WAAW,SAA8B;IACzC,OAAO,SAAwB;IAG/B,WAAW,EAAE,UAAU,EAAE,CAA+B;IAExD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAC5D,OAAO,CAAC,kBAAkB,CAAwB;IAElD;;OAEG;cACa,cAAc,IAAI,OAAO,CAAC,OAAO,CAAC;IAiB5C,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;YAyB3E,gBAAgB;YAYhB,WAAW;IA2FzB,OAAO,CAAC,YAAY;IAuFpB,OAAO,IAAI,MAAM;CA8BlB"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * Linear Integration Source
3
+ *
4
+ * Fetches issues from Linear using GraphQL API.
5
+ * Supports CLI auth (`linear auth login`) or API key.
6
+ */
7
+ import { BaseIntegration, } from '../base.js';
8
+ export class LinearIntegration extends BaseIntegration {
9
+ name = 'linear';
10
+ displayName = 'Linear';
11
+ description = 'Fetch issues from Linear';
12
+ website = 'https://linear.app';
13
+ // Supports CLI auth, API key, and OAuth
14
+ authMethods = ['cli', 'api-key', 'oauth'];
15
+ API_URL = 'https://api.linear.app/graphql';
16
+ linearCliAvailable = null;
17
+ /**
18
+ * Check if Linear CLI is available and authenticated
19
+ */
20
+ async isCliAvailable() {
21
+ if (this.linearCliAvailable !== null) {
22
+ return this.linearCliAvailable;
23
+ }
24
+ try {
25
+ const { execa } = await import('execa');
26
+ // Check if linear CLI is installed and authenticated
27
+ const result = await execa('linear', ['whoami'], { reject: false });
28
+ this.linearCliAvailable = result.exitCode === 0;
29
+ return this.linearCliAvailable;
30
+ }
31
+ catch {
32
+ this.linearCliAvailable = false;
33
+ return false;
34
+ }
35
+ }
36
+ async fetch(identifier, options) {
37
+ const projectName = options?.project || identifier;
38
+ const authMethod = await this.getConfiguredAuthMethod();
39
+ if (!authMethod) {
40
+ this.error('No authentication configured. Options:\n' +
41
+ ' 1. Install Linear CLI: npm install -g @linear/cli && linear auth login\n' +
42
+ ' 2. Use API key: ralph-starter config set linear.apiKey <key>');
43
+ }
44
+ // Get API key based on auth method
45
+ let apiKey;
46
+ if (authMethod === 'cli') {
47
+ apiKey = await this.getApiKeyFromCli();
48
+ }
49
+ else {
50
+ apiKey = await this.getApiKey();
51
+ }
52
+ const issues = await this.fetchIssues(apiKey, projectName, options);
53
+ return this.formatIssues(issues, projectName);
54
+ }
55
+ async getApiKeyFromCli() {
56
+ try {
57
+ const { execa } = await import('execa');
58
+ // Linear CLI stores token which we can use
59
+ const result = await execa('linear', ['config', 'get', 'apiKey']);
60
+ return result.stdout.trim();
61
+ }
62
+ catch {
63
+ // Fall back to regular API key
64
+ return this.getApiKey();
65
+ }
66
+ }
67
+ async fetchIssues(apiKey, projectName, options) {
68
+ const limit = options?.limit || 50;
69
+ // Build filter
70
+ const filter = {};
71
+ if (projectName && projectName !== 'all') {
72
+ filter.or = [
73
+ { project: { name: { containsIgnoreCase: projectName } } },
74
+ { team: { name: { containsIgnoreCase: projectName } } },
75
+ { team: { key: { eq: projectName.toUpperCase() } } },
76
+ ];
77
+ }
78
+ if (options?.label) {
79
+ filter.labels = { name: { containsIgnoreCase: options.label } };
80
+ }
81
+ if (options?.status) {
82
+ filter.state = { name: { containsIgnoreCase: options.status } };
83
+ }
84
+ else {
85
+ // Default to non-completed issues
86
+ filter.completedAt = { null: true };
87
+ }
88
+ const query = `
89
+ query GetIssues($filter: IssueFilter, $first: Int) {
90
+ issues(filter: $filter, first: $first, orderBy: updatedAt) {
91
+ nodes {
92
+ id
93
+ identifier
94
+ title
95
+ description
96
+ priority
97
+ priorityLabel
98
+ state {
99
+ name
100
+ type
101
+ }
102
+ labels {
103
+ nodes {
104
+ name
105
+ }
106
+ }
107
+ project {
108
+ name
109
+ }
110
+ team {
111
+ name
112
+ key
113
+ }
114
+ }
115
+ }
116
+ }
117
+ `;
118
+ const response = await fetch(this.API_URL, {
119
+ method: 'POST',
120
+ headers: {
121
+ 'Content-Type': 'application/json',
122
+ Authorization: apiKey,
123
+ },
124
+ body: JSON.stringify({
125
+ query,
126
+ variables: {
127
+ filter: Object.keys(filter).length > 0 ? filter : undefined,
128
+ first: limit,
129
+ },
130
+ }),
131
+ });
132
+ if (!response.ok) {
133
+ if (response.status === 401) {
134
+ this.error('Invalid Linear API key. Run: ralph-starter config set linear.apiKey <key>');
135
+ }
136
+ this.error(`Linear API error: ${response.status} ${response.statusText}`);
137
+ }
138
+ const data = (await response.json());
139
+ if (data.errors) {
140
+ this.error(`Linear API error: ${data.errors[0].message}`);
141
+ }
142
+ return data.data.issues.nodes;
143
+ }
144
+ formatIssues(issues, projectName) {
145
+ const title = projectName === 'all' ? 'All Issues' : `${projectName} Issues`;
146
+ if (issues.length === 0) {
147
+ return {
148
+ content: `# ${title}\n\nNo issues found.`,
149
+ source: `linear:${projectName}`,
150
+ title,
151
+ metadata: { type: 'linear', issues: 0 },
152
+ };
153
+ }
154
+ const sections = [`# ${title}\n`];
155
+ // Group by priority
156
+ const priorityOrder = ['Urgent', 'High', 'Medium', 'Low', 'No priority'];
157
+ const byPriority = {};
158
+ for (const issue of issues) {
159
+ const priority = issue.priorityLabel || 'No priority';
160
+ if (!byPriority[priority]) {
161
+ byPriority[priority] = [];
162
+ }
163
+ byPriority[priority].push(issue);
164
+ }
165
+ const priorityEmoji = {
166
+ Urgent: '🔴',
167
+ High: '🟠',
168
+ Medium: '🟡',
169
+ Low: '🔵',
170
+ 'No priority': '⚪',
171
+ };
172
+ for (const priority of priorityOrder) {
173
+ const priorityIssues = byPriority[priority];
174
+ if (!priorityIssues || priorityIssues.length === 0)
175
+ continue;
176
+ sections.push(`\n## ${priorityEmoji[priority] || '⚪'} ${priority}\n`);
177
+ for (const issue of priorityIssues) {
178
+ sections.push(`### ${issue.identifier}: ${issue.title}`);
179
+ const meta = [];
180
+ if (issue.state?.name) {
181
+ meta.push(`Status: ${issue.state.name}`);
182
+ }
183
+ if (issue.team?.name) {
184
+ meta.push(`Team: ${issue.team.name}`);
185
+ }
186
+ if (issue.project?.name) {
187
+ meta.push(`Project: ${issue.project.name}`);
188
+ }
189
+ const labels = issue.labels?.nodes?.map((l) => l.name).filter(Boolean);
190
+ if (labels && labels.length > 0) {
191
+ meta.push(`Labels: ${labels.join(', ')}`);
192
+ }
193
+ if (meta.length > 0) {
194
+ sections.push(`*${meta.join(' | ')}*`);
195
+ }
196
+ sections.push('');
197
+ if (issue.description) {
198
+ sections.push(issue.description);
199
+ }
200
+ else {
201
+ sections.push('*No description*');
202
+ }
203
+ sections.push('');
204
+ }
205
+ }
206
+ return {
207
+ content: sections.join('\n'),
208
+ source: `linear:${projectName}`,
209
+ title,
210
+ metadata: {
211
+ type: 'linear',
212
+ project: projectName,
213
+ issues: issues.length,
214
+ },
215
+ };
216
+ }
217
+ getHelp() {
218
+ return `
219
+ linear: Fetch issues from Linear
220
+
221
+ Usage:
222
+ ralph-starter run --from linear --project "My Project"
223
+ ralph-starter run --from linear --project TEAM-KEY --label "feature"
224
+
225
+ Options:
226
+ --project Project name, team name, or team key (e.g., ENG)
227
+ --label Filter by label name
228
+ --status Filter by status name (e.g., "In Progress", "Todo")
229
+ --limit Maximum issues to fetch (default: 50)
230
+
231
+ Authentication:
232
+
233
+ Option 1: Linear CLI (recommended)
234
+ 1. Install: npm install -g @linear/cli
235
+ 2. Login: linear auth login
236
+
237
+ Option 2: API Key
238
+ 1. Get API key from: https://linear.app/settings/api
239
+ 2. Run: ralph-starter config set linear.apiKey <key>
240
+
241
+ Examples:
242
+ ralph-starter run --from linear --project "Mobile App"
243
+ ralph-starter run --from linear --project ENG --label "bug"
244
+ ralph-starter run --from linear --project all --status "In Progress"
245
+ `.trim();
246
+ }
247
+ }
248
+ //# sourceMappingURL=source.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.js","sourceRoot":"","sources":["../../../src/integrations/linear/source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Notion Integration
3
+ *
4
+ * Fetches pages from Notion workspaces.
5
+ * Supports public pages via HTML fetch (no auth) and private pages via API.
6
+ */
7
+ export { NotionIntegration } from './source.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/integrations/notion/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Notion Integration
3
+ *
4
+ * Fetches pages from Notion workspaces.
5
+ * Supports public pages via HTML fetch (no auth) and private pages via API.
6
+ */
7
+ export { NotionIntegration } from './source.js';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/integrations/notion/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Notion Integration Source
3
+ *
4
+ * Fetches pages from Notion:
5
+ * - Public pages: HTML fetch (no auth needed)
6
+ * - Private pages: Notion API (requires token)
7
+ */
8
+ import { type AuthMethod, BaseIntegration, type IntegrationOptions, type IntegrationResult } from '../base.js';
9
+ export declare class NotionIntegration extends BaseIntegration {
10
+ name: string;
11
+ displayName: string;
12
+ description: string;
13
+ website: string;
14
+ authMethods: AuthMethod[];
15
+ private readonly API_BASE;
16
+ private readonly API_VERSION;
17
+ fetch(identifier: string, options?: IntegrationOptions): Promise<IntegrationResult>;
18
+ private isNotionUrl;
19
+ /**
20
+ * Fetch a public Notion page via HTML
21
+ * Returns null if the page is not public
22
+ */
23
+ private fetchPublicPage;
24
+ /**
25
+ * Convert Notion HTML to markdown
26
+ */
27
+ private htmlToMarkdown;
28
+ /**
29
+ * Extract title from Notion HTML
30
+ */
31
+ private extractTitle;
32
+ /**
33
+ * Fetch via Notion API (for private pages or search)
34
+ */
35
+ private fetchViaApi;
36
+ private isNotionId;
37
+ private extractIdFromUrl;
38
+ private formatNotionId;
39
+ private fetchPageById;
40
+ private searchNotion;
41
+ private apiRequest;
42
+ private formatPage;
43
+ private formatDatabase;
44
+ private getPageTitle;
45
+ private getDatabaseTitle;
46
+ private formatProperties;
47
+ private getPropertyValue;
48
+ private blocksToMarkdown;
49
+ private blockToMarkdown;
50
+ private richTextToPlain;
51
+ getHelp(): string;
52
+ }
53
+ //# sourceMappingURL=source.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source.d.ts","sourceRoot":"","sources":["../../../src/integrations/notion/source.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,KAAK,UAAU,EACf,eAAe,EACf,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACvB,MAAM,YAAY,CAAC;AAoBpB,qBAAa,iBAAkB,SAAQ,eAAe;IACpD,IAAI,SAAY;IAChB,WAAW,SAAY;IACvB,WAAW,SAAiD;IAC5D,OAAO,SAAuB;IAG9B,WAAW,EAAE,UAAU,EAAE,CAAuB;IAEhD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAEtC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+BzF,OAAO,CAAC,WAAW;IAInB;;;OAGG;YACW,eAAe;IAuC7B;;OAEG;IACH,OAAO,CAAC,cAAc;IAwDtB;;OAEG;IACH,OAAO,CAAC,YAAY;IAgBpB;;OAEG;YACW,WAAW;IAqBzB,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,cAAc;YAKR,aAAa;YA+Bb,YAAY;YAsDZ,UAAU;IA8BxB,OAAO,CAAC,UAAU;IAiBlB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IAgBxB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IAuDvB,OAAO,CAAC,eAAe;IAKvB,OAAO,IAAI,MAAM;CAsClB"}