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,193 @@
1
+ import { IntegrationSource } from '../base.js';
2
+ /**
3
+ * GitHub source - fetches issues from GitHub repositories
4
+ *
5
+ * Uses the gh CLI for authentication (no API key needed if gh is configured)
6
+ * Falls back to GitHub API with token if gh is not available
7
+ */
8
+ export class GitHubSource extends IntegrationSource {
9
+ name = 'github';
10
+ description = 'Fetch issues from GitHub repositories';
11
+ ghAvailable = null;
12
+ async isAvailable() {
13
+ // First check if gh CLI is available and authenticated
14
+ if (await this.isGhCliAvailable()) {
15
+ return true;
16
+ }
17
+ // Fall back to checking for API token
18
+ return super.isAvailable();
19
+ }
20
+ requiresAuth() {
21
+ // gh CLI handles auth, so we don't strictly require it
22
+ return false;
23
+ }
24
+ async isGhCliAvailable() {
25
+ if (this.ghAvailable !== null) {
26
+ return this.ghAvailable;
27
+ }
28
+ try {
29
+ const { execa } = await import('execa');
30
+ await execa('gh', ['auth', 'status']);
31
+ this.ghAvailable = true;
32
+ return true;
33
+ }
34
+ catch {
35
+ this.ghAvailable = false;
36
+ return false;
37
+ }
38
+ }
39
+ async fetch(identifier, options) {
40
+ // Parse identifier: owner/repo or full URL
41
+ const { owner, repo } = this.parseRepoIdentifier(identifier);
42
+ // Determine which method to use
43
+ if (await this.isGhCliAvailable()) {
44
+ return this.fetchViaGhCli(owner, repo, options);
45
+ }
46
+ return this.fetchViaApi(owner, repo, options);
47
+ }
48
+ parseRepoIdentifier(identifier) {
49
+ // Handle full GitHub URLs
50
+ if (identifier.includes('github.com')) {
51
+ const match = identifier.match(/github\.com\/([^/]+)\/([^/]+)/);
52
+ if (match) {
53
+ return { owner: match[1], repo: match[2].replace(/\.git$/, '') };
54
+ }
55
+ }
56
+ // Handle owner/repo format
57
+ if (identifier.includes('/')) {
58
+ const [owner, repo] = identifier.split('/');
59
+ return { owner, repo };
60
+ }
61
+ this.error(`Invalid repository format: ${identifier}. Use owner/repo or GitHub URL.`);
62
+ }
63
+ async fetchViaGhCli(owner, repo, options) {
64
+ const { execa } = await import('execa');
65
+ // Build gh command
66
+ const args = [
67
+ 'issue',
68
+ 'list',
69
+ '-R',
70
+ `${owner}/${repo}`,
71
+ '--json',
72
+ 'number,title,body,labels,state',
73
+ ];
74
+ // Add filters
75
+ if (options?.label) {
76
+ args.push('--label', options.label);
77
+ }
78
+ if (options?.status) {
79
+ args.push('--state', options.status);
80
+ }
81
+ else {
82
+ args.push('--state', 'open');
83
+ }
84
+ if (options?.limit) {
85
+ args.push('--limit', String(options.limit));
86
+ }
87
+ else {
88
+ args.push('--limit', '20');
89
+ }
90
+ const result = await execa('gh', args);
91
+ const issues = JSON.parse(result.stdout);
92
+ return this.formatIssues(issues, owner, repo);
93
+ }
94
+ async fetchViaApi(owner, repo, options) {
95
+ const token = await this.getApiKey();
96
+ // Build API URL
97
+ let url = `https://api.github.com/repos/${owner}/${repo}/issues?`;
98
+ const params = new URLSearchParams();
99
+ params.set('state', options?.status || 'open');
100
+ params.set('per_page', String(options?.limit || 20));
101
+ if (options?.label) {
102
+ params.set('labels', options.label);
103
+ }
104
+ url += params.toString();
105
+ const response = await fetch(url, {
106
+ headers: {
107
+ Authorization: `Bearer ${token}`,
108
+ Accept: 'application/vnd.github+json',
109
+ 'X-GitHub-Api-Version': '2022-11-28',
110
+ 'User-Agent': 'ralph-starter/0.1.0',
111
+ },
112
+ });
113
+ if (!response.ok) {
114
+ if (response.status === 401) {
115
+ this.error('Invalid GitHub token. Run: ralph-starter config set github.token <value>');
116
+ }
117
+ if (response.status === 404) {
118
+ this.error(`Repository not found: ${owner}/${repo}`);
119
+ }
120
+ this.error(`GitHub API error: ${response.status} ${response.statusText}`);
121
+ }
122
+ const issues = (await response.json());
123
+ return this.formatIssues(issues, owner, repo);
124
+ }
125
+ formatIssues(issues, owner, repo) {
126
+ if (issues.length === 0) {
127
+ return {
128
+ content: `# ${owner}/${repo}\n\nNo issues found matching the criteria.`,
129
+ source: `github:${owner}/${repo}`,
130
+ title: `${owner}/${repo} Issues`,
131
+ metadata: { type: 'github', issues: 0 },
132
+ };
133
+ }
134
+ const sections = [`# ${owner}/${repo} Issues\n`];
135
+ for (const issue of issues) {
136
+ const labels = issue.labels
137
+ ?.map((l) => (typeof l === 'string' ? l : l.name))
138
+ .filter(Boolean)
139
+ .join(', ');
140
+ sections.push(`## #${issue.number}: ${issue.title}`);
141
+ if (labels) {
142
+ sections.push(`*Labels: ${labels}*`);
143
+ }
144
+ sections.push('');
145
+ if (issue.body) {
146
+ sections.push(issue.body);
147
+ }
148
+ else {
149
+ sections.push('*No description provided*');
150
+ }
151
+ sections.push('\n---\n');
152
+ }
153
+ return {
154
+ content: sections.join('\n'),
155
+ source: `github:${owner}/${repo}`,
156
+ title: `${owner}/${repo} Issues`,
157
+ metadata: {
158
+ type: 'github',
159
+ owner,
160
+ repo,
161
+ issues: issues.length,
162
+ },
163
+ };
164
+ }
165
+ getRequiredCredentialKey() {
166
+ return 'token';
167
+ }
168
+ getHelp() {
169
+ return `
170
+ github: Fetch issues from GitHub repositories
171
+
172
+ Usage:
173
+ ralph-starter run --from github --project owner/repo
174
+ ralph-starter run --from github --project owner/repo --label bug
175
+ ralph-starter run --from github --project https://github.com/owner/repo
176
+
177
+ Options:
178
+ --project Repository in owner/repo format or GitHub URL
179
+ --label Filter by label name
180
+ --status Issue state: open, closed, all (default: open)
181
+ --limit Maximum issues to fetch (default: 20)
182
+
183
+ Authentication:
184
+ Uses 'gh' CLI if available and authenticated
185
+ Otherwise requires: ralph-starter config set github.token <token>
186
+
187
+ Examples:
188
+ ralph-starter run --from github --project facebook/react --label "good first issue"
189
+ ralph-starter run --from github --project my-org/my-repo --status all
190
+ `.trim();
191
+ }
192
+ }
193
+ //# sourceMappingURL=github.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.js","sourceRoot":"","sources":["../../../src/sources/integrations/github.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAG/C;;;;;GAKG;AACH,MAAM,OAAO,YAAa,SAAQ,iBAAiB;IACjD,IAAI,GAAG,QAAQ,CAAC;IAChB,WAAW,GAAG,uCAAuC,CAAC;IAE9C,WAAW,GAAmB,IAAI,CAAC;IAE3C,KAAK,CAAC,WAAW;QACf,uDAAuD;QACvD,IAAI,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC;QACd,CAAC;QAED,sCAAsC;QACtC,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC;IAC7B,CAAC;IAED,YAAY;QACV,uDAAuD;QACvD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,KAAK,CAAC,gBAAgB;QAC5B,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,EAAE,CAAC;YAC9B,OAAO,IAAI,CAAC,WAAW,CAAC;QAC1B,CAAC;QAED,IAAI,CAAC;YACH,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;YACtC,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;YACxB,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,UAAkB,EAAE,OAAuB;QACrD,2CAA2C;QAC3C,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;QAE7D,gCAAgC;QAChC,IAAI,MAAM,IAAI,CAAC,gBAAgB,EAAE,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,CAAC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAEO,mBAAmB,CAAC,UAAkB;QAC5C,0BAA0B;QAC1B,IAAI,UAAU,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YACtC,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;YAChE,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;YACnE,CAAC;QACH,CAAC;QAED,2BAA2B;QAC3B,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC5C,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QACzB,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,8BAA8B,UAAU,iCAAiC,CAAC,CAAC;IACxF,CAAC;IAEO,KAAK,CAAC,aAAa,CACzB,KAAa,EACb,IAAY,EACZ,OAAuB;QAEvB,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;QAExC,mBAAmB;QACnB,MAAM,IAAI,GAAG;YACX,OAAO;YACP,MAAM;YACN,IAAI;YACJ,GAAG,KAAK,IAAI,IAAI,EAAE;YAClB,QAAQ;YACR,gCAAgC;SACjC,CAAC;QAEF,cAAc;QACd,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,IAAI,OAAO,EAAE,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;QAC/B,CAAC;QAED,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACvC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAkB,CAAC;QAE1D,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,KAAK,CAAC,WAAW,CACvB,KAAa,EACb,IAAY,EACZ,OAAuB;QAEvB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QAErC,gBAAgB;QAChB,IAAI,GAAG,GAAG,gCAAgC,KAAK,IAAI,IAAI,UAAU,CAAC;QAClE,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;QAErC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,GAAG,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;QAErD,IAAI,OAAO,EAAE,KAAK,EAAE,CAAC;YACnB,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC;QAED,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAEzB,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,MAAM,EAAE,6BAA6B;gBACrC,sBAAsB,EAAE,YAAY;gBACpC,YAAY,EAAE,qBAAqB;aACpC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,0EAA0E,CAAC,CAAC;YACzF,CAAC;YACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,yBAAyB,KAAK,IAAI,IAAI,EAAE,CAAC,CAAC;YACvD,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,qBAAqB,QAAQ,CAAC,MAAM,IAAI,QAAQ,CAAC,UAAU,EAAE,CAAC,CAAC;QAC5E,CAAC;QAED,MAAM,MAAM,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAkB,CAAC;QACxD,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;IAChD,CAAC;IAEO,YAAY,CAAC,MAAqB,EAAE,KAAa,EAAE,IAAY;QACrE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK,KAAK,IAAI,IAAI,4CAA4C;gBACvE,MAAM,EAAE,UAAU,KAAK,IAAI,IAAI,EAAE;gBACjC,KAAK,EAAE,GAAG,KAAK,IAAI,IAAI,SAAS;gBAChC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,EAAE;aACxC,CAAC;QACJ,CAAC;QAED,MAAM,QAAQ,GAAa,CAAC,KAAK,KAAK,IAAI,IAAI,WAAW,CAAC,CAAC;QAE3D,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM;gBACzB,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBACjD,MAAM,CAAC,OAAO,CAAC;iBACf,IAAI,CAAC,IAAI,CAAC,CAAC;YAEd,QAAQ,CAAC,IAAI,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAErD,IAAI,MAAM,EAAE,CAAC;gBACX,QAAQ,CAAC,IAAI,CAAC,YAAY,MAAM,GAAG,CAAC,CAAC;YACvC,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAElB,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;gBACf,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC7C,CAAC;YAED,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,CAAC;QAED,OAAO;YACL,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;YAC5B,MAAM,EAAE,UAAU,KAAK,IAAI,IAAI,EAAE;YACjC,KAAK,EAAE,GAAG,KAAK,IAAI,IAAI,SAAS;YAChC,QAAQ,EAAE;gBACR,IAAI,EAAE,QAAQ;gBACd,KAAK;gBACL,IAAI;gBACJ,MAAM,EAAE,MAAM,CAAC,MAAM;aACtB;SACF,CAAC;IACJ,CAAC;IAES,wBAAwB;QAChC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,OAAO;;;;;;;;;;;;;;;;;;;;;CAqBV,CAAC,IAAI,EAAE,CAAC;IACP,CAAC;CACF"}
@@ -0,0 +1,18 @@
1
+ import { IntegrationSource } from '../base.js';
2
+ import type { SourceOptions, SourceResult } from '../types.js';
3
+ /**
4
+ * Linear source - fetches issues from Linear
5
+ *
6
+ * Uses Linear's GraphQL API
7
+ * Requires API key from: https://linear.app/settings/api
8
+ */
9
+ export declare class LinearSource extends IntegrationSource {
10
+ name: string;
11
+ description: string;
12
+ private readonly API_URL;
13
+ fetch(identifier: string, options?: SourceOptions): Promise<SourceResult>;
14
+ private fetchIssues;
15
+ private formatIssues;
16
+ getHelp(): string;
17
+ }
18
+ //# sourceMappingURL=linear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/sources/integrations/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,iBAAiB;IACjD,IAAI,SAAY;IAChB,WAAW,SAA8B;IAEzC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoC;IAEtD,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YAYjE,WAAW;IA4FzB,OAAO,CAAC,YAAY;IAwFpB,OAAO,IAAI,MAAM;CAwBlB"}
@@ -0,0 +1,197 @@
1
+ import { IntegrationSource } from '../base.js';
2
+ /**
3
+ * Linear source - fetches issues from Linear
4
+ *
5
+ * Uses Linear's GraphQL API
6
+ * Requires API key from: https://linear.app/settings/api
7
+ */
8
+ export class LinearSource extends IntegrationSource {
9
+ name = 'linear';
10
+ description = 'Fetch issues from Linear';
11
+ API_URL = 'https://api.linear.app/graphql';
12
+ async fetch(identifier, options) {
13
+ const apiKey = await this.getApiKey();
14
+ // identifier can be project/team name or 'all'
15
+ const projectName = options?.project || identifier;
16
+ // Fetch issues with GraphQL
17
+ const issues = await this.fetchIssues(apiKey, projectName, options);
18
+ return this.formatIssues(issues, projectName);
19
+ }
20
+ async fetchIssues(apiKey, projectName, options) {
21
+ const limit = options?.limit || 50;
22
+ // Build filter
23
+ const filter = {};
24
+ if (projectName && projectName !== 'all') {
25
+ // Try to match by project or team name
26
+ filter.or = [
27
+ { project: { name: { containsIgnoreCase: projectName } } },
28
+ { team: { name: { containsIgnoreCase: projectName } } },
29
+ { team: { key: { eq: projectName.toUpperCase() } } },
30
+ ];
31
+ }
32
+ if (options?.label) {
33
+ filter.labels = { name: { containsIgnoreCase: options.label } };
34
+ }
35
+ if (options?.status) {
36
+ filter.state = { name: { containsIgnoreCase: options.status } };
37
+ }
38
+ else {
39
+ // Default to non-completed issues
40
+ filter.completedAt = { null: true };
41
+ }
42
+ const query = `
43
+ query GetIssues($filter: IssueFilter, $first: Int) {
44
+ issues(filter: $filter, first: $first, orderBy: updatedAt) {
45
+ nodes {
46
+ id
47
+ identifier
48
+ title
49
+ description
50
+ priority
51
+ priorityLabel
52
+ state {
53
+ name
54
+ type
55
+ }
56
+ labels {
57
+ nodes {
58
+ name
59
+ }
60
+ }
61
+ project {
62
+ name
63
+ }
64
+ team {
65
+ name
66
+ key
67
+ }
68
+ }
69
+ }
70
+ }
71
+ `;
72
+ const response = await fetch(this.API_URL, {
73
+ method: 'POST',
74
+ headers: {
75
+ 'Content-Type': 'application/json',
76
+ Authorization: apiKey,
77
+ },
78
+ body: JSON.stringify({
79
+ query,
80
+ variables: {
81
+ filter: Object.keys(filter).length > 0 ? filter : undefined,
82
+ first: limit,
83
+ },
84
+ }),
85
+ });
86
+ if (!response.ok) {
87
+ if (response.status === 401) {
88
+ this.error('Invalid Linear API key. Run: ralph-starter config set linear.apiKey <key>');
89
+ }
90
+ this.error(`Linear API error: ${response.status} ${response.statusText}`);
91
+ }
92
+ const data = (await response.json());
93
+ if (data.errors) {
94
+ this.error(`Linear API error: ${data.errors[0].message}`);
95
+ }
96
+ return data.data.issues.nodes;
97
+ }
98
+ formatIssues(issues, projectName) {
99
+ const title = projectName === 'all' ? 'All Issues' : `${projectName} Issues`;
100
+ if (issues.length === 0) {
101
+ return {
102
+ content: `# ${title}\n\nNo issues found.`,
103
+ source: `linear:${projectName}`,
104
+ title,
105
+ metadata: { type: 'linear', issues: 0 },
106
+ };
107
+ }
108
+ const sections = [`# ${title}\n`];
109
+ // Group by priority
110
+ const priorityOrder = ['Urgent', 'High', 'Medium', 'Low', 'No priority'];
111
+ const byPriority = {};
112
+ for (const issue of issues) {
113
+ const priority = issue.priorityLabel || 'No priority';
114
+ if (!byPriority[priority]) {
115
+ byPriority[priority] = [];
116
+ }
117
+ byPriority[priority].push(issue);
118
+ }
119
+ const priorityEmoji = {
120
+ Urgent: '🔴',
121
+ High: '🟠',
122
+ Medium: '🟡',
123
+ Low: '🔵',
124
+ 'No priority': '⚪',
125
+ };
126
+ for (const priority of priorityOrder) {
127
+ const priorityIssues = byPriority[priority];
128
+ if (!priorityIssues || priorityIssues.length === 0)
129
+ continue;
130
+ sections.push(`\n## ${priorityEmoji[priority] || '⚪'} ${priority}\n`);
131
+ for (const issue of priorityIssues) {
132
+ const _teamKey = issue.team?.key || '';
133
+ sections.push(`### ${issue.identifier}: ${issue.title}`);
134
+ const meta = [];
135
+ if (issue.state?.name) {
136
+ meta.push(`Status: ${issue.state.name}`);
137
+ }
138
+ if (issue.team?.name) {
139
+ meta.push(`Team: ${issue.team.name}`);
140
+ }
141
+ if (issue.project?.name) {
142
+ meta.push(`Project: ${issue.project.name}`);
143
+ }
144
+ const labels = issue.labels?.nodes?.map((l) => l.name).filter(Boolean);
145
+ if (labels && labels.length > 0) {
146
+ meta.push(`Labels: ${labels.join(', ')}`);
147
+ }
148
+ if (meta.length > 0) {
149
+ sections.push(`*${meta.join(' | ')}*`);
150
+ }
151
+ sections.push('');
152
+ if (issue.description) {
153
+ sections.push(issue.description);
154
+ }
155
+ else {
156
+ sections.push('*No description*');
157
+ }
158
+ sections.push('');
159
+ }
160
+ }
161
+ return {
162
+ content: sections.join('\n'),
163
+ source: `linear:${projectName}`,
164
+ title,
165
+ metadata: {
166
+ type: 'linear',
167
+ project: projectName,
168
+ issues: issues.length,
169
+ },
170
+ };
171
+ }
172
+ getHelp() {
173
+ return `
174
+ linear: Fetch issues from Linear
175
+
176
+ Usage:
177
+ ralph-starter run --from linear --project "My Project"
178
+ ralph-starter run --from linear --project TEAM-KEY --label "feature"
179
+
180
+ Options:
181
+ --project Project name, team name, or team key (e.g., ENG)
182
+ --label Filter by label name
183
+ --status Filter by status name (e.g., "In Progress", "Todo")
184
+ --limit Maximum issues to fetch (default: 50)
185
+
186
+ Setup:
187
+ 1. Get API key from: https://linear.app/settings/api
188
+ 2. Run: ralph-starter config set linear.apiKey <key>
189
+
190
+ Examples:
191
+ ralph-starter run --from linear --project "Mobile App"
192
+ ralph-starter run --from linear --project ENG --label "bug"
193
+ ralph-starter run --from linear --project all --status "In Progress"
194
+ `.trim();
195
+ }
196
+ }
197
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/sources/integrations/linear.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { IntegrationSource } from '../base.js';
2
+ import type { SourceOptions, SourceResult } from '../types.js';
3
+ /**
4
+ * Notion source - fetches pages and databases from Notion
5
+ *
6
+ * Requires integration token from: https://www.notion.so/my-integrations
7
+ * The integration must be added to the pages/databases you want to access
8
+ */
9
+ export declare class NotionSource extends IntegrationSource {
10
+ name: string;
11
+ description: string;
12
+ private readonly API_BASE;
13
+ private readonly API_VERSION;
14
+ protected getRequiredCredentialKey(): string;
15
+ fetch(identifier: string, options?: SourceOptions): Promise<SourceResult>;
16
+ private isNotionUrl;
17
+ private isNotionId;
18
+ private extractIdFromUrl;
19
+ private formatNotionId;
20
+ private fetchByUrl;
21
+ private fetchById;
22
+ private searchNotion;
23
+ private fetchPage;
24
+ private fetchBlocks;
25
+ private fetchDatabase;
26
+ private queryDatabase;
27
+ private apiRequest;
28
+ private formatPage;
29
+ private formatDatabase;
30
+ private getPageTitle;
31
+ private getDatabaseTitle;
32
+ private formatProperties;
33
+ private getPropertyValue;
34
+ private blocksToMarkdown;
35
+ private blockToMarkdown;
36
+ private richTextToPlain;
37
+ getHelp(): string;
38
+ }
39
+ //# sourceMappingURL=notion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion.d.ts","sourceRoot":"","sources":["../../../src/sources/integrations/notion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,KAAK,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE/D;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,iBAAiB;IACjD,IAAI,SAAY;IAChB,WAAW,SAA2C;IAEtD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA+B;IACxD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAgB;IAE5C,SAAS,CAAC,wBAAwB,IAAI,MAAM;IAItC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAgB/E,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,UAAU;IAMlB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,cAAc;YAMR,UAAU;YAKV,SAAS;YAoBT,YAAY;YAmDZ,SAAS;YAIT,WAAW;YAKX,aAAa;YAIb,aAAa;YAOb,UAAU;IAgCxB,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,cAAc;IAkCtB,OAAO,CAAC,YAAY;IAYpB,OAAO,CAAC,gBAAgB;IAOxB,OAAO,CAAC,gBAAgB;IAexB,OAAO,CAAC,gBAAgB;IA2BxB,OAAO,CAAC,gBAAgB;IAaxB,OAAO,CAAC,eAAe;IA8CvB,OAAO,CAAC,eAAe;IAKvB,OAAO,IAAI,MAAM;CA2BlB"}