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,215 @@
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
+ import { homedir } from 'node:os';
3
+ import { join } from 'node:path';
4
+ const CONFIG_DIR = join(homedir(), '.ralph-starter');
5
+ const SOURCES_CONFIG_FILE = join(CONFIG_DIR, 'sources.json');
6
+ /**
7
+ * Environment variable mappings for each source
8
+ * Format: { sourceName: { credentialKey: ENV_VAR_NAME } }
9
+ */
10
+ const ENV_VAR_MAPPINGS = {
11
+ todoist: { apiKey: 'TODOIST_API_KEY' },
12
+ linear: { apiKey: 'LINEAR_API_KEY' },
13
+ notion: { apiKey: 'NOTION_API_KEY' },
14
+ github: { token: 'GITHUB_TOKEN' },
15
+ };
16
+ /**
17
+ * Get credentials from environment variables for a source
18
+ */
19
+ function getEnvCredentials(sourceName) {
20
+ const mappings = ENV_VAR_MAPPINGS[sourceName];
21
+ if (!mappings)
22
+ return null;
23
+ const credentials = {};
24
+ let hasAny = false;
25
+ for (const [key, envVar] of Object.entries(mappings)) {
26
+ const value = process.env[envVar];
27
+ if (value) {
28
+ credentials[key] = value;
29
+ hasAny = true;
30
+ }
31
+ }
32
+ return hasAny ? credentials : null;
33
+ }
34
+ /**
35
+ * Get the environment variable name for a source credential
36
+ */
37
+ export function getEnvVarName(sourceName, key) {
38
+ return ENV_VAR_MAPPINGS[sourceName]?.[key] || null;
39
+ }
40
+ /**
41
+ * Get all environment variable names for credentials
42
+ */
43
+ export function getAllEnvVarMappings() {
44
+ return ENV_VAR_MAPPINGS;
45
+ }
46
+ /**
47
+ * Ensure config directory exists
48
+ */
49
+ function ensureConfigDir() {
50
+ if (!existsSync(CONFIG_DIR)) {
51
+ mkdirSync(CONFIG_DIR, { recursive: true });
52
+ }
53
+ }
54
+ /**
55
+ * Read sources configuration
56
+ */
57
+ export function readSourcesConfig() {
58
+ ensureConfigDir();
59
+ if (!existsSync(SOURCES_CONFIG_FILE)) {
60
+ return { sources: {} };
61
+ }
62
+ try {
63
+ const content = readFileSync(SOURCES_CONFIG_FILE, 'utf-8');
64
+ return JSON.parse(content);
65
+ }
66
+ catch {
67
+ return { sources: {} };
68
+ }
69
+ }
70
+ /**
71
+ * Write sources configuration
72
+ */
73
+ export function writeSourcesConfig(config) {
74
+ ensureConfigDir();
75
+ writeFileSync(SOURCES_CONFIG_FILE, JSON.stringify(config, null, 2));
76
+ }
77
+ /**
78
+ * Get configuration for a specific source
79
+ */
80
+ export function getSourceConfig(sourceName) {
81
+ const config = readSourcesConfig();
82
+ return config.sources[sourceName] || null;
83
+ }
84
+ /**
85
+ * Set configuration for a specific source
86
+ */
87
+ export function setSourceConfig(sourceName, sourceConfig) {
88
+ const config = readSourcesConfig();
89
+ config.sources[sourceName] = {
90
+ ...config.sources[sourceName],
91
+ ...sourceConfig,
92
+ };
93
+ writeSourcesConfig(config);
94
+ }
95
+ /**
96
+ * Get credentials for a specific source
97
+ * Priority: Environment variables > Config file
98
+ */
99
+ export function getSourceCredentials(sourceName) {
100
+ // Check environment variables first
101
+ const envCredentials = getEnvCredentials(sourceName);
102
+ const configCredentials = getSourceConfig(sourceName)?.credentials || null;
103
+ // Merge: env vars take precedence
104
+ if (envCredentials && configCredentials) {
105
+ return { ...configCredentials, ...envCredentials };
106
+ }
107
+ return envCredentials || configCredentials;
108
+ }
109
+ /**
110
+ * Check if credentials came from environment variables
111
+ */
112
+ export function isCredentialFromEnv(sourceName, key) {
113
+ const envVar = getEnvVarName(sourceName, key);
114
+ return envVar ? !!process.env[envVar] : false;
115
+ }
116
+ /**
117
+ * Set a credential for a specific source
118
+ */
119
+ export function setSourceCredential(sourceName, key, value) {
120
+ const config = readSourcesConfig();
121
+ if (!config.sources[sourceName]) {
122
+ config.sources[sourceName] = {};
123
+ }
124
+ if (!config.sources[sourceName].credentials) {
125
+ config.sources[sourceName].credentials = {};
126
+ }
127
+ config.sources[sourceName].credentials[key] = value;
128
+ writeSourcesConfig(config);
129
+ }
130
+ /**
131
+ * Delete a credential for a specific source
132
+ */
133
+ export function deleteSourceCredential(sourceName, key) {
134
+ const config = readSourcesConfig();
135
+ if (!config.sources[sourceName]?.credentials?.[key]) {
136
+ return false;
137
+ }
138
+ delete config.sources[sourceName].credentials?.[key];
139
+ // Clean up empty credentials object
140
+ if (Object.keys(config.sources[sourceName].credentials).length === 0) {
141
+ delete config.sources[sourceName].credentials;
142
+ }
143
+ // Clean up empty source config
144
+ if (Object.keys(config.sources[sourceName]).length === 0) {
145
+ delete config.sources[sourceName];
146
+ }
147
+ writeSourcesConfig(config);
148
+ return true;
149
+ }
150
+ /**
151
+ * Get default options for a specific source
152
+ */
153
+ export function getSourceDefaults(sourceName) {
154
+ const sourceConfig = getSourceConfig(sourceName);
155
+ return sourceConfig?.defaults || null;
156
+ }
157
+ /**
158
+ * Set default options for a specific source
159
+ */
160
+ export function setSourceDefaults(sourceName, defaults) {
161
+ const config = readSourcesConfig();
162
+ if (!config.sources[sourceName]) {
163
+ config.sources[sourceName] = {};
164
+ }
165
+ config.sources[sourceName].defaults = {
166
+ ...config.sources[sourceName].defaults,
167
+ ...defaults,
168
+ };
169
+ writeSourcesConfig(config);
170
+ }
171
+ /**
172
+ * Check if a source is enabled
173
+ * Sources are enabled by default unless explicitly disabled
174
+ */
175
+ export function isSourceEnabled(sourceName) {
176
+ const sourceConfig = getSourceConfig(sourceName);
177
+ return sourceConfig?.enabled !== false;
178
+ }
179
+ /**
180
+ * Enable or disable a source
181
+ */
182
+ export function setSourceEnabled(sourceName, enabled) {
183
+ const config = readSourcesConfig();
184
+ if (!config.sources[sourceName]) {
185
+ config.sources[sourceName] = {};
186
+ }
187
+ config.sources[sourceName].enabled = enabled;
188
+ writeSourcesConfig(config);
189
+ }
190
+ /**
191
+ * List all configured sources
192
+ */
193
+ export function listConfiguredSources() {
194
+ const config = readSourcesConfig();
195
+ return Object.keys(config.sources);
196
+ }
197
+ /**
198
+ * Delete all configuration for a source
199
+ */
200
+ export function deleteSourceConfig(sourceName) {
201
+ const config = readSourcesConfig();
202
+ if (!config.sources[sourceName]) {
203
+ return false;
204
+ }
205
+ delete config.sources[sourceName];
206
+ writeSourcesConfig(config);
207
+ return true;
208
+ }
209
+ /**
210
+ * Get the config file path (for display purposes)
211
+ */
212
+ export function getSourcesConfigPath() {
213
+ return SOURCES_CONFIG_FILE;
214
+ }
215
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/sources/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Source registry and factory
3
+ *
4
+ * Manages all available input sources and provides methods to:
5
+ * - List available sources
6
+ * - Get source by name
7
+ * - Auto-detect source from identifier
8
+ * - Fetch content from any source
9
+ */
10
+ import type { InputSource, SourceInfo, SourceOptions, SourceResult } from './types.js';
11
+ /**
12
+ * Get a source by name
13
+ */
14
+ export declare function getSource(name: string): InputSource | null;
15
+ /**
16
+ * Get all registered sources
17
+ */
18
+ export declare function getAllSources(): InputSource[];
19
+ /**
20
+ * Get source info for all sources
21
+ */
22
+ export declare function getSourcesInfo(): Promise<SourceInfo[]>;
23
+ /**
24
+ * Auto-detect the appropriate source from an identifier
25
+ */
26
+ export declare function detectSource(identifier: string): InputSource | null;
27
+ /**
28
+ * Fetch content from any source
29
+ *
30
+ * @param sourceOrIdentifier - Source name or auto-detectable identifier
31
+ * @param identifierOrOptions - Identifier (if source given) or options
32
+ * @param options - Additional options
33
+ */
34
+ export declare function fetchFromSource(sourceOrIdentifier: string, identifierOrOptions?: string | SourceOptions, options?: SourceOptions): Promise<SourceResult>;
35
+ /**
36
+ * Get help text for a specific source
37
+ */
38
+ export declare function getSourceHelp(name: string): string | null;
39
+ /**
40
+ * Test if a source's credentials are valid
41
+ */
42
+ export declare function testSource(name: string): Promise<{
43
+ success: boolean;
44
+ message: string;
45
+ }>;
46
+ export type { InputSource, SourceInfo, SourceOptions, SourceResult } from './types.js';
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAWH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAiCvF;;GAEG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAG1D;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,WAAW,EAAE,CAG7C;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,CAgB5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CA2DnE;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,kBAAkB,EAAE,MAAM,EAC1B,mBAAmB,CAAC,EAAE,MAAM,GAAG,aAAa,EAC5C,OAAO,CAAC,EAAE,aAAa,GACtB,OAAO,CAAC,YAAY,CAAC,CAgDvB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIzD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACtD,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC,CA2BD;AAGD,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * Source registry and factory
3
+ *
4
+ * Manages all available input sources and provides methods to:
5
+ * - List available sources
6
+ * - Get source by name
7
+ * - Auto-detect source from identifier
8
+ * - Fetch content from any source
9
+ */
10
+ // Built-in sources
11
+ import { FileSource } from './builtin/file.js';
12
+ import { PdfSource } from './builtin/pdf.js';
13
+ import { UrlSource } from './builtin/url.js';
14
+ // Integration sources
15
+ import { GitHubSource } from './integrations/github.js';
16
+ import { LinearSource } from './integrations/linear.js';
17
+ import { NotionSource } from './integrations/notion.js';
18
+ import { TodoistSource } from './integrations/todoist.js';
19
+ /**
20
+ * All registered sources
21
+ */
22
+ const sources = new Map();
23
+ /**
24
+ * Initialize all sources
25
+ */
26
+ function initializeSources() {
27
+ if (sources.size > 0)
28
+ return;
29
+ // Register builtin sources
30
+ const builtins = [new FileSource(), new UrlSource(), new PdfSource()];
31
+ for (const source of builtins) {
32
+ sources.set(source.name, source);
33
+ }
34
+ // Register integration sources
35
+ const integrations = [
36
+ new GitHubSource(),
37
+ new TodoistSource(),
38
+ new LinearSource(),
39
+ new NotionSource(),
40
+ ];
41
+ for (const source of integrations) {
42
+ sources.set(source.name, source);
43
+ }
44
+ }
45
+ /**
46
+ * Get a source by name
47
+ */
48
+ export function getSource(name) {
49
+ initializeSources();
50
+ return sources.get(name) || null;
51
+ }
52
+ /**
53
+ * Get all registered sources
54
+ */
55
+ export function getAllSources() {
56
+ initializeSources();
57
+ return Array.from(sources.values());
58
+ }
59
+ /**
60
+ * Get source info for all sources
61
+ */
62
+ export async function getSourcesInfo() {
63
+ initializeSources();
64
+ const info = [];
65
+ for (const source of sources.values()) {
66
+ info.push({
67
+ name: source.name,
68
+ description: source.description,
69
+ type: source.type,
70
+ requiresAuth: source.requiresAuth(),
71
+ available: await source.isAvailable(),
72
+ });
73
+ }
74
+ return info;
75
+ }
76
+ /**
77
+ * Auto-detect the appropriate source from an identifier
78
+ */
79
+ export function detectSource(identifier) {
80
+ initializeSources();
81
+ // Check for explicit source prefix (e.g., "github:owner/repo")
82
+ const prefixMatch = identifier.match(/^([a-z]+):/i);
83
+ if (prefixMatch) {
84
+ const sourceName = prefixMatch[1].toLowerCase();
85
+ return sources.get(sourceName) || null;
86
+ }
87
+ // Auto-detect from identifier format
88
+ const lowerIdentifier = identifier.toLowerCase();
89
+ // URL detection
90
+ if (identifier.startsWith('http://') || identifier.startsWith('https://')) {
91
+ // Check for specific service URLs
92
+ if (lowerIdentifier.includes('github.com')) {
93
+ return sources.get('github') || null;
94
+ }
95
+ if (lowerIdentifier.includes('notion.so') || lowerIdentifier.includes('notion.site')) {
96
+ return sources.get('notion') || null;
97
+ }
98
+ if (lowerIdentifier.includes('linear.app')) {
99
+ return sources.get('linear') || null;
100
+ }
101
+ if (lowerIdentifier.includes('todoist.com')) {
102
+ return sources.get('todoist') || null;
103
+ }
104
+ // Check for PDF URLs
105
+ if (lowerIdentifier.endsWith('.pdf')) {
106
+ return sources.get('pdf') || null;
107
+ }
108
+ // Default to URL source
109
+ return sources.get('url') || null;
110
+ }
111
+ // Local file detection
112
+ if (identifier.startsWith('./') ||
113
+ identifier.startsWith('/') ||
114
+ identifier.startsWith('../') ||
115
+ identifier.includes('/') ||
116
+ lowerIdentifier.endsWith('.md') ||
117
+ lowerIdentifier.endsWith('.txt') ||
118
+ lowerIdentifier.endsWith('.pdf')) {
119
+ // PDF files
120
+ if (lowerIdentifier.endsWith('.pdf')) {
121
+ return sources.get('pdf') || null;
122
+ }
123
+ // Other files
124
+ return sources.get('file') || null;
125
+ }
126
+ // No match - could be a project name for integrations
127
+ return null;
128
+ }
129
+ /**
130
+ * Fetch content from any source
131
+ *
132
+ * @param sourceOrIdentifier - Source name or auto-detectable identifier
133
+ * @param identifierOrOptions - Identifier (if source given) or options
134
+ * @param options - Additional options
135
+ */
136
+ export async function fetchFromSource(sourceOrIdentifier, identifierOrOptions, options) {
137
+ initializeSources();
138
+ let source;
139
+ let identifier;
140
+ let fetchOptions;
141
+ // Determine if first arg is source name or identifier
142
+ const explicitSource = sources.get(sourceOrIdentifier.toLowerCase());
143
+ if (explicitSource && typeof identifierOrOptions === 'string') {
144
+ // First arg is source name
145
+ source = explicitSource;
146
+ identifier = identifierOrOptions;
147
+ fetchOptions = options;
148
+ }
149
+ else {
150
+ // First arg is identifier, auto-detect source
151
+ identifier = sourceOrIdentifier;
152
+ source = detectSource(identifier);
153
+ fetchOptions = typeof identifierOrOptions === 'object' ? identifierOrOptions : options;
154
+ // Strip source prefix if present
155
+ const prefixMatch = identifier.match(/^([a-z]+):/i);
156
+ if (prefixMatch) {
157
+ identifier = identifier.slice(prefixMatch[0].length);
158
+ }
159
+ }
160
+ if (!source) {
161
+ throw new Error(`Could not determine source for: ${sourceOrIdentifier}. ` +
162
+ `Use --from <source> to specify explicitly.`);
163
+ }
164
+ // Check if source is available
165
+ const available = await source.isAvailable();
166
+ if (!available) {
167
+ if (source.requiresAuth()) {
168
+ throw new Error(`Source "${source.name}" requires authentication. ` +
169
+ `Run: ralph-starter config set ${source.name}.apiKey <value>`);
170
+ }
171
+ throw new Error(`Source "${source.name}" is not available.`);
172
+ }
173
+ return source.fetch(identifier, fetchOptions);
174
+ }
175
+ /**
176
+ * Get help text for a specific source
177
+ */
178
+ export function getSourceHelp(name) {
179
+ initializeSources();
180
+ const source = sources.get(name);
181
+ return source?.getHelp() || null;
182
+ }
183
+ /**
184
+ * Test if a source's credentials are valid
185
+ */
186
+ export async function testSource(name) {
187
+ initializeSources();
188
+ const source = sources.get(name);
189
+ if (!source) {
190
+ return { success: false, message: `Unknown source: ${name}` };
191
+ }
192
+ const available = await source.isAvailable();
193
+ if (!available) {
194
+ if (source.requiresAuth()) {
195
+ return {
196
+ success: false,
197
+ message: `Not configured. Run: ralph-starter config set ${name}.apiKey <value>`,
198
+ };
199
+ }
200
+ return { success: false, message: 'Source dependencies not available' };
201
+ }
202
+ if (source.validateCredentials) {
203
+ const valid = await source.validateCredentials();
204
+ if (!valid) {
205
+ return { success: false, message: 'Credentials validation failed' };
206
+ }
207
+ }
208
+ return { success: true, message: 'Source is available and configured' };
209
+ }
210
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/sources/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,mBAAmB;AACnB,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,sBAAsB;AACtB,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG1D;;GAEG;AACH,MAAM,OAAO,GAA6B,IAAI,GAAG,EAAE,CAAC;AAEpD;;GAEG;AACH,SAAS,iBAAiB;IACxB,IAAI,OAAO,CAAC,IAAI,GAAG,CAAC;QAAE,OAAO;IAE7B,2BAA2B;IAC3B,MAAM,QAAQ,GAAG,CAAC,IAAI,UAAU,EAAE,EAAE,IAAI,SAAS,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC;IAEtE,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,+BAA+B;IAC/B,MAAM,YAAY,GAAG;QACnB,IAAI,YAAY,EAAE;QAClB,IAAI,aAAa,EAAE;QACnB,IAAI,YAAY,EAAE;QAClB,IAAI,YAAY,EAAE;KACnB,CAAC;IAEF,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,iBAAiB,EAAE,CAAC;IACpB,OAAO,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa;IAC3B,iBAAiB,EAAE,CAAC;IACpB,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,iBAAiB,EAAE,CAAC;IAEpB,MAAM,IAAI,GAAiB,EAAE,CAAC;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACtC,IAAI,CAAC,IAAI,CAAC;YACR,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE;YACnC,SAAS,EAAE,MAAM,MAAM,CAAC,WAAW,EAAE;SACtC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,UAAkB;IAC7C,iBAAiB,EAAE,CAAC;IAEpB,+DAA+D;IAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IACpD,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QAChD,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,IAAI,CAAC;IACzC,CAAC;IAED,qCAAqC;IACrC,MAAM,eAAe,GAAG,UAAU,CAAC,WAAW,EAAE,CAAC;IAEjD,gBAAgB;IAChB,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1E,kCAAkC;QAClC,IAAI,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;QACvC,CAAC;QACD,IAAI,eAAe,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YACrF,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;QACvC,CAAC;QACD,IAAI,eAAe,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC3C,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC;QACvC,CAAC;QACD,IAAI,eAAe,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;YAC5C,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;QACxC,CAAC;QAED,qBAAqB;QACrB,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACpC,CAAC;QAED,wBAAwB;QACxB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IACpC,CAAC;IAED,uBAAuB;IACvB,IACE,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC;QAC3B,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC;QAC1B,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;QAC5B,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC;QACxB,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC;QAC/B,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC;QAChC,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAChC,CAAC;QACD,YAAY;QACZ,IAAI,eAAe,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;QACpC,CAAC;QAED,cAAc;QACd,OAAO,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;IACrC,CAAC;IAED,sDAAsD;IACtD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,kBAA0B,EAC1B,mBAA4C,EAC5C,OAAuB;IAEvB,iBAAiB,EAAE,CAAC;IAEpB,IAAI,MAA0B,CAAC;IAC/B,IAAI,UAAkB,CAAC;IACvB,IAAI,YAAuC,CAAC;IAE5C,sDAAsD;IACtD,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,WAAW,EAAE,CAAC,CAAC;IAErE,IAAI,cAAc,IAAI,OAAO,mBAAmB,KAAK,QAAQ,EAAE,CAAC;QAC9D,2BAA2B;QAC3B,MAAM,GAAG,cAAc,CAAC;QACxB,UAAU,GAAG,mBAAmB,CAAC;QACjC,YAAY,GAAG,OAAO,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,8CAA8C;QAC9C,UAAU,GAAG,kBAAkB,CAAC;QAChC,MAAM,GAAG,YAAY,CAAC,UAAU,CAAC,CAAC;QAClC,YAAY,GAAG,OAAO,mBAAmB,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,OAAO,CAAC;QAEvF,iCAAiC;QACjC,MAAM,WAAW,GAAG,UAAU,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QACpD,IAAI,WAAW,EAAE,CAAC;YAChB,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvD,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,mCAAmC,kBAAkB,IAAI;YACvD,4CAA4C,CAC/C,CAAC;IACJ,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;YAC1B,MAAM,IAAI,KAAK,CACb,WAAW,MAAM,CAAC,IAAI,6BAA6B;gBACjD,iCAAiC,MAAM,CAAC,IAAI,iBAAiB,CAChE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,WAAW,MAAM,CAAC,IAAI,qBAAqB,CAAC,CAAC;IAC/D,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,iBAAiB,EAAE,CAAC;IACpB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,OAAO,MAAM,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC;AACnC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,IAAY;IAI3C,iBAAiB,EAAE,CAAC;IAEpB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mBAAmB,IAAI,EAAE,EAAE,CAAC;IAChE,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,MAAM,CAAC,YAAY,EAAE,EAAE,CAAC;YAC1B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,iDAAiD,IAAI,iBAAiB;aAChF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,mCAAmC,EAAE,CAAC;IAC1E,CAAC;IAED,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,mBAAmB,EAAE,CAAC;QACjD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,+BAA+B,EAAE,CAAC;QACtE,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,oCAAoC,EAAE,CAAC;AAC1E,CAAC"}
@@ -0,0 +1,24 @@
1
+ import { IntegrationSource } from '../base.js';
2
+ import type { SourceOptions, SourceResult } from '../types.js';
3
+ /**
4
+ * GitHub source - fetches issues from GitHub repositories
5
+ *
6
+ * Uses the gh CLI for authentication (no API key needed if gh is configured)
7
+ * Falls back to GitHub API with token if gh is not available
8
+ */
9
+ export declare class GitHubSource extends IntegrationSource {
10
+ name: string;
11
+ description: string;
12
+ private ghAvailable;
13
+ isAvailable(): Promise<boolean>;
14
+ requiresAuth(): boolean;
15
+ private isGhCliAvailable;
16
+ fetch(identifier: string, options?: SourceOptions): Promise<SourceResult>;
17
+ private parseRepoIdentifier;
18
+ private fetchViaGhCli;
19
+ private fetchViaApi;
20
+ private formatIssues;
21
+ protected getRequiredCredentialKey(): string;
22
+ getHelp(): string;
23
+ }
24
+ //# sourceMappingURL=github.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../../src/sources/integrations/github.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,WAAW,CAAwB;IAErC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAUrC,YAAY,IAAI,OAAO;YAKT,gBAAgB;IAgBxB,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAY/E,OAAO,CAAC,mBAAmB;YAkBb,aAAa;YAwCb,WAAW;IA2CzB,OAAO,CAAC,YAAY;IAgDpB,SAAS,CAAC,wBAAwB,IAAI,MAAM;IAI5C,OAAO,IAAI,MAAM;CAwBlB"}