@dxos/plugin-magazine 0.0.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 (390) hide show
  1. package/LICENSE +105 -0
  2. package/PLUGIN.mdl +653 -0
  3. package/dist/lib/neutral/FeedArticle-PEWCFFSP.mjs +90 -0
  4. package/dist/lib/neutral/FeedArticle-PEWCFFSP.mjs.map +7 -0
  5. package/dist/lib/neutral/FeedProperties-EIO7IZOA.mjs +97 -0
  6. package/dist/lib/neutral/FeedProperties-EIO7IZOA.mjs.map +7 -0
  7. package/dist/lib/neutral/MagazineArticle-DEUTR23F.mjs +325 -0
  8. package/dist/lib/neutral/MagazineArticle-DEUTR23F.mjs.map +7 -0
  9. package/dist/lib/neutral/MagazinePlugin.mjs +62 -0
  10. package/dist/lib/neutral/MagazinePlugin.mjs.map +7 -0
  11. package/dist/lib/neutral/MagazinePlugin.workerd.mjs +12 -0
  12. package/dist/lib/neutral/MagazinePlugin.workerd.mjs.map +7 -0
  13. package/dist/lib/neutral/PostArticle-RERHXPXC.mjs +230 -0
  14. package/dist/lib/neutral/PostArticle-RERHXPXC.mjs.map +7 -0
  15. package/dist/lib/neutral/PostCard-VDGN7BBA.mjs +60 -0
  16. package/dist/lib/neutral/PostCard-VDGN7BBA.mjs.map +7 -0
  17. package/dist/lib/neutral/app-graph-builder-JDPRBVHL.mjs +121 -0
  18. package/dist/lib/neutral/app-graph-builder-JDPRBVHL.mjs.map +7 -0
  19. package/dist/lib/neutral/capabilities/index.mjs +21 -0
  20. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  21. package/dist/lib/neutral/chunk-3K4AQKBZ.mjs +12 -0
  22. package/dist/lib/neutral/chunk-3K4AQKBZ.mjs.map +7 -0
  23. package/dist/lib/neutral/chunk-AFPBWBTK.mjs +591 -0
  24. package/dist/lib/neutral/chunk-AFPBWBTK.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-APQRTYT3.mjs +57 -0
  26. package/dist/lib/neutral/chunk-APQRTYT3.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-GU725ZF4.mjs +11 -0
  28. package/dist/lib/neutral/chunk-GU725ZF4.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  30. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-JFPR6OV4.mjs +60 -0
  32. package/dist/lib/neutral/chunk-JFPR6OV4.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-KTYLUOUG.mjs +36 -0
  34. package/dist/lib/neutral/chunk-KTYLUOUG.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-MBPX7RPI.mjs +14 -0
  36. package/dist/lib/neutral/chunk-MBPX7RPI.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-MJ2AY2CK.mjs +8 -0
  38. package/dist/lib/neutral/chunk-MJ2AY2CK.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-OYCDRSWB.mjs +624 -0
  40. package/dist/lib/neutral/chunk-OYCDRSWB.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-SAWKLGJU.mjs +28 -0
  42. package/dist/lib/neutral/chunk-SAWKLGJU.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-XCNCK47N.mjs +15 -0
  44. package/dist/lib/neutral/chunk-XCNCK47N.mjs.map +7 -0
  45. package/dist/lib/neutral/clear-magazine-KNY4OWY4.mjs +59 -0
  46. package/dist/lib/neutral/clear-magazine-KNY4OWY4.mjs.map +7 -0
  47. package/dist/lib/neutral/components/index.mjs +338 -0
  48. package/dist/lib/neutral/components/index.mjs.map +7 -0
  49. package/dist/lib/neutral/containers/index.mjs +17 -0
  50. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  51. package/dist/lib/neutral/create-object-SYZMRR4H.mjs +98 -0
  52. package/dist/lib/neutral/create-object-SYZMRR4H.mjs.map +7 -0
  53. package/dist/lib/neutral/curate-magazine-MA6OLK2X.mjs +184 -0
  54. package/dist/lib/neutral/curate-magazine-MA6OLK2X.mjs.map +7 -0
  55. package/dist/lib/neutral/fetch-article-content-CZO6D3QD.mjs +31 -0
  56. package/dist/lib/neutral/fetch-article-content-CZO6D3QD.mjs.map +7 -0
  57. package/dist/lib/neutral/index.mjs +18 -0
  58. package/dist/lib/neutral/index.mjs.map +7 -0
  59. package/dist/lib/neutral/load-post-content-XGL6VFF6.mjs +65 -0
  60. package/dist/lib/neutral/load-post-content-XGL6VFF6.mjs.map +7 -0
  61. package/dist/lib/neutral/meta.json +1 -0
  62. package/dist/lib/neutral/meta.mjs +8 -0
  63. package/dist/lib/neutral/meta.mjs.map +7 -0
  64. package/dist/lib/neutral/navigation-resolver-IN4OMCDR.mjs +18 -0
  65. package/dist/lib/neutral/navigation-resolver-IN4OMCDR.mjs.map +7 -0
  66. package/dist/lib/neutral/operation-handler-JE3743BU.mjs +8 -0
  67. package/dist/lib/neutral/operation-handler-JE3743BU.mjs.map +7 -0
  68. package/dist/lib/neutral/operations/index.mjs +8 -0
  69. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  70. package/dist/lib/neutral/plugin.mjs +16 -0
  71. package/dist/lib/neutral/plugin.mjs.map +7 -0
  72. package/dist/lib/neutral/plugin.workerd.mjs +16 -0
  73. package/dist/lib/neutral/plugin.workerd.mjs.map +7 -0
  74. package/dist/lib/neutral/react-surface-TZESAMG2.mjs +60 -0
  75. package/dist/lib/neutral/react-surface-TZESAMG2.mjs.map +7 -0
  76. package/dist/lib/neutral/routine-templates-A2XTJOZO.mjs +52 -0
  77. package/dist/lib/neutral/routine-templates-A2XTJOZO.mjs.map +7 -0
  78. package/dist/lib/neutral/skill-definition-3KLMUEC5.mjs +8 -0
  79. package/dist/lib/neutral/skill-definition-3KLMUEC5.mjs.map +7 -0
  80. package/dist/lib/neutral/skills/index.mjs +46 -0
  81. package/dist/lib/neutral/skills/index.mjs.map +7 -0
  82. package/dist/lib/neutral/sync-feed-UZX2XHSQ.mjs +99 -0
  83. package/dist/lib/neutral/sync-feed-UZX2XHSQ.mjs.map +7 -0
  84. package/dist/lib/neutral/translations.mjs +81 -0
  85. package/dist/lib/neutral/translations.mjs.map +7 -0
  86. package/dist/lib/neutral/types/index.mjs +14 -0
  87. package/dist/lib/neutral/types/index.mjs.map +7 -0
  88. package/dist/types/dx.config.d.ts +28 -0
  89. package/dist/types/dx.config.d.ts.map +1 -0
  90. package/dist/types/src/MagazinePlugin.d.ts +4 -0
  91. package/dist/types/src/MagazinePlugin.d.ts.map +1 -0
  92. package/dist/types/src/MagazinePlugin.test.d.ts +2 -0
  93. package/dist/types/src/MagazinePlugin.test.d.ts.map +1 -0
  94. package/dist/types/src/MagazinePlugin.workerd.d.ts +4 -0
  95. package/dist/types/src/MagazinePlugin.workerd.d.ts.map +1 -0
  96. package/dist/types/src/atoms/atoms.test.d.ts +2 -0
  97. package/dist/types/src/atoms/atoms.test.d.ts.map +1 -0
  98. package/dist/types/src/atoms/index.d.ts +7 -0
  99. package/dist/types/src/atoms/index.d.ts.map +1 -0
  100. package/dist/types/src/atoms/magazine-posts.d.ts +16 -0
  101. package/dist/types/src/atoms/magazine-posts.d.ts.map +1 -0
  102. package/dist/types/src/atoms/post-content.d.ts +7 -0
  103. package/dist/types/src/atoms/post-content.d.ts.map +1 -0
  104. package/dist/types/src/atoms/post-curation.d.ts +16 -0
  105. package/dist/types/src/atoms/post-curation.d.ts.map +1 -0
  106. package/dist/types/src/atoms/post-display.d.ts +22 -0
  107. package/dist/types/src/atoms/post-display.d.ts.map +1 -0
  108. package/dist/types/src/atoms/post-read.d.ts +14 -0
  109. package/dist/types/src/atoms/post-read.d.ts.map +1 -0
  110. package/dist/types/src/atoms/post-tags.d.ts +16 -0
  111. package/dist/types/src/atoms/post-tags.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/app-graph-builder.d.ts +5 -0
  113. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -0
  114. package/dist/types/src/capabilities/create-object.d.ts +5 -0
  115. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  116. package/dist/types/src/capabilities/index.d.ts +10 -0
  117. package/dist/types/src/capabilities/index.d.ts.map +1 -0
  118. package/dist/types/src/capabilities/navigation-resolver.d.ts +5 -0
  119. package/dist/types/src/capabilities/navigation-resolver.d.ts.map +1 -0
  120. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  121. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  122. package/dist/types/src/capabilities/react-surface.d.ts +5 -0
  123. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -0
  124. package/dist/types/src/capabilities/routine-templates.d.ts +5 -0
  125. package/dist/types/src/capabilities/routine-templates.d.ts.map +1 -0
  126. package/dist/types/src/capabilities/skill-definition.d.ts +5 -0
  127. package/dist/types/src/capabilities/skill-definition.d.ts.map +1 -0
  128. package/dist/types/src/components/PostContent/PostContent.d.ts +30 -0
  129. package/dist/types/src/components/PostContent/PostContent.d.ts.map +1 -0
  130. package/dist/types/src/components/PostContent/PostContent.test.d.ts +2 -0
  131. package/dist/types/src/components/PostContent/PostContent.test.d.ts.map +1 -0
  132. package/dist/types/src/components/PostContent/index.d.ts +2 -0
  133. package/dist/types/src/components/PostContent/index.d.ts.map +1 -0
  134. package/dist/types/src/components/PostStack/PostStack.d.ts +17 -0
  135. package/dist/types/src/components/PostStack/PostStack.d.ts.map +1 -0
  136. package/dist/types/src/components/PostStack/PostStack.stories.d.ts +10 -0
  137. package/dist/types/src/components/PostStack/PostStack.stories.d.ts.map +1 -0
  138. package/dist/types/src/components/PostStack/index.d.ts +2 -0
  139. package/dist/types/src/components/PostStack/index.d.ts.map +1 -0
  140. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.d.ts +23 -0
  141. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.d.ts.map +1 -0
  142. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.stories.d.ts +8 -0
  143. package/dist/types/src/components/SubscriptionStack/SubscriptionStack.stories.d.ts.map +1 -0
  144. package/dist/types/src/components/SubscriptionStack/index.d.ts +2 -0
  145. package/dist/types/src/components/SubscriptionStack/index.d.ts.map +1 -0
  146. package/dist/types/src/components/index.d.ts +4 -0
  147. package/dist/types/src/components/index.d.ts.map +1 -0
  148. package/dist/types/src/containers/FeedArticle/FeedArticle.d.ts +6 -0
  149. package/dist/types/src/containers/FeedArticle/FeedArticle.d.ts.map +1 -0
  150. package/dist/types/src/containers/FeedArticle/FeedArticle.stories.d.ts +12 -0
  151. package/dist/types/src/containers/FeedArticle/FeedArticle.stories.d.ts.map +1 -0
  152. package/dist/types/src/containers/FeedArticle/FeedToolbar.d.ts +10 -0
  153. package/dist/types/src/containers/FeedArticle/FeedToolbar.d.ts.map +1 -0
  154. package/dist/types/src/containers/FeedArticle/index.d.ts +2 -0
  155. package/dist/types/src/containers/FeedArticle/index.d.ts.map +1 -0
  156. package/dist/types/src/containers/FeedProperties/FeedProperties.d.ts +6 -0
  157. package/dist/types/src/containers/FeedProperties/FeedProperties.d.ts.map +1 -0
  158. package/dist/types/src/containers/FeedProperties/index.d.ts +2 -0
  159. package/dist/types/src/containers/FeedProperties/index.d.ts.map +1 -0
  160. package/dist/types/src/containers/MagazineArticle/MagazineArticle.d.ts +6 -0
  161. package/dist/types/src/containers/MagazineArticle/MagazineArticle.d.ts.map +1 -0
  162. package/dist/types/src/containers/MagazineArticle/MagazineArticle.stories.d.ts +9 -0
  163. package/dist/types/src/containers/MagazineArticle/MagazineArticle.stories.d.ts.map +1 -0
  164. package/dist/types/src/containers/MagazineArticle/MagazineTile.d.ts +11 -0
  165. package/dist/types/src/containers/MagazineArticle/MagazineTile.d.ts.map +1 -0
  166. package/dist/types/src/containers/MagazineArticle/index.d.ts +2 -0
  167. package/dist/types/src/containers/MagazineArticle/index.d.ts.map +1 -0
  168. package/dist/types/src/containers/MagazineArticle/useToolbar.d.ts +18 -0
  169. package/dist/types/src/containers/MagazineArticle/useToolbar.d.ts.map +1 -0
  170. package/dist/types/src/containers/PostArticle/PostArticle.d.ts +6 -0
  171. package/dist/types/src/containers/PostArticle/PostArticle.d.ts.map +1 -0
  172. package/dist/types/src/containers/PostArticle/PostArticle.stories.d.ts +8 -0
  173. package/dist/types/src/containers/PostArticle/PostArticle.stories.d.ts.map +1 -0
  174. package/dist/types/src/containers/PostArticle/PostToolbar.d.ts +19 -0
  175. package/dist/types/src/containers/PostArticle/PostToolbar.d.ts.map +1 -0
  176. package/dist/types/src/containers/PostArticle/index.d.ts +2 -0
  177. package/dist/types/src/containers/PostArticle/index.d.ts.map +1 -0
  178. package/dist/types/src/containers/PostCard/PostCard.d.ts +11 -0
  179. package/dist/types/src/containers/PostCard/PostCard.d.ts.map +1 -0
  180. package/dist/types/src/containers/PostCard/index.d.ts +2 -0
  181. package/dist/types/src/containers/PostCard/index.d.ts.map +1 -0
  182. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.d.ts +5 -0
  183. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.d.ts.map +1 -0
  184. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.d.ts +8 -0
  185. package/dist/types/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.d.ts.map +1 -0
  186. package/dist/types/src/containers/SubscriptionsArticle/index.d.ts +2 -0
  187. package/dist/types/src/containers/SubscriptionsArticle/index.d.ts.map +1 -0
  188. package/dist/types/src/containers/index.d.ts +7 -0
  189. package/dist/types/src/containers/index.d.ts.map +1 -0
  190. package/dist/types/src/index.d.ts +3 -0
  191. package/dist/types/src/index.d.ts.map +1 -0
  192. package/dist/types/src/meta.d.ts +33 -0
  193. package/dist/types/src/meta.d.ts.map +1 -0
  194. package/dist/types/src/operations/clear-magazine.d.ts +10 -0
  195. package/dist/types/src/operations/clear-magazine.d.ts.map +1 -0
  196. package/dist/types/src/operations/curate-magazine.d.ts +25 -0
  197. package/dist/types/src/operations/curate-magazine.d.ts.map +1 -0
  198. package/dist/types/src/operations/curate-magazine.skill.test.d.ts +2 -0
  199. package/dist/types/src/operations/curate-magazine.skill.test.d.ts.map +1 -0
  200. package/dist/types/src/operations/curate-magazine.test.d.ts +2 -0
  201. package/dist/types/src/operations/curate-magazine.test.d.ts.map +1 -0
  202. package/dist/types/src/operations/extraction/article.d.ts +37 -0
  203. package/dist/types/src/operations/extraction/article.d.ts.map +1 -0
  204. package/dist/types/src/operations/extraction/article.test.d.ts +2 -0
  205. package/dist/types/src/operations/extraction/article.test.d.ts.map +1 -0
  206. package/dist/types/src/operations/extraction/index.d.ts +2 -0
  207. package/dist/types/src/operations/extraction/index.d.ts.map +1 -0
  208. package/dist/types/src/operations/fetch-article-content.d.ts +5 -0
  209. package/dist/types/src/operations/fetch-article-content.d.ts.map +1 -0
  210. package/dist/types/src/operations/index.d.ts +3 -0
  211. package/dist/types/src/operations/index.d.ts.map +1 -0
  212. package/dist/types/src/operations/load-post-content.d.ts +8 -0
  213. package/dist/types/src/operations/load-post-content.d.ts.map +1 -0
  214. package/dist/types/src/operations/sources/article.d.ts +24 -0
  215. package/dist/types/src/operations/sources/article.d.ts.map +1 -0
  216. package/dist/types/src/operations/sources/cors.d.ts +12 -0
  217. package/dist/types/src/operations/sources/cors.d.ts.map +1 -0
  218. package/dist/types/src/operations/sources/feed-fetcher.d.ts +22 -0
  219. package/dist/types/src/operations/sources/feed-fetcher.d.ts.map +1 -0
  220. package/dist/types/src/operations/sources/feed-fetcher.test.d.ts +2 -0
  221. package/dist/types/src/operations/sources/feed-fetcher.test.d.ts.map +1 -0
  222. package/dist/types/src/operations/sources/http.d.ts +9 -0
  223. package/dist/types/src/operations/sources/http.d.ts.map +1 -0
  224. package/dist/types/src/operations/sources/index.d.ts +6 -0
  225. package/dist/types/src/operations/sources/index.d.ts.map +1 -0
  226. package/dist/types/src/operations/sources/rss.d.ts +4 -0
  227. package/dist/types/src/operations/sources/rss.d.ts.map +1 -0
  228. package/dist/types/src/operations/sources/rss.test.d.ts +2 -0
  229. package/dist/types/src/operations/sources/rss.test.d.ts.map +1 -0
  230. package/dist/types/src/operations/sources/standard-site.d.ts +33 -0
  231. package/dist/types/src/operations/sources/standard-site.d.ts.map +1 -0
  232. package/dist/types/src/operations/sync-feed.d.ts +5 -0
  233. package/dist/types/src/operations/sync-feed.d.ts.map +1 -0
  234. package/dist/types/src/operations/sync-feed.test.d.ts +2 -0
  235. package/dist/types/src/operations/sync-feed.test.d.ts.map +1 -0
  236. package/dist/types/src/operations/util.d.ts +25 -0
  237. package/dist/types/src/operations/util.d.ts.map +1 -0
  238. package/dist/types/src/operations/util.test.d.ts +2 -0
  239. package/dist/types/src/operations/util.test.d.ts.map +1 -0
  240. package/dist/types/src/paths.d.ts +3 -0
  241. package/dist/types/src/paths.d.ts.map +1 -0
  242. package/dist/types/src/plugin.d.ts +4 -0
  243. package/dist/types/src/plugin.d.ts.map +1 -0
  244. package/dist/types/src/plugin.workerd.d.ts +3 -0
  245. package/dist/types/src/plugin.workerd.d.ts.map +1 -0
  246. package/dist/types/src/skills/index.d.ts +2 -0
  247. package/dist/types/src/skills/index.d.ts.map +1 -0
  248. package/dist/types/src/skills/magazine-skill.d.ts +4 -0
  249. package/dist/types/src/skills/magazine-skill.d.ts.map +1 -0
  250. package/dist/types/src/stories/ArticleExtractor.stories.d.ts +267 -0
  251. package/dist/types/src/stories/ArticleExtractor.stories.d.ts.map +1 -0
  252. package/dist/types/src/stories/MagazineCurate.stories.d.ts +32 -0
  253. package/dist/types/src/stories/MagazineCurate.stories.d.ts.map +1 -0
  254. package/dist/types/src/stories/theregister-fixture.test.d.ts +2 -0
  255. package/dist/types/src/stories/theregister-fixture.test.d.ts.map +1 -0
  256. package/dist/types/src/templates/magazine-curation.d.ts +7 -0
  257. package/dist/types/src/templates/magazine-curation.d.ts.map +1 -0
  258. package/dist/types/src/testing/builder.d.ts +28 -0
  259. package/dist/types/src/testing/builder.d.ts.map +1 -0
  260. package/dist/types/src/testing/index.d.ts +2 -0
  261. package/dist/types/src/testing/index.d.ts.map +1 -0
  262. package/dist/types/src/translations.d.ts +247 -0
  263. package/dist/types/src/translations.d.ts.map +1 -0
  264. package/dist/types/src/types/CreateSubscription.d.ts +29 -0
  265. package/dist/types/src/types/CreateSubscription.d.ts.map +1 -0
  266. package/dist/types/src/types/FeedOperation.d.ts +52 -0
  267. package/dist/types/src/types/FeedOperation.d.ts.map +1 -0
  268. package/dist/types/src/types/Magazine.d.ts +87 -0
  269. package/dist/types/src/types/Magazine.d.ts.map +1 -0
  270. package/dist/types/src/types/Magazine.test.d.ts +2 -0
  271. package/dist/types/src/types/Magazine.test.d.ts.map +1 -0
  272. package/dist/types/src/types/Subscription.d.ts +144 -0
  273. package/dist/types/src/types/Subscription.d.ts.map +1 -0
  274. package/dist/types/src/types/Subscription.test.d.ts +2 -0
  275. package/dist/types/src/types/Subscription.test.d.ts.map +1 -0
  276. package/dist/types/src/types/index.d.ts +5 -0
  277. package/dist/types/src/types/index.d.ts.map +1 -0
  278. package/dist/types/src/util/date.d.ts +8 -0
  279. package/dist/types/src/util/date.d.ts.map +1 -0
  280. package/dist/types/src/util/index.d.ts +4 -0
  281. package/dist/types/src/util/index.d.ts.map +1 -0
  282. package/dist/types/src/util/post-content.d.ts +14 -0
  283. package/dist/types/src/util/post-content.d.ts.map +1 -0
  284. package/dist/types/src/util/text.d.ts +18 -0
  285. package/dist/types/src/util/text.d.ts.map +1 -0
  286. package/dist/types/tsconfig.tsbuildinfo +1 -0
  287. package/dx.config.ts +48 -0
  288. package/package.json +164 -0
  289. package/src/MagazinePlugin.test.ts +36 -0
  290. package/src/MagazinePlugin.tsx +61 -0
  291. package/src/MagazinePlugin.workerd.ts +31 -0
  292. package/src/atoms/atoms.test.ts +323 -0
  293. package/src/atoms/index.ts +10 -0
  294. package/src/atoms/magazine-posts.ts +70 -0
  295. package/src/atoms/post-content.ts +34 -0
  296. package/src/atoms/post-curation.ts +36 -0
  297. package/src/atoms/post-display.ts +59 -0
  298. package/src/atoms/post-read.ts +40 -0
  299. package/src/atoms/post-tags.ts +66 -0
  300. package/src/capabilities/app-graph-builder.ts +125 -0
  301. package/src/capabilities/create-object.ts +127 -0
  302. package/src/capabilities/index.ts +17 -0
  303. package/src/capabilities/navigation-resolver.ts +21 -0
  304. package/src/capabilities/operation-handler.ts +16 -0
  305. package/src/capabilities/react-surface.tsx +53 -0
  306. package/src/capabilities/routine-templates.ts +16 -0
  307. package/src/capabilities/skill-definition.ts +14 -0
  308. package/src/components/PostContent/PostContent.test.ts +81 -0
  309. package/src/components/PostContent/PostContent.tsx +111 -0
  310. package/src/components/PostContent/index.ts +5 -0
  311. package/src/components/PostStack/PostStack.stories.tsx +39 -0
  312. package/src/components/PostStack/PostStack.tsx +151 -0
  313. package/src/components/PostStack/index.ts +5 -0
  314. package/src/components/SubscriptionStack/SubscriptionStack.stories.tsx +52 -0
  315. package/src/components/SubscriptionStack/SubscriptionStack.tsx +161 -0
  316. package/src/components/SubscriptionStack/index.ts +5 -0
  317. package/src/components/index.ts +7 -0
  318. package/src/containers/FeedArticle/FeedArticle.stories.tsx +102 -0
  319. package/src/containers/FeedArticle/FeedArticle.tsx +68 -0
  320. package/src/containers/FeedArticle/FeedToolbar.tsx +47 -0
  321. package/src/containers/FeedArticle/index.ts +5 -0
  322. package/src/containers/FeedProperties/FeedProperties.tsx +107 -0
  323. package/src/containers/FeedProperties/index.ts +5 -0
  324. package/src/containers/MagazineArticle/MagazineArticle.stories.tsx +244 -0
  325. package/src/containers/MagazineArticle/MagazineArticle.tsx +146 -0
  326. package/src/containers/MagazineArticle/MagazineTile.tsx +88 -0
  327. package/src/containers/MagazineArticle/index.ts +5 -0
  328. package/src/containers/MagazineArticle/useToolbar.tsx +145 -0
  329. package/src/containers/PostArticle/PostArticle.stories.tsx +117 -0
  330. package/src/containers/PostArticle/PostArticle.tsx +140 -0
  331. package/src/containers/PostArticle/PostToolbar.tsx +120 -0
  332. package/src/containers/PostArticle/index.ts +5 -0
  333. package/src/containers/PostCard/PostCard.tsx +70 -0
  334. package/src/containers/PostCard/index.ts +5 -0
  335. package/src/containers/SubscriptionsArticle/SubscriptionsArticle.stories.tsx +80 -0
  336. package/src/containers/SubscriptionsArticle/SubscriptionsArticle.tsx +99 -0
  337. package/src/containers/SubscriptionsArticle/index.ts +5 -0
  338. package/src/containers/index.ts +11 -0
  339. package/src/index.ts +6 -0
  340. package/src/meta.ts +9 -0
  341. package/src/operations/clear-magazine.ts +83 -0
  342. package/src/operations/curate-magazine.skill.conversations.json +1 -0
  343. package/src/operations/curate-magazine.skill.test.ts +167 -0
  344. package/src/operations/curate-magazine.test.ts +91 -0
  345. package/src/operations/curate-magazine.ts +178 -0
  346. package/src/operations/extraction/article.test.ts +154 -0
  347. package/src/operations/extraction/article.ts +270 -0
  348. package/src/operations/extraction/index.ts +5 -0
  349. package/src/operations/fetch-article-content.ts +27 -0
  350. package/src/operations/index.ts +13 -0
  351. package/src/operations/load-post-content.ts +76 -0
  352. package/src/operations/sources/article.ts +122 -0
  353. package/src/operations/sources/cors.ts +19 -0
  354. package/src/operations/sources/feed-fetcher.test.ts +200 -0
  355. package/src/operations/sources/feed-fetcher.ts +26 -0
  356. package/src/operations/sources/http.ts +42 -0
  357. package/src/operations/sources/index.ts +9 -0
  358. package/src/operations/sources/rss.test.ts +201 -0
  359. package/src/operations/sources/rss.ts +138 -0
  360. package/src/operations/sources/standard-site.ts +381 -0
  361. package/src/operations/sources/testing/feed.xml +477 -0
  362. package/src/operations/sync-feed.test.ts +146 -0
  363. package/src/operations/sync-feed.ts +140 -0
  364. package/src/operations/util.test.ts +67 -0
  365. package/src/operations/util.ts +65 -0
  366. package/src/paths.ts +14 -0
  367. package/src/plugin.ts +11 -0
  368. package/src/plugin.workerd.ts +6 -0
  369. package/src/skills/index.ts +5 -0
  370. package/src/skills/magazine-skill.ts +45 -0
  371. package/src/stories/ArticleExtractor.stories.tsx +204 -0
  372. package/src/stories/MagazineCurate.stories.tsx +217 -0
  373. package/src/stories/fixtures/theregister-ai.xml +45 -0
  374. package/src/stories/theregister-fixture.test.ts +35 -0
  375. package/src/templates/magazine-curation.ts +47 -0
  376. package/src/testing/builder.ts +77 -0
  377. package/src/testing/index.ts +5 -0
  378. package/src/translations.ts +81 -0
  379. package/src/types/CreateSubscription.ts +61 -0
  380. package/src/types/FeedOperation.ts +134 -0
  381. package/src/types/Magazine.test.ts +69 -0
  382. package/src/types/Magazine.ts +214 -0
  383. package/src/types/Subscription.test.ts +171 -0
  384. package/src/types/Subscription.ts +366 -0
  385. package/src/types/index.ts +8 -0
  386. package/src/util/date.ts +27 -0
  387. package/src/util/index.ts +7 -0
  388. package/src/util/post-content.ts +19 -0
  389. package/src/util/text.ts +98 -0
  390. package/src/vite-env.d.ts +10 -0
@@ -0,0 +1,24 @@
1
+ export type FetchArticleResult = {
2
+ /** Plain-text body extracted from the article HTML. */
3
+ text: string;
4
+ /** Image URLs found on the page (og:image first, then <img src=...>). */
5
+ imageUrls: string[];
6
+ };
7
+ export type FetchArticleOptions = {
8
+ /**
9
+ * URL prefix for a server-side fetch proxy used to bypass browser CORS.
10
+ * The target URL is appended (URL-encoded). E.g. `'/api/rss?url='`.
11
+ * When omitted, the article is fetched directly.
12
+ */
13
+ corsProxy?: string;
14
+ };
15
+ /**
16
+ * Fetches a post's article page over HTTP and returns extracted plain text
17
+ * plus any image URLs found. Applies protocol validation, a fetch timeout,
18
+ * a Content-Length rejection, and a streamed byte cap.
19
+ *
20
+ * Wraps the original error as `cause` so callers can distinguish
21
+ * AbortError (timeout) from network/fetch failures.
22
+ */
23
+ export declare const fetchArticle: (link: string, options?: FetchArticleOptions) => Promise<FetchArticleResult>;
24
+ //# sourceMappingURL=article.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"article.d.ts","sourceRoot":"","sources":["../../../../../src/operations/sources/article.ts"],"names":[],"mappings":"AAqEA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,yEAAyE;IACzE,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,SAAgB,MAAM,YAAW,mBAAmB,KAAQ,OAAO,CAAC,kBAAkB,CA4B9G,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Cross-origin fetch helpers. Feed/article URLs are arbitrary third-party origins, so in the browser
3
+ * they must be routed through the dev/edge RSS proxy; server-side (no `window`) they're fetched
4
+ * directly.
5
+ */
6
+ /** Browser proxy path; the target URL is appended URL-encoded. */
7
+ export declare const CORS_PROXY = "/api/rss?url=";
8
+ /** The proxy to use in the current environment: the browser proxy, or undefined server-side. */
9
+ export declare const browserCorsProxy: () => string | undefined;
10
+ /** Wraps `url` with `proxy` (URL-encoded) when a proxy is set, else returns `url` unchanged. */
11
+ export declare const applyCorsProxy: (url: string, proxy?: string) => string;
12
+ //# sourceMappingURL=cors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cors.d.ts","sourceRoot":"","sources":["../../../../../src/operations/sources/cors.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AAEH,kEAAkE;AAClE,eAAO,MAAM,UAAU,kBAAkB,CAAC;AAE1C,gGAAgG;AAChG,eAAO,MAAM,gBAAgB,QAAO,MAAM,GAAG,SAAqE,CAAC;AAEnH,gGAAgG;AAChG,eAAO,MAAM,cAAc,QAAS,MAAM,UAAU,MAAM,KAAG,MACT,CAAC"}
@@ -0,0 +1,22 @@
1
+ import type * as Effect from 'effect/Effect';
2
+ import { type Subscription } from '#types';
3
+ export type FetchOptions = {
4
+ corsProxy?: string;
5
+ };
6
+ export type FetchResult = {
7
+ feed: Subscription.Subscription;
8
+ posts: Subscription.Post[];
9
+ };
10
+ declare const FeedFetchError_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").VoidIfEmpty<{ readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }>) => import("effect/Cause").YieldableError & {
11
+ readonly _tag: "FeedFetchError";
12
+ } & Readonly<A>;
13
+ /** Failure fetching or decoding a feed (network error, non-2xx response, or malformed body). */
14
+ export declare class FeedFetchError extends FeedFetchError_base<{
15
+ message: string;
16
+ cause?: unknown;
17
+ }> {
18
+ }
19
+ /** Generic feed fetcher — protocol-specific implementations return normalized Subscription objects. */
20
+ export type FeedFetcher = (url: string, options?: FetchOptions) => Effect.Effect<FetchResult, FeedFetchError>;
21
+ export {};
22
+ //# sourceMappingURL=feed-fetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed-fetcher.d.ts","sourceRoot":"","sources":["../../../../../src/operations/sources/feed-fetcher.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAE7C,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,QAAQ,CAAC;AAE3C,MAAM,MAAM,YAAY,GAAG;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,EAAE,YAAY,CAAC,YAAY,CAAC;IAChC,KAAK,EAAE,YAAY,CAAC,IAAI,EAAE,CAAC;CAC5B,CAAC;;;;AAEF,gGAAgG;AAChG,qBAAa,cAAe,SAAQ,oBAAmC;IACrE,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;CAAG;AAEL,uGAAuG;AACvG,MAAM,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,YAAY,KAAK,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=feed-fetcher.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feed-fetcher.test.d.ts","sourceRoot":"","sources":["../../../../../src/operations/sources/feed-fetcher.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ import * as HttpClient from '@effect/platform/HttpClient';
2
+ import * as Effect from 'effect/Effect';
3
+ import type * as Schema from 'effect/Schema';
4
+ import { FeedFetchError } from './feed-fetcher';
5
+ /** GETs a URL (through the optional CORS proxy) and decodes the JSON body against `schema`. */
6
+ export declare const getJson: <A, I>(schema: Schema.Schema<A, I>, url: string, proxy?: string) => Effect.Effect<A, FeedFetchError, HttpClient.HttpClient>;
7
+ /** GETs a URL (through the optional CORS proxy) and returns the response body as text. */
8
+ export declare const getText: (url: string, proxy?: string) => Effect.Effect<string, FeedFetchError, HttpClient.HttpClient>;
9
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../../../../src/operations/sources/http.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,UAAU,MAAM,6BAA6B,CAAC;AAG1D,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,KAAK,KAAK,MAAM,MAAM,eAAe,CAAC;AAG7C,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAKhD,+FAA+F;AAC/F,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,UAClB,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,OACtB,MAAM,UACH,MAAM,KACb,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,EAAE,UAAU,CAAC,UAAU,CAQtD,CAAC;AAEJ,0FAA0F;AAC1F,eAAO,MAAM,OAAO,QAAS,MAAM,UAAU,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,UAAU,CAAC,UAAU,CAQ9G,CAAC"}
@@ -0,0 +1,6 @@
1
+ export * from './article';
2
+ export * from './cors';
3
+ export * from './feed-fetcher';
4
+ export * from './rss';
5
+ export * from './standard-site';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/operations/sources/index.ts"],"names":[],"mappings":"AAIA,cAAc,WAAW,CAAC;AAC1B,cAAc,QAAQ,CAAC;AACvB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type FeedFetcher } from './feed-fetcher';
2
+ /** Fetches and parses an RSS/Atom feed URL into Subscription objects. */
3
+ export declare const fetchRss: FeedFetcher;
4
+ //# sourceMappingURL=rss.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rss.d.ts","sourceRoot":"","sources":["../../../../../src/operations/sources/rss.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,KAAK,WAAW,EAAoC,MAAM,gBAAgB,CAAC;AAuDpF,yEAAyE;AACzE,eAAO,MAAM,QAAQ,EAAE,WAOyB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rss.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rss.test.d.ts","sourceRoot":"","sources":["../../../../../src/operations/sources/rss.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { type FeedFetcher, FeedFetchError, type FetchOptions } from './feed-fetcher';
3
+ /** A publication a handle publishes under, keyed by its Standard.site `site` reference. */
4
+ export type Publication = {
5
+ /** The document `site` reference (`at://…` URI or `https://…` URL); the stable selection key. */
6
+ site: string;
7
+ /** Canonical site URL (e.g. `https://dxos.org`), trailing slash stripped. */
8
+ url?: string;
9
+ /** Publication display name. */
10
+ name?: string;
11
+ };
12
+ /**
13
+ * Extracts an atproto handle or DID from a URL or raw identifier.
14
+ * Supports: bare handles (`dxos.org`), `@handle`, `did:plc:…`/`did:web:…`, or a
15
+ * `https://bsky.app/profile/{actor}` URL.
16
+ */
17
+ export declare const parseStandardSiteActor: (url: string) => string;
18
+ /** Lists the publications a handle publishes under (deduped by `site`), for publication selection. */
19
+ export declare const listStandardSitePublications: (actorOrUrl: string, options?: FetchOptions) => Effect.Effect<Publication[], FeedFetchError>;
20
+ /** A handle suggestion returned by typeahead search. */
21
+ export type HandleSuggestion = {
22
+ handle: string;
23
+ displayName?: string;
24
+ };
25
+ /** Searches atproto handles by prefix (typeahead), for combobox suggestions; empty on blank/failed query. */
26
+ export declare const searchStandardSiteHandles: (query: string, options?: FetchOptions) => Effect.Effect<HandleSuggestion[], never>;
27
+ /**
28
+ * Fetches a Standard.site feed. `url` is the publication's `site` reference — either an `at://` URI
29
+ * (DID extracted directly) or an `https://` URL (DID resolved via `/.well-known/atproto-did`). In both
30
+ * cases, all documents in the author's repo filtered to that publication are fetched.
31
+ */
32
+ export declare const fetchStandardSite: FeedFetcher;
33
+ //# sourceMappingURL=standard-site.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-site.d.ts","sourceRoot":"","sources":["../../../../../src/operations/sources/standard-site.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAMxC,OAAO,EAAE,KAAK,WAAW,EAAE,cAAc,EAAE,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AA6BrF,2FAA2F;AAC3F,MAAM,MAAM,WAAW,GAAG;IACxB,iGAAiG;IACjG,IAAI,EAAE,MAAM,CAAC;IACb,6EAA6E;IAC7E,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QAAS,MAAM,KAAG,MAOpD,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,4BAA4B,eAC3B,MAAM,YACR,YAAY,KACrB,MAAM,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,cAAc,CAaE,CAAC;AAEjD,wDAAwD;AACxD,MAAM,MAAM,gBAAgB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAExE,6GAA6G;AAC7G,eAAO,MAAM,yBAAyB,UAC7B,MAAM,YACH,YAAY,KACrB,MAAM,CAAC,MAAM,CAAC,gBAAgB,EAAE,EAAE,KAAK,CASnC,CAAC;AAER;;;;GAIG;AACH,eAAO,MAAM,iBAAiB,EAAE,WAgDgB,CAAC"}
@@ -0,0 +1,5 @@
1
+ import { Operation } from '@dxos/compute';
2
+ import { FeedOperation } from '../types';
3
+ declare const handler: Operation.WithHandler<typeof FeedOperation.SyncFeed>;
4
+ export default handler;
5
+ //# sourceMappingURL=sync-feed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-feed.d.ts","sourceRoot":"","sources":["../../../../src/operations/sync-feed.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAI1C,OAAO,EAAE,aAAa,EAAgB,MAAM,UAAU,CAAC;AAiBvD,QAAA,MAAM,OAAO,EAAE,SAAS,CAAC,WAAW,CAAC,OAAO,aAAa,CAAC,QAAQ,CA8GjE,CAAC;eAEa,OAAO"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=sync-feed.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-feed.test.d.ts","sourceRoot":"","sources":["../../../../src/operations/sync-feed.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,25 @@
1
+ import * as Effect from 'effect/Effect';
2
+ import { Database } from '@dxos/echo';
3
+ import { type Magazine, Subscription } from '../types';
4
+ /**
5
+ * Resolves the Magazine's referenced feeds and the Posts in each feed's backing
6
+ * ECHO queue, filtering out Posts already curated into `magazine.posts` (and cross-feed duplicates).
7
+ */
8
+ export declare const collectCandidates: (magazine: Magazine.Magazine) => Effect.Effect<{
9
+ post: Subscription.Post;
10
+ feed: Subscription.Subscription;
11
+ }[], import("@dxos/echo/Err").EntityNotFoundError, Database.Service>;
12
+ /**
13
+ * Partitions posts into those to keep and those to drop, given a maximum
14
+ * non-starred retention bound. Starred posts are always kept; the remaining
15
+ * non-starred posts are sorted newest-first by `published` and the top
16
+ * `keep` retained.
17
+ *
18
+ * `isStarred` is injectable; callers with a starred-tag uri pass a predicate backed by it
19
+ * (defaults to treating nothing as starred).
20
+ */
21
+ export declare const partitionByKeepBound: <T extends Subscription.Post>(posts: readonly T[], keep: number, isStarred?: (post: T) => boolean) => {
22
+ kept: T[];
23
+ dropped: T[];
24
+ };
25
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/operations/util.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,KAAK,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAGvD;;;GAGG;AACH,eAAO,MAAM,iBAAiB,aAAc,QAAQ,CAAC,QAAQ;UAGzB,YAAY,CAAC,IAAI;UAAQ,YAAY,CAAC,YAAY;oEAiBlF,CAAC;AAEL;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,GAAI,CAAC,SAAS,YAAY,CAAC,IAAI,SACvD,SAAS,CAAC,EAAE,QACb,MAAM,cACD,CAAC,IAAI,EAAE,CAAC,KAAK,OAAO,KAC9B;IAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,CAAC,EAAE,CAAA;CAc3B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=util.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.test.d.ts","sourceRoot":"","sources":["../../../../src/operations/util.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,3 @@
1
+ declare const getMagazinesPath: (spaceId: string) => string, getMagazinePath: (spaceId: string, objectId: string) => string;
2
+ export { getMagazinePath, getMagazinesPath };
3
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../../src/paths.ts"],"names":[],"mappings":"AAQA,QAAA,MAAwB,gBAAgB,+BAAiB,eAAe,+CAGvE,CAAC;AAEF,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Plugin } from '@dxos/app-framework';
2
+ export declare const MagazinePlugin: Plugin.PluginFactory<void>;
3
+ export { MagazineOperationHandlerSet } from './operations';
4
+ //# sourceMappingURL=plugin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../src/plugin.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAI7C,eAAO,MAAM,cAAc,4BAA6C,CAAC;AAEzE,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export { MagazinePlugin, default } from './MagazinePlugin.workerd';
2
+ export { MagazineOperationHandlerSet } from './operations';
3
+ //# sourceMappingURL=plugin.workerd.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin.workerd.d.ts","sourceRoot":"","sources":["../../../src/plugin.workerd.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACnE,OAAO,EAAE,2BAA2B,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as MagazineSkill } from './magazine-skill';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/skills/index.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Skill } from '@dxos/compute';
2
+ declare const skill: Skill.Definition;
3
+ export default skill;
4
+ //# sourceMappingURL=magazine-skill.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magazine-skill.d.ts","sourceRoot":"","sources":["../../../../src/skills/magazine-skill.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAY,MAAM,eAAe,CAAC;AAmChD,QAAA,MAAM,KAAK,EAAE,KAAK,CAAC,UAGlB,CAAC;eAEa,KAAK"}
@@ -0,0 +1,267 @@
1
+ import { type StoryObj } from '@storybook/react-vite';
2
+ import React from 'react';
3
+ declare const meta: {
4
+ title: string;
5
+ render: () => React.JSX.Element;
6
+ decorators: import("@storybook/react").Decorator[];
7
+ parameters: {
8
+ layout: string;
9
+ translations: [{
10
+ readonly 'en-US': {
11
+ readonly "@dxos/react-ui-form": {
12
+ readonly 'ref-editor.placeholder': "Type '@' to add a reference, or enter a value";
13
+ readonly 'ref-editor-auto.placeholder': 'Search by name, or enter a value';
14
+ readonly 'fields.label': 'Fields';
15
+ readonly 'hidden-fields.label': 'Hidden Fields';
16
+ readonly 'empty-readonly-ref-field.label': '(none)';
17
+ readonly 'field-property.label': 'Property';
18
+ readonly 'field-property.placeholder': 'Property name';
19
+ readonly 'field-format.label': 'Type';
20
+ readonly 'field-path.label': 'Field path';
21
+ readonly 'remove-item.button': 'Delete item';
22
+ readonly 'add-item.button': 'Add item';
23
+ readonly 'add-property-button.label': 'Add property';
24
+ readonly 'boolean-input-true.value': 'Yes';
25
+ readonly 'boolean-input-false.value': 'No';
26
+ readonly 'show-field.label': 'Show field';
27
+ readonly 'hide-field.label': 'Hide field';
28
+ readonly 'expand-fields.label': 'Expand';
29
+ readonly 'collapse-fields.label': 'Collapse';
30
+ readonly 'delete-field.label': 'Delete field';
31
+ readonly 'create-option.label': 'Create';
32
+ readonly 'add-tag.label': 'Add tag';
33
+ readonly 'ref-field-combobox-input.placeholder': 'Search\u2026';
34
+ readonly 'ref-field.placeholder': 'Select\u2026';
35
+ readonly 'ref-field.placeholder_one': 'Select\u2026';
36
+ readonly 'ref-field.placeholder_other': 'Select items\u2026';
37
+ readonly 'example.placeholder': 'Example';
38
+ readonly 'latitude.placeholder': 'Latitude (e.g., 40.7128)';
39
+ readonly 'longitude.placeholder': 'Longitude (e.g., -74.0060)';
40
+ readonly 'cancel-button.label': 'Cancel';
41
+ readonly 'save-button.label': 'Save';
42
+ readonly 'create-text.label': 'Create text';
43
+ readonly 'format.boolean.label': 'Boolean';
44
+ readonly 'format.currency.label': 'Currency';
45
+ readonly 'format.date.label': 'Date';
46
+ readonly 'format.date-time.label': 'DateTime';
47
+ readonly 'format.did.label': 'DID';
48
+ readonly 'format.duration.label': 'Duration';
49
+ readonly 'format.dxn.label': 'DXN';
50
+ readonly 'format.email.label': 'Email';
51
+ readonly 'format.formula.label': 'Formula';
52
+ readonly 'format.hostname.label': 'Hostname';
53
+ readonly 'format.integer.label': 'Integer';
54
+ readonly 'format.json.label': 'JSON';
55
+ readonly 'format.lnglat.label': 'Geopoint';
56
+ readonly 'format.markdown.label': 'Markdown';
57
+ readonly 'format.percent.label': 'Percent';
58
+ readonly 'format.ref.label': 'Reference';
59
+ readonly 'format.regex.label': 'RegExp';
60
+ readonly 'format.string.label': 'String';
61
+ readonly 'format.single-select.label': 'Select';
62
+ readonly 'format.multi-select.label': 'Multi-select';
63
+ readonly 'format.text.label': 'Long text';
64
+ readonly 'format.time.label': 'Time';
65
+ readonly 'format.timestamp.label': 'Timestamp';
66
+ readonly 'format.user.label': 'User';
67
+ readonly 'format.number.label': 'Number';
68
+ readonly 'format.uri.label': 'URI';
69
+ readonly 'format.url.label': 'URL';
70
+ readonly 'format.uuid.label': 'UUID';
71
+ readonly 'latitude.label': 'Latitude';
72
+ readonly 'longitude.label': 'Longitude';
73
+ readonly 'select-option.label': 'Label';
74
+ readonly 'select-option-label.placeholder': 'Option label';
75
+ readonly 'select-option-delete.button': 'Delete';
76
+ readonly 'select-option-add.button': 'Add option';
77
+ readonly 'system-schema.title': 'System type';
78
+ readonly 'system-schema.description': 'System type: cannot add or remove fields.';
79
+ readonly 'remove.button': 'Delete';
80
+ };
81
+ };
82
+ }, {
83
+ readonly 'en-US': {
84
+ readonly [x: string]: {
85
+ readonly 'typename.label': 'Feed';
86
+ readonly 'typename.label_zero': 'Feeds';
87
+ readonly 'typename.label_one': 'Feed';
88
+ readonly 'typename.label_other': 'Feeds';
89
+ readonly 'object-name.placeholder': 'New feed';
90
+ readonly 'add-object.label': 'Add feed';
91
+ readonly 'rename-object.label': 'Rename feed';
92
+ readonly 'delete-object.label': 'Delete feed';
93
+ readonly 'object-deleted.label': 'Feed deleted';
94
+ readonly 'plugin.name'?: undefined;
95
+ readonly 'empty-feed.message'?: undefined;
96
+ readonly 'feed-companion.label'?: undefined;
97
+ readonly 'sync-feed.label'?: undefined;
98
+ readonly 'sync-feed-error.title'?: undefined;
99
+ readonly 'feed-sync.label'?: undefined;
100
+ readonly 'view-trigger.label'?: undefined;
101
+ readonly 'add-feed.label'?: undefined;
102
+ readonly 'curate.label'?: undefined;
103
+ readonly 'clear-magazine.label'?: undefined;
104
+ readonly 'refreshing-magazine.label'?: undefined;
105
+ readonly 'no-feeds.label'?: undefined;
106
+ readonly 'empty-magazine.message'?: undefined;
107
+ readonly 'curate-error.message'?: undefined;
108
+ readonly 'clear-error.message'?: undefined;
109
+ readonly 'refresh-content-error.message'?: undefined;
110
+ readonly 'post-companion.label'?: undefined;
111
+ readonly 'post-title.placeholder'?: undefined;
112
+ readonly 'open-original.label'?: undefined;
113
+ readonly 'mark-unread.label'?: undefined;
114
+ readonly 'refresh-content.label'?: undefined;
115
+ readonly 'refresh-content-pending.label'?: undefined;
116
+ readonly 'archive-post.label'?: undefined;
117
+ readonly 'unarchive-post.label'?: undefined;
118
+ readonly 'star-post.label'?: undefined;
119
+ readonly 'unstar-post.label'?: undefined;
120
+ readonly 'sort-by-date.label'?: undefined;
121
+ readonly 'sort-by-rank.label'?: undefined;
122
+ readonly 'view-filter.label'?: undefined;
123
+ readonly 'show-archived.label'?: undefined;
124
+ readonly 'only-starred.label'?: undefined;
125
+ readonly 'close.label'?: undefined;
126
+ } | {
127
+ readonly 'typename.label': 'Post';
128
+ readonly 'typename.label_zero': 'Posts';
129
+ readonly 'typename.label_one': 'Post';
130
+ readonly 'typename.label_other': 'Posts';
131
+ readonly 'post-title.placeholder': 'Untitled';
132
+ readonly 'object-name.placeholder'?: undefined;
133
+ readonly 'add-object.label'?: undefined;
134
+ readonly 'rename-object.label'?: undefined;
135
+ readonly 'delete-object.label'?: undefined;
136
+ readonly 'object-deleted.label'?: undefined;
137
+ readonly 'plugin.name'?: undefined;
138
+ readonly 'empty-feed.message'?: undefined;
139
+ readonly 'feed-companion.label'?: undefined;
140
+ readonly 'sync-feed.label'?: undefined;
141
+ readonly 'sync-feed-error.title'?: undefined;
142
+ readonly 'feed-sync.label'?: undefined;
143
+ readonly 'view-trigger.label'?: undefined;
144
+ readonly 'add-feed.label'?: undefined;
145
+ readonly 'curate.label'?: undefined;
146
+ readonly 'clear-magazine.label'?: undefined;
147
+ readonly 'refreshing-magazine.label'?: undefined;
148
+ readonly 'no-feeds.label'?: undefined;
149
+ readonly 'empty-magazine.message'?: undefined;
150
+ readonly 'curate-error.message'?: undefined;
151
+ readonly 'clear-error.message'?: undefined;
152
+ readonly 'refresh-content-error.message'?: undefined;
153
+ readonly 'post-companion.label'?: undefined;
154
+ readonly 'open-original.label'?: undefined;
155
+ readonly 'mark-unread.label'?: undefined;
156
+ readonly 'refresh-content.label'?: undefined;
157
+ readonly 'refresh-content-pending.label'?: undefined;
158
+ readonly 'archive-post.label'?: undefined;
159
+ readonly 'unarchive-post.label'?: undefined;
160
+ readonly 'star-post.label'?: undefined;
161
+ readonly 'unstar-post.label'?: undefined;
162
+ readonly 'sort-by-date.label'?: undefined;
163
+ readonly 'sort-by-rank.label'?: undefined;
164
+ readonly 'view-filter.label'?: undefined;
165
+ readonly 'show-archived.label'?: undefined;
166
+ readonly 'only-starred.label'?: undefined;
167
+ readonly 'close.label'?: undefined;
168
+ } | {
169
+ readonly 'typename.label': 'Magazine';
170
+ readonly 'typename.label_zero': 'Magazines';
171
+ readonly 'typename.label_one': 'Magazine';
172
+ readonly 'typename.label_other': 'Magazines';
173
+ readonly 'object-name.placeholder': 'New magazine';
174
+ readonly 'add-object.label': 'Add magazine';
175
+ readonly 'rename-object.label': 'Rename magazine';
176
+ readonly 'delete-object.label': 'Delete magazine';
177
+ readonly 'object-deleted.label': 'Magazine deleted';
178
+ readonly 'plugin.name'?: undefined;
179
+ readonly 'empty-feed.message'?: undefined;
180
+ readonly 'feed-companion.label'?: undefined;
181
+ readonly 'sync-feed.label'?: undefined;
182
+ readonly 'sync-feed-error.title'?: undefined;
183
+ readonly 'feed-sync.label'?: undefined;
184
+ readonly 'view-trigger.label'?: undefined;
185
+ readonly 'add-feed.label'?: undefined;
186
+ readonly 'curate.label'?: undefined;
187
+ readonly 'clear-magazine.label'?: undefined;
188
+ readonly 'refreshing-magazine.label'?: undefined;
189
+ readonly 'no-feeds.label'?: undefined;
190
+ readonly 'empty-magazine.message'?: undefined;
191
+ readonly 'curate-error.message'?: undefined;
192
+ readonly 'clear-error.message'?: undefined;
193
+ readonly 'refresh-content-error.message'?: undefined;
194
+ readonly 'post-companion.label'?: undefined;
195
+ readonly 'post-title.placeholder'?: undefined;
196
+ readonly 'open-original.label'?: undefined;
197
+ readonly 'mark-unread.label'?: undefined;
198
+ readonly 'refresh-content.label'?: undefined;
199
+ readonly 'refresh-content-pending.label'?: undefined;
200
+ readonly 'archive-post.label'?: undefined;
201
+ readonly 'unarchive-post.label'?: undefined;
202
+ readonly 'star-post.label'?: undefined;
203
+ readonly 'unstar-post.label'?: undefined;
204
+ readonly 'sort-by-date.label'?: undefined;
205
+ readonly 'sort-by-rank.label'?: undefined;
206
+ readonly 'view-filter.label'?: undefined;
207
+ readonly 'show-archived.label'?: undefined;
208
+ readonly 'only-starred.label'?: undefined;
209
+ readonly 'close.label'?: undefined;
210
+ } | {
211
+ readonly 'typename.label'?: undefined;
212
+ readonly 'typename.label_zero'?: undefined;
213
+ readonly 'typename.label_one'?: undefined;
214
+ readonly 'typename.label_other'?: undefined;
215
+ readonly 'object-name.placeholder'?: undefined;
216
+ readonly 'add-object.label'?: undefined;
217
+ readonly 'rename-object.label'?: undefined;
218
+ readonly 'delete-object.label'?: undefined;
219
+ readonly 'object-deleted.label'?: undefined;
220
+ readonly 'plugin.name': 'Feed';
221
+ readonly 'empty-feed.message': 'No posts yet';
222
+ readonly 'feed-companion.label': 'Feed';
223
+ readonly 'sync-feed.label': 'Sync feed';
224
+ readonly 'sync-feed-error.title': 'Failed to sync feed';
225
+ readonly 'feed-sync.label': 'Feed Sync';
226
+ readonly 'view-trigger.label': 'View trigger';
227
+ readonly 'add-feed.label': 'Add feed';
228
+ readonly 'curate.label': 'Curate';
229
+ readonly 'clear-magazine.label': 'Clear (preserves starred)';
230
+ readonly 'refreshing-magazine.label': 'Refreshing magazine...';
231
+ readonly 'no-feeds.label': 'Add at least one feed first';
232
+ readonly 'empty-magazine.message': 'No articles yet.';
233
+ readonly 'curate-error.message': 'Failed to curate magazine.';
234
+ readonly 'clear-error.message': 'Failed to clear magazine.';
235
+ readonly 'refresh-content-error.message': 'Failed to refresh content.';
236
+ readonly 'post-companion.label': 'Post';
237
+ readonly 'post-title.placeholder': 'Untitled';
238
+ readonly 'open-original.label': 'Open original';
239
+ readonly 'mark-unread.label': 'Mark as unread';
240
+ readonly 'refresh-content.label': 'Refresh content';
241
+ readonly 'refresh-content-pending.label': 'Refreshing\u2026';
242
+ readonly 'archive-post.label': 'Archive';
243
+ readonly 'unarchive-post.label': 'Unarchive';
244
+ readonly 'star-post.label': 'Star';
245
+ readonly 'unstar-post.label': 'Unstar';
246
+ readonly 'sort-by-date.label': 'Sort by date';
247
+ readonly 'sort-by-rank.label': 'Sort by rank';
248
+ readonly 'view-filter.label': 'Filter posts';
249
+ readonly 'show-archived.label': 'Show archived';
250
+ readonly 'only-starred.label': 'Show starred only';
251
+ readonly 'close.label': 'Close';
252
+ };
253
+ };
254
+ }];
255
+ };
256
+ };
257
+ export default meta;
258
+ type Story = StoryObj<typeof meta>;
259
+ /**
260
+ * Live preview of the defuddle-based article extractor.
261
+ *
262
+ * Paste a URL → the storybook-react vite middleware proxies the fetch via
263
+ * `/api/rss?url=` to bypass browser CORS → the HTML is run through
264
+ * `extractArticle` → the result is rendered with `MarkdownView`.
265
+ */
266
+ export declare const Default: Story;
267
+ //# sourceMappingURL=ArticleExtractor.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ArticleExtractor.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/ArticleExtractor.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAyC,MAAM,OAAO,CAAC;AAiL9D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAQ2B,CAAC;eAEvB,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC;;;;;;GAMG;AACH,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
2
+ import React from 'react';
3
+ import { type Space } from '@dxos/client/echo';
4
+ import { Magazine } from '#types';
5
+ declare global {
6
+ var __magazineStoryContext: {
7
+ space: Space;
8
+ magazine: Magazine.Magazine;
9
+ } | undefined;
10
+ }
11
+ declare const DefaultStory: () => React.JSX.Element;
12
+ declare const meta: Meta<typeof DefaultStory>;
13
+ export default meta;
14
+ type Story = StoryObj<typeof meta>;
15
+ export declare const Default: Story;
16
+ /**
17
+ * Live, agent-driven curation end-to-end against the The Register "AI + ML" feed (the feed fetch is
18
+ * served from a bundled fixture, but the LLM call is real). It verifies:
19
+ * 1. the curation Routine exists — created with the magazine (Magazine.make), so it is present
20
+ * before any curate; and
21
+ * 2. clicking Curate pulls the feed (SyncFeed) and runs that Routine via RunInstructions against the
22
+ * live edge model, which selects matching Posts into `magazine.posts` (rendered as tiles).
23
+ *
24
+ * The seed stashes the space + magazine in module scope so the play can read ECHO state directly.
25
+ *
26
+ * Excluded from CI (`!test`) — needs network + a reachable edge model and is non-deterministic/slow;
27
+ * run it manually (signed in, online). Deterministic pieces are covered by `theregister-fixture.test.ts`
28
+ * (fetch → parse), `curate-magazine.test.ts`, and `Magazine.test.ts`; the agent path by
29
+ * `curate-magazine.skill.test.ts`.
30
+ */
31
+ export declare const Curate: Story;
32
+ //# sourceMappingURL=MagazineCurate.stories.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MagazineCurate.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/MagazineCurate.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,IAAI,EAAE,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjE,OAAO,KAAK,MAAM,OAAO,CAAC;AAY1B,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAc/C,OAAO,EAAE,QAAQ,EAAgB,MAAM,QAAQ,CAAC;AA2DhD,OAAO,CAAC,MAAM,CAAC,CAAC;IAEd,IAAI,sBAAsB,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAA;KAAE,GAAG,SAAS,CAAC;CACvF;AAED,QAAA,MAAM,YAAY,yBAqBjB,CAAC;AA4BF,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAAO,YAAY,CAwBnC,CAAC;eAEa,IAAI;AAEnB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC;AAEjC;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,MAAM,EAAE,KAuBpB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=theregister-fixture.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"theregister-fixture.test.d.ts","sourceRoot":"","sources":["../../../../src/stories/theregister-fixture.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,7 @@
1
+ import { type RoutineCapabilities } from '@dxos/plugin-routine/types';
2
+ /**
3
+ * Magazine curation template. Creates a routine that invokes {@link FeedOperation.CurateMagazine} for
4
+ * the companion's Magazine subject on a daily schedule. Only visible in Magazine object companions.
5
+ */
6
+ export declare const magazineCuration: RoutineCapabilities.Template;
7
+ //# sourceMappingURL=magazine-curation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"magazine-curation.d.ts","sourceRoot":"","sources":["../../../../src/templates/magazine-curation.ts"],"names":[],"mappings":"AASA,OAAO,EAAW,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAO/E;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,mBAAmB,CAAC,QA0BlD,CAAC"}