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,343 @@
1
+ import { IntegrationSource } from '../base.js';
2
+ /**
3
+ * Notion source - fetches pages and databases from Notion
4
+ *
5
+ * Requires integration token from: https://www.notion.so/my-integrations
6
+ * The integration must be added to the pages/databases you want to access
7
+ */
8
+ export class NotionSource extends IntegrationSource {
9
+ name = 'notion';
10
+ description = 'Fetch pages and databases from Notion';
11
+ API_BASE = 'https://api.notion.com/v1';
12
+ API_VERSION = '2022-06-28';
13
+ getRequiredCredentialKey() {
14
+ return 'token';
15
+ }
16
+ async fetch(identifier, options) {
17
+ const token = await this.getApiKey();
18
+ // identifier can be a page URL, page ID, database ID, or search query
19
+ if (this.isNotionUrl(identifier)) {
20
+ return this.fetchByUrl(token, identifier);
21
+ }
22
+ if (this.isNotionId(identifier)) {
23
+ return this.fetchById(token, identifier);
24
+ }
25
+ // Treat as search query
26
+ return this.searchNotion(token, identifier, options);
27
+ }
28
+ isNotionUrl(str) {
29
+ return str.includes('notion.so') || str.includes('notion.site');
30
+ }
31
+ isNotionId(str) {
32
+ // Notion IDs are 32 hex chars (with or without hyphens)
33
+ const cleaned = str.replace(/-/g, '');
34
+ return /^[a-f0-9]{32}$/i.test(cleaned);
35
+ }
36
+ extractIdFromUrl(url) {
37
+ // Handle various Notion URL formats
38
+ // https://notion.so/Page-Title-abc123def456...
39
+ // https://www.notion.so/workspace/Page-Title-abc123def456...
40
+ const match = url.match(/([a-f0-9]{32})/i);
41
+ if (match) {
42
+ return match[1];
43
+ }
44
+ // Try the last segment with potential ID
45
+ const segments = url.split(/[-/]/);
46
+ for (let i = segments.length - 1; i >= 0; i--) {
47
+ const segment = segments[i].replace(/\?.*$/, '');
48
+ if (/^[a-f0-9]{32}$/i.test(segment)) {
49
+ return segment;
50
+ }
51
+ }
52
+ throw new Error(`Could not extract Notion ID from URL: ${url}`);
53
+ }
54
+ formatNotionId(id) {
55
+ // Add hyphens to Notion ID: 8-4-4-4-12
56
+ const clean = id.replace(/-/g, '');
57
+ return `${clean.slice(0, 8)}-${clean.slice(8, 12)}-${clean.slice(12, 16)}-${clean.slice(16, 20)}-${clean.slice(20)}`;
58
+ }
59
+ async fetchByUrl(token, url) {
60
+ const id = this.extractIdFromUrl(url);
61
+ return this.fetchById(token, id);
62
+ }
63
+ async fetchById(token, id) {
64
+ const formattedId = this.formatNotionId(id);
65
+ // Try as page first
66
+ try {
67
+ const page = await this.fetchPage(token, formattedId);
68
+ const blocks = await this.fetchBlocks(token, formattedId);
69
+ return this.formatPage(page, blocks);
70
+ }
71
+ catch (_error) {
72
+ // Try as database
73
+ try {
74
+ const database = await this.fetchDatabase(token, formattedId);
75
+ const items = await this.queryDatabase(token, formattedId);
76
+ return this.formatDatabase(database, items);
77
+ }
78
+ catch {
79
+ this.error(`Could not fetch Notion page or database: ${id}`);
80
+ }
81
+ }
82
+ }
83
+ async searchNotion(token, query, options) {
84
+ const response = await this.apiRequest(token, 'POST', '/search', {
85
+ query,
86
+ filter: { property: 'object', value: 'page' },
87
+ page_size: options?.limit || 10,
88
+ });
89
+ const results = response.results;
90
+ if (results.length === 0) {
91
+ return {
92
+ content: `# Search: "${query}"\n\nNo results found.`,
93
+ source: `notion:search:${query}`,
94
+ title: `Search: ${query}`,
95
+ metadata: { type: 'notion', query, results: 0 },
96
+ };
97
+ }
98
+ const sections = [`# Search: "${query}"\n`];
99
+ for (const page of results) {
100
+ const title = this.getPageTitle(page);
101
+ sections.push(`## ${title}\n`);
102
+ // Fetch page content
103
+ try {
104
+ const blocks = await this.fetchBlocks(token, page.id);
105
+ sections.push(this.blocksToMarkdown(blocks));
106
+ }
107
+ catch {
108
+ sections.push('*Could not fetch page content*');
109
+ }
110
+ sections.push('\n---\n');
111
+ }
112
+ return {
113
+ content: sections.join('\n'),
114
+ source: `notion:search:${query}`,
115
+ title: `Search: ${query}`,
116
+ metadata: {
117
+ type: 'notion',
118
+ query,
119
+ results: results.length,
120
+ },
121
+ };
122
+ }
123
+ async fetchPage(token, id) {
124
+ return this.apiRequest(token, 'GET', `/pages/${id}`);
125
+ }
126
+ async fetchBlocks(token, id) {
127
+ const response = await this.apiRequest(token, 'GET', `/blocks/${id}/children?page_size=100`);
128
+ return response.results;
129
+ }
130
+ async fetchDatabase(token, id) {
131
+ return this.apiRequest(token, 'GET', `/databases/${id}`);
132
+ }
133
+ async queryDatabase(token, id) {
134
+ const response = await this.apiRequest(token, 'POST', `/databases/${id}/query`, {
135
+ page_size: 50,
136
+ });
137
+ return response.results;
138
+ }
139
+ async apiRequest(token, method, path, body) {
140
+ const response = await fetch(`${this.API_BASE}${path}`, {
141
+ method,
142
+ headers: {
143
+ Authorization: `Bearer ${token}`,
144
+ 'Notion-Version': this.API_VERSION,
145
+ 'Content-Type': 'application/json',
146
+ },
147
+ body: body ? JSON.stringify(body) : undefined,
148
+ });
149
+ if (!response.ok) {
150
+ if (response.status === 401) {
151
+ this.error('Invalid Notion token. Run: ralph-starter config set notion.token <token>');
152
+ }
153
+ if (response.status === 404) {
154
+ throw new Error('Not found');
155
+ }
156
+ const error = await response.json().catch(() => ({}));
157
+ this.error(`Notion API error: ${response.status} - ${error.message || response.statusText}`);
158
+ }
159
+ return response.json();
160
+ }
161
+ formatPage(page, blocks) {
162
+ const title = this.getPageTitle(page);
163
+ const content = this.blocksToMarkdown(blocks);
164
+ return {
165
+ content: `# ${title}\n\n${content}`,
166
+ source: `notion:${page.id}`,
167
+ title,
168
+ metadata: {
169
+ type: 'notion',
170
+ objectType: 'page',
171
+ id: page.id,
172
+ },
173
+ };
174
+ }
175
+ formatDatabase(database, items) {
176
+ const title = this.getDatabaseTitle(database);
177
+ const sections = [`# ${title}\n`];
178
+ if (items.length === 0) {
179
+ sections.push('*No items in database*');
180
+ }
181
+ else {
182
+ for (const item of items) {
183
+ const itemTitle = this.getPageTitle(item);
184
+ sections.push(`## ${itemTitle}\n`);
185
+ // Extract properties
186
+ const props = this.formatProperties(item.properties);
187
+ if (props) {
188
+ sections.push(props);
189
+ }
190
+ sections.push('');
191
+ }
192
+ }
193
+ return {
194
+ content: sections.join('\n'),
195
+ source: `notion:${database.id}`,
196
+ title,
197
+ metadata: {
198
+ type: 'notion',
199
+ objectType: 'database',
200
+ id: database.id,
201
+ items: items.length,
202
+ },
203
+ };
204
+ }
205
+ getPageTitle(page) {
206
+ const titleProp = Object.values(page.properties || {}).find((p) => p.type === 'title');
207
+ if (titleProp?.title?.[0]?.plain_text) {
208
+ return titleProp.title[0].plain_text;
209
+ }
210
+ return 'Untitled';
211
+ }
212
+ getDatabaseTitle(database) {
213
+ if (database.title?.[0]?.plain_text) {
214
+ return database.title[0].plain_text;
215
+ }
216
+ return 'Untitled Database';
217
+ }
218
+ formatProperties(properties) {
219
+ const lines = [];
220
+ for (const [key, prop] of Object.entries(properties)) {
221
+ if (prop.type === 'title')
222
+ continue; // Already used as heading
223
+ const value = this.getPropertyValue(prop);
224
+ if (value) {
225
+ lines.push(`- **${key}**: ${value}`);
226
+ }
227
+ }
228
+ return lines.join('\n');
229
+ }
230
+ getPropertyValue(prop) {
231
+ switch (prop.type) {
232
+ case 'rich_text':
233
+ return prop.rich_text?.[0]?.plain_text || null;
234
+ case 'number':
235
+ return prop.number?.toString() || null;
236
+ case 'select':
237
+ return prop.select?.name || null;
238
+ case 'multi_select':
239
+ return prop.multi_select?.map((s) => s.name).join(', ') || null;
240
+ case 'date':
241
+ return prop.date?.start || null;
242
+ case 'checkbox':
243
+ return prop.checkbox ? '✓' : '✗';
244
+ case 'url':
245
+ return prop.url || null;
246
+ case 'email':
247
+ return prop.email || null;
248
+ case 'phone_number':
249
+ return prop.phone_number || null;
250
+ case 'status':
251
+ return prop.status?.name || null;
252
+ default:
253
+ return null;
254
+ }
255
+ }
256
+ blocksToMarkdown(blocks) {
257
+ const lines = [];
258
+ for (const block of blocks) {
259
+ const md = this.blockToMarkdown(block);
260
+ if (md) {
261
+ lines.push(md);
262
+ }
263
+ }
264
+ return lines.join('\n');
265
+ }
266
+ blockToMarkdown(block) {
267
+ const content = block[block.type];
268
+ if (!content)
269
+ return '';
270
+ const text = this.richTextToPlain(content.rich_text);
271
+ switch (block.type) {
272
+ case 'paragraph':
273
+ return `${text}\n`;
274
+ case 'heading_1':
275
+ return `## ${text}\n`;
276
+ case 'heading_2':
277
+ return `### ${text}\n`;
278
+ case 'heading_3':
279
+ return `#### ${text}\n`;
280
+ case 'bulleted_list_item':
281
+ return `- ${text}`;
282
+ case 'numbered_list_item':
283
+ return `1. ${text}`;
284
+ case 'to_do': {
285
+ const checked = content.checked ? 'x' : ' ';
286
+ return `- [${checked}] ${text}`;
287
+ }
288
+ case 'toggle':
289
+ return `<details>\n<summary>${text}</summary>\n</details>\n`;
290
+ case 'quote':
291
+ return `> ${text}\n`;
292
+ case 'callout': {
293
+ const emoji = content.icon?.emoji || '💡';
294
+ return `> ${emoji} ${text}\n`;
295
+ }
296
+ case 'code': {
297
+ const lang = content.language || '';
298
+ return `\`\`\`${lang}\n${text}\n\`\`\`\n`;
299
+ }
300
+ case 'divider':
301
+ return '---\n';
302
+ case 'image': {
303
+ const url = content.file?.url || content.external?.url || '';
304
+ return url ? `![Image](${url})\n` : '';
305
+ }
306
+ default:
307
+ return text ? `${text}\n` : '';
308
+ }
309
+ }
310
+ richTextToPlain(richText) {
311
+ if (!richText)
312
+ return '';
313
+ return richText.map((t) => t.plain_text || '').join('');
314
+ }
315
+ getHelp() {
316
+ return `
317
+ notion: Fetch pages and databases from Notion
318
+
319
+ Usage:
320
+ ralph-starter run --from notion --project "page-id-or-url"
321
+ ralph-starter run --from notion --project "search query"
322
+
323
+ Options:
324
+ --project Page URL, page ID, database ID, or search query
325
+ --limit Maximum results for search (default: 10)
326
+
327
+ Setup:
328
+ 1. Create integration at: https://www.notion.so/my-integrations
329
+ 2. Run: ralph-starter config set notion.token <token>
330
+ 3. Share pages/databases with your integration in Notion
331
+
332
+ Examples:
333
+ ralph-starter run --from notion --project "https://notion.so/My-Spec-abc123..."
334
+ ralph-starter run --from notion --project "Product Requirements"
335
+ ralph-starter run --from notion --project "abc123def456789..."
336
+
337
+ Notes:
338
+ - Pages must be shared with your integration to be accessible
339
+ - Search only finds pages, not databases
340
+ `.trim();
341
+ }
342
+ }
343
+ //# sourceMappingURL=notion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notion.js","sourceRoot":"","sources":["../../../src/sources/integrations/notion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { IntegrationSource } from '../base.js';
2
+ import type { SourceOptions, SourceResult } from '../types.js';
3
+ /**
4
+ * Todoist source - fetches tasks from Todoist projects
5
+ *
6
+ * Requires API token from: https://todoist.com/prefs/integrations
7
+ */
8
+ export declare class TodoistSource extends IntegrationSource {
9
+ name: string;
10
+ description: string;
11
+ private readonly API_BASE;
12
+ fetch(identifier: string, options?: SourceOptions): Promise<SourceResult>;
13
+ private fetchProjects;
14
+ private fetchTasks;
15
+ private formatTasks;
16
+ getHelp(): string;
17
+ }
18
+ //# sourceMappingURL=todoist.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todoist.d.ts","sourceRoot":"","sources":["../../../src/sources/integrations/todoist.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;;;;GAIG;AACH,qBAAa,aAAc,SAAQ,iBAAiB;IAClD,IAAI,SAAa;IACjB,WAAW,SAAuC;IAElD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAqC;IAExD,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;YAgCjE,aAAa;YAmBb,UAAU;IAsCxB,OAAO,CAAC,WAAW;IAwEnB,OAAO,IAAI,MAAM;CAsBlB"}
@@ -0,0 +1,154 @@
1
+ import { IntegrationSource } from '../base.js';
2
+ /**
3
+ * Todoist source - fetches tasks from Todoist projects
4
+ *
5
+ * Requires API token from: https://todoist.com/prefs/integrations
6
+ */
7
+ export class TodoistSource extends IntegrationSource {
8
+ name = 'todoist';
9
+ description = 'Fetch tasks from Todoist projects';
10
+ API_BASE = 'https://api.todoist.com/rest/v2';
11
+ async fetch(identifier, options) {
12
+ const token = await this.getApiKey();
13
+ // identifier can be project name or 'all'
14
+ const projectName = options?.project || identifier;
15
+ // Get projects to find the right one
16
+ const projects = await this.fetchProjects(token);
17
+ let projectId = null;
18
+ let projectTitle = 'All Tasks';
19
+ if (projectName && projectName !== 'all') {
20
+ const project = projects.find((p) => p.name.toLowerCase() === projectName.toLowerCase() || p.id === projectName);
21
+ if (!project) {
22
+ const available = projects.map((p) => p.name).join(', ');
23
+ this.error(`Project not found: ${projectName}. Available: ${available}`);
24
+ }
25
+ projectId = project.id;
26
+ projectTitle = project.name;
27
+ }
28
+ // Fetch tasks
29
+ const tasks = await this.fetchTasks(token, projectId, options);
30
+ return this.formatTasks(tasks, projectTitle);
31
+ }
32
+ async fetchProjects(token) {
33
+ const response = await fetch(`${this.API_BASE}/projects`, {
34
+ headers: {
35
+ Authorization: `Bearer ${token}`,
36
+ },
37
+ });
38
+ if (!response.ok) {
39
+ if (response.status === 401) {
40
+ this.error('Invalid Todoist API token. Run: ralph-starter config set todoist.apiKey <token>');
41
+ }
42
+ this.error(`Todoist API error: ${response.status} ${response.statusText}`);
43
+ }
44
+ return response.json();
45
+ }
46
+ async fetchTasks(token, projectId, options) {
47
+ const params = new URLSearchParams();
48
+ if (projectId) {
49
+ params.set('project_id', projectId);
50
+ }
51
+ const url = `${this.API_BASE}/tasks?${params.toString()}`;
52
+ const response = await fetch(url, {
53
+ headers: {
54
+ Authorization: `Bearer ${token}`,
55
+ },
56
+ });
57
+ if (!response.ok) {
58
+ this.error(`Todoist API error: ${response.status} ${response.statusText}`);
59
+ }
60
+ let tasks = await response.json();
61
+ // Filter by label if specified
62
+ if (options?.label) {
63
+ const labelLower = options.label.toLowerCase();
64
+ tasks = tasks.filter((t) => t.labels.some((l) => l.toLowerCase() === labelLower));
65
+ }
66
+ // Apply limit
67
+ const limit = options?.limit || 50;
68
+ tasks = tasks.slice(0, limit);
69
+ return tasks;
70
+ }
71
+ formatTasks(tasks, projectTitle) {
72
+ if (tasks.length === 0) {
73
+ return {
74
+ content: `# ${projectTitle}\n\nNo tasks found.`,
75
+ source: `todoist:${projectTitle}`,
76
+ title: projectTitle,
77
+ metadata: { type: 'todoist', tasks: 0 },
78
+ };
79
+ }
80
+ const sections = [`# ${projectTitle}\n`];
81
+ // Group by priority
82
+ const priorities = {
83
+ 4: [], // p1 (urgent)
84
+ 3: [], // p2
85
+ 2: [], // p3
86
+ 1: [], // p4 (default)
87
+ };
88
+ for (const task of tasks) {
89
+ priorities[task.priority].push(task);
90
+ }
91
+ const priorityNames = {
92
+ 4: '🔴 Priority 1 (Urgent)',
93
+ 3: '🟠 Priority 2 (High)',
94
+ 2: '🟡 Priority 3 (Medium)',
95
+ 1: '⚪ Priority 4 (Normal)',
96
+ };
97
+ for (const priority of [4, 3, 2, 1]) {
98
+ const priorityTasks = priorities[priority];
99
+ if (priorityTasks.length === 0)
100
+ continue;
101
+ sections.push(`\n## ${priorityNames[priority]}\n`);
102
+ for (const task of priorityTasks) {
103
+ sections.push(`### ${task.content}`);
104
+ if (task.description) {
105
+ sections.push('', task.description);
106
+ }
107
+ const meta = [];
108
+ if (task.labels.length > 0) {
109
+ meta.push(`Labels: ${task.labels.join(', ')}`);
110
+ }
111
+ if (task.due) {
112
+ meta.push(`Due: ${task.due.string}`);
113
+ }
114
+ if (meta.length > 0) {
115
+ sections.push('', `*${meta.join(' | ')}*`);
116
+ }
117
+ sections.push('');
118
+ }
119
+ }
120
+ return {
121
+ content: sections.join('\n'),
122
+ source: `todoist:${projectTitle}`,
123
+ title: projectTitle,
124
+ metadata: {
125
+ type: 'todoist',
126
+ project: projectTitle,
127
+ tasks: tasks.length,
128
+ },
129
+ };
130
+ }
131
+ getHelp() {
132
+ return `
133
+ todoist: Fetch tasks from Todoist projects
134
+
135
+ Usage:
136
+ ralph-starter run --from todoist --project "My Project"
137
+ ralph-starter run --from todoist --project all --label "feature"
138
+
139
+ Options:
140
+ --project Project name or 'all' for all projects
141
+ --label Filter by label name
142
+ --limit Maximum tasks to fetch (default: 50)
143
+
144
+ Setup:
145
+ 1. Get API token from: https://todoist.com/prefs/integrations
146
+ 2. Run: ralph-starter config set todoist.apiKey <token>
147
+
148
+ Examples:
149
+ ralph-starter run --from todoist --project "App Ideas"
150
+ ralph-starter run --from todoist --project all --label "mvp"
151
+ `.trim();
152
+ }
153
+ }
154
+ //# sourceMappingURL=todoist.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"todoist.js","sourceRoot":"","sources":["../../../src/sources/integrations/todoist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,106 @@
1
+ /**
2
+ * Input source types for ralph-starter
3
+ *
4
+ * Sources allow fetching specs from various locations:
5
+ * - Built-in: files, URLs, PDFs
6
+ * - Integrations: Todoist, Linear, Notion, GitHub
7
+ */
8
+ /**
9
+ * Result from fetching a source
10
+ */
11
+ export interface SourceResult {
12
+ /** The spec content in markdown format */
13
+ content: string;
14
+ /** Original source identifier */
15
+ source: string;
16
+ /** Optional title/name extracted from source */
17
+ title?: string;
18
+ /** Metadata about the fetch */
19
+ metadata?: Record<string, unknown>;
20
+ }
21
+ /**
22
+ * Options passed to source fetch
23
+ */
24
+ export interface SourceOptions {
25
+ /** Project name/ID for task app integrations */
26
+ project?: string;
27
+ /** Label/tag filter for task app integrations */
28
+ label?: string;
29
+ /** Status filter (e.g., 'open', 'in_progress') */
30
+ status?: string;
31
+ /** Maximum items to fetch */
32
+ limit?: number;
33
+ /** Custom headers for URL fetches */
34
+ headers?: Record<string, string>;
35
+ }
36
+ /**
37
+ * Credentials for authenticated sources
38
+ */
39
+ export interface SourceCredentials {
40
+ apiKey?: string;
41
+ token?: string;
42
+ secret?: string;
43
+ [key: string]: string | undefined;
44
+ }
45
+ /**
46
+ * Source configuration stored in config file
47
+ */
48
+ export interface SourceConfig {
49
+ credentials?: SourceCredentials;
50
+ defaults?: SourceOptions;
51
+ enabled?: boolean;
52
+ }
53
+ /**
54
+ * All sources configuration
55
+ */
56
+ export interface SourcesConfig {
57
+ sources: Record<string, SourceConfig>;
58
+ }
59
+ /**
60
+ * Input source interface
61
+ * All sources (builtin and integrations) implement this
62
+ */
63
+ export interface InputSource {
64
+ /** Unique identifier for the source */
65
+ name: string;
66
+ /** Human-readable description */
67
+ description: string;
68
+ /** Source type category */
69
+ type: 'builtin' | 'integration';
70
+ /**
71
+ * Check if this source is available
72
+ * For integrations, checks if credentials are configured
73
+ * For builtins, checks if dependencies are available
74
+ */
75
+ isAvailable(): Promise<boolean>;
76
+ /**
77
+ * Whether this source requires authentication
78
+ */
79
+ requiresAuth(): boolean;
80
+ /**
81
+ * Fetch content from this source
82
+ * @param identifier - Source-specific identifier (path, URL, project name, etc.)
83
+ * @param options - Additional options for the fetch
84
+ */
85
+ fetch(identifier: string, options?: SourceOptions): Promise<SourceResult>;
86
+ /**
87
+ * Validate that credentials are configured correctly
88
+ * Only relevant for sources that require auth
89
+ */
90
+ validateCredentials?(): Promise<boolean>;
91
+ /**
92
+ * Get help text for using this source
93
+ */
94
+ getHelp(): string;
95
+ }
96
+ /**
97
+ * Source metadata for registry
98
+ */
99
+ export interface SourceInfo {
100
+ name: string;
101
+ description: string;
102
+ type: 'builtin' | 'integration';
103
+ requiresAuth: boolean;
104
+ available: boolean;
105
+ }
106
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAC;IAChB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qCAAqC;IACrC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,uCAAuC;IACvC,IAAI,EAAE,MAAM,CAAC;IAEb,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IAEpB,2BAA2B;IAC3B,IAAI,EAAE,SAAS,GAAG,aAAa,CAAC;IAEhC;;;;OAIG;IACH,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEhC;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC;IAExB;;;;OAIG;IACH,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE1E;;;OAGG;IACH,mBAAmB,CAAC,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;IAEzC;;OAEG;IACH,OAAO,IAAI,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,GAAG,aAAa,CAAC;IAChC,YAAY,EAAE,OAAO,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;CACpB"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Input source types for ralph-starter
3
+ *
4
+ * Sources allow fetching specs from various locations:
5
+ * - Built-in: files, URLs, PDFs
6
+ * - Integrations: Todoist, Linear, Notion, GitHub
7
+ */
8
+ export {};
9
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sources/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}