@dxos/plugin-markdown 0.8.4-main.2e9d522 → 0.8.4-main.3eb6e50203

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 (360) hide show
  1. package/dist/lib/browser/MarkdownCard-7VIO7R66.mjs +11 -0
  2. package/dist/lib/browser/MarkdownCard-7VIO7R66.mjs.map +7 -0
  3. package/dist/lib/browser/MarkdownContainer-6E43EDAU.mjs +11 -0
  4. package/dist/lib/browser/MarkdownContainer-6E43EDAU.mjs.map +7 -0
  5. package/dist/lib/browser/anchor-sort-JBAZRPE7.mjs +33 -0
  6. package/dist/lib/browser/anchor-sort-JBAZRPE7.mjs.map +7 -0
  7. package/dist/lib/browser/app-graph-serializer-6Q5YBUPW.mjs +59 -0
  8. package/dist/lib/browser/app-graph-serializer-6Q5YBUPW.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-6HOAW2E6.mjs +20 -0
  10. package/dist/lib/browser/blueprint-definition-6HOAW2E6.mjs.map +7 -0
  11. package/dist/lib/browser/blueprints/index.mjs +8 -0
  12. package/dist/lib/browser/blueprints/index.mjs.map +7 -0
  13. package/dist/lib/browser/{chunk-LHDCHDBW.mjs → chunk-2AAD3W6X.mjs} +14 -9
  14. package/dist/lib/browser/chunk-2AAD3W6X.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-4GT3QWMK.mjs +167 -0
  16. package/dist/lib/browser/chunk-4GT3QWMK.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-6SM75KL3.mjs +8 -0
  18. package/dist/lib/browser/chunk-6SM75KL3.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-7AQTX6D5.mjs +105 -0
  20. package/dist/lib/browser/chunk-7AQTX6D5.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-EZZFREFN.mjs +58 -0
  22. package/dist/lib/browser/chunk-EZZFREFN.mjs.map +7 -0
  23. package/dist/lib/browser/chunk-HHRUUWGH.mjs +796 -0
  24. package/dist/lib/browser/chunk-HHRUUWGH.mjs.map +7 -0
  25. package/dist/lib/browser/chunk-HQTBT5IY.mjs +176 -0
  26. package/dist/lib/browser/chunk-HQTBT5IY.mjs.map +7 -0
  27. package/dist/lib/browser/cli/index.mjs +33 -0
  28. package/dist/lib/browser/cli/index.mjs.map +7 -0
  29. package/dist/lib/browser/index.mjs +131 -136
  30. package/dist/lib/browser/index.mjs.map +4 -4
  31. package/dist/lib/browser/meta.json +1 -1
  32. package/dist/lib/browser/operation-resolver-UBQUPSXC.mjs +53 -0
  33. package/dist/lib/browser/operation-resolver-UBQUPSXC.mjs.map +7 -0
  34. package/dist/lib/browser/react-surface-7Z6AB26V.mjs +213 -0
  35. package/dist/lib/browser/react-surface-7Z6AB26V.mjs.map +7 -0
  36. package/dist/lib/browser/settings-V2XOFSD5.mjs +36 -0
  37. package/dist/lib/browser/settings-V2XOFSD5.mjs.map +7 -0
  38. package/dist/lib/browser/state-6Y3JB64H.mjs +29 -0
  39. package/dist/lib/browser/state-6Y3JB64H.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +13 -14
  41. package/dist/lib/node-esm/MarkdownCard-YC3R2TQW.mjs +12 -0
  42. package/dist/lib/node-esm/MarkdownCard-YC3R2TQW.mjs.map +7 -0
  43. package/dist/lib/node-esm/MarkdownContainer-TTRUOXU6.mjs +12 -0
  44. package/dist/lib/node-esm/MarkdownContainer-TTRUOXU6.mjs.map +7 -0
  45. package/dist/lib/node-esm/anchor-sort-IQMDZRA3.mjs +34 -0
  46. package/dist/lib/node-esm/anchor-sort-IQMDZRA3.mjs.map +7 -0
  47. package/dist/lib/node-esm/app-graph-serializer-STEPJH57.mjs +60 -0
  48. package/dist/lib/node-esm/app-graph-serializer-STEPJH57.mjs.map +7 -0
  49. package/dist/lib/node-esm/blueprint-definition-UGDFF5OZ.mjs +21 -0
  50. package/dist/lib/node-esm/blueprint-definition-UGDFF5OZ.mjs.map +7 -0
  51. package/dist/lib/node-esm/blueprints/index.mjs +9 -0
  52. package/dist/lib/node-esm/blueprints/index.mjs.map +7 -0
  53. package/dist/lib/node-esm/chunk-AGZOFIK2.mjs +10 -0
  54. package/dist/lib/node-esm/chunk-AGZOFIK2.mjs.map +7 -0
  55. package/dist/lib/node-esm/chunk-D46D75SK.mjs +797 -0
  56. package/dist/lib/node-esm/chunk-D46D75SK.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-DCKB3AVD.mjs +59 -0
  58. package/dist/lib/node-esm/chunk-DCKB3AVD.mjs.map +7 -0
  59. package/dist/lib/node-esm/chunk-K2IIYNCG.mjs +106 -0
  60. package/dist/lib/node-esm/chunk-K2IIYNCG.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-LOZVC2WA.mjs +177 -0
  62. package/dist/lib/node-esm/chunk-LOZVC2WA.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-VIR2ABYE.mjs → chunk-MLZQCT2N.mjs} +14 -9
  64. package/dist/lib/node-esm/chunk-MLZQCT2N.mjs.map +7 -0
  65. package/dist/lib/node-esm/chunk-USKAPINH.mjs +168 -0
  66. package/dist/lib/node-esm/chunk-USKAPINH.mjs.map +7 -0
  67. package/dist/lib/node-esm/cli/index.mjs +34 -0
  68. package/dist/lib/node-esm/cli/index.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +131 -136
  70. package/dist/lib/node-esm/index.mjs.map +4 -4
  71. package/dist/lib/node-esm/meta.json +1 -1
  72. package/dist/lib/node-esm/operation-resolver-QAGXDA5E.mjs +54 -0
  73. package/dist/lib/node-esm/operation-resolver-QAGXDA5E.mjs.map +7 -0
  74. package/dist/lib/node-esm/react-surface-VIXAH5CF.mjs +214 -0
  75. package/dist/lib/node-esm/react-surface-VIXAH5CF.mjs.map +7 -0
  76. package/dist/lib/node-esm/settings-EXSH2KF4.mjs +37 -0
  77. package/dist/lib/node-esm/settings-EXSH2KF4.mjs.map +7 -0
  78. package/dist/lib/node-esm/state-TVF2XT2T.mjs +30 -0
  79. package/dist/lib/node-esm/state-TVF2XT2T.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +13 -14
  81. package/dist/types/src/MarkdownPlugin.d.ts +2 -1
  82. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  83. package/dist/types/src/blueprints/functions/create.d.ts +8 -0
  84. package/dist/types/src/blueprints/functions/create.d.ts.map +1 -0
  85. package/dist/types/src/blueprints/functions/create.test.d.ts +2 -0
  86. package/dist/types/src/blueprints/functions/create.test.d.ts.map +1 -0
  87. package/dist/types/src/blueprints/functions/index.d.ts +4 -0
  88. package/dist/types/src/blueprints/functions/index.d.ts.map +1 -0
  89. package/dist/types/src/blueprints/functions/open.d.ts +14 -0
  90. package/dist/types/src/blueprints/functions/open.d.ts.map +1 -0
  91. package/dist/types/src/blueprints/functions/update.d.ts +19 -0
  92. package/dist/types/src/blueprints/functions/update.d.ts.map +1 -0
  93. package/dist/types/src/blueprints/functions/update.test.d.ts +2 -0
  94. package/dist/types/src/blueprints/functions/update.test.d.ts.map +1 -0
  95. package/dist/types/src/blueprints/index.d.ts +2 -0
  96. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  97. package/dist/types/src/blueprints/markdown-blueprint.d.ts +21 -0
  98. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  99. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts +6 -0
  100. package/dist/types/src/capabilities/anchor-sort/anchor-sort.d.ts.map +1 -0
  101. package/dist/types/src/capabilities/anchor-sort/index.d.ts +3 -0
  102. package/dist/types/src/capabilities/anchor-sort/index.d.ts.map +1 -0
  103. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts +5 -0
  104. package/dist/types/src/capabilities/app-graph-serializer/app-graph-serializer.d.ts.map +1 -0
  105. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts +3 -0
  106. package/dist/types/src/capabilities/app-graph-serializer/index.d.ts.map +1 -0
  107. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts +5 -0
  108. package/dist/types/src/capabilities/artifact-definition/artifact-definition.d.ts.map +1 -0
  109. package/dist/types/src/capabilities/artifact-definition/index.d.ts +3 -0
  110. package/dist/types/src/capabilities/artifact-definition/index.d.ts.map +1 -0
  111. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts +11 -0
  112. package/dist/types/src/capabilities/blueprint-definition/blueprint-definition.d.ts.map +1 -0
  113. package/dist/types/src/capabilities/blueprint-definition/index.d.ts +3 -0
  114. package/dist/types/src/capabilities/blueprint-definition/index.d.ts.map +1 -0
  115. package/dist/types/src/capabilities/index.d.ts +7 -16
  116. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  117. package/dist/types/src/capabilities/operation-resolver/index.d.ts +3 -0
  118. package/dist/types/src/capabilities/operation-resolver/index.d.ts.map +1 -0
  119. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts +5 -0
  120. package/dist/types/src/capabilities/operation-resolver/operation-resolver.d.ts.map +1 -0
  121. package/dist/types/src/capabilities/react-surface/index.d.ts +3 -0
  122. package/dist/types/src/capabilities/react-surface/index.d.ts.map +1 -0
  123. package/dist/types/src/capabilities/react-surface/react-surface.d.ts +5 -0
  124. package/dist/types/src/capabilities/react-surface/react-surface.d.ts.map +1 -0
  125. package/dist/types/src/capabilities/settings/index.d.ts +3 -0
  126. package/dist/types/src/capabilities/settings/index.d.ts.map +1 -0
  127. package/dist/types/src/capabilities/settings/settings.d.ts +7 -0
  128. package/dist/types/src/capabilities/settings/settings.d.ts.map +1 -0
  129. package/dist/types/src/capabilities/state/index.d.ts +3 -0
  130. package/dist/types/src/capabilities/state/index.d.ts.map +1 -0
  131. package/dist/types/src/capabilities/state/state.d.ts +5 -0
  132. package/dist/types/src/capabilities/state/state.d.ts.map +1 -0
  133. package/dist/types/src/cli/index.d.ts +2 -0
  134. package/dist/types/src/cli/index.d.ts.map +1 -0
  135. package/dist/types/src/cli/plugin.d.ts +3 -0
  136. package/dist/types/src/cli/plugin.d.ts.map +1 -0
  137. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +8 -0
  138. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  139. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  140. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  141. package/dist/types/src/components/MarkdownCard/index.d.ts +4 -0
  142. package/dist/types/src/components/MarkdownCard/index.d.ts.map +1 -0
  143. package/dist/types/src/components/MarkdownContainer.d.ts +22 -12
  144. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  145. package/dist/types/src/components/MarkdownContainer.stories.d.ts +84 -5
  146. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  147. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  148. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  149. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +43 -23
  150. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  151. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +8 -15
  152. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  153. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +30 -0
  154. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  155. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +12 -0
  156. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  157. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +6 -4
  158. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  159. package/dist/types/src/components/Suggestions.stories.d.ts +3 -4
  160. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  161. package/dist/types/src/components/index.d.ts +7 -2
  162. package/dist/types/src/components/index.d.ts.map +1 -1
  163. package/dist/types/src/hooks/index.d.ts +3 -0
  164. package/dist/types/src/hooks/index.d.ts.map +1 -1
  165. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  166. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  167. package/dist/types/src/hooks/useExtensions.d.ts +21 -0
  168. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  169. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  170. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  171. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  172. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  173. package/dist/types/src/index.d.ts +4 -3
  174. package/dist/types/src/index.d.ts.map +1 -1
  175. package/dist/types/src/meta.d.ts +2 -3
  176. package/dist/types/src/meta.d.ts.map +1 -1
  177. package/dist/types/src/testing.d.ts +6 -0
  178. package/dist/types/src/testing.d.ts.map +1 -0
  179. package/dist/types/src/translations.d.ts +36 -2
  180. package/dist/types/src/translations.d.ts.map +1 -1
  181. package/dist/types/src/types/Markdown.d.ts +45 -0
  182. package/dist/types/src/types/Markdown.d.ts.map +1 -0
  183. package/dist/types/src/types/MarkdownAction.d.ts +66 -0
  184. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -0
  185. package/dist/types/src/types/capabilities.d.ts +22 -0
  186. package/dist/types/src/types/capabilities.d.ts.map +1 -0
  187. package/dist/types/src/types/events.d.ts +5 -0
  188. package/dist/types/src/types/events.d.ts.map +1 -0
  189. package/dist/types/src/types/index.d.ts +5 -1
  190. package/dist/types/src/types/index.d.ts.map +1 -1
  191. package/dist/types/src/types/types.d.ts +4 -60
  192. package/dist/types/src/types/types.d.ts.map +1 -1
  193. package/dist/types/src/util.d.ts +17 -5
  194. package/dist/types/src/util.d.ts.map +1 -1
  195. package/dist/types/src/util.test.d.ts +2 -0
  196. package/dist/types/src/util.test.d.ts.map +1 -0
  197. package/dist/types/tsconfig.tsbuildinfo +1 -1
  198. package/package.json +99 -56
  199. package/src/MarkdownPlugin.tsx +82 -103
  200. package/src/blueprints/functions/create.conversations.json +1 -0
  201. package/src/blueprints/functions/create.test.ts +92 -0
  202. package/src/blueprints/functions/create.ts +35 -0
  203. package/src/blueprints/functions/index.ts +7 -0
  204. package/src/blueprints/functions/open.ts +33 -0
  205. package/src/blueprints/functions/update.conversations.json +1 -0
  206. package/src/blueprints/functions/update.test.ts +215 -0
  207. package/src/blueprints/functions/update.ts +79 -0
  208. package/src/blueprints/index.ts +5 -0
  209. package/src/blueprints/markdown-blueprint.ts +38 -0
  210. package/src/capabilities/anchor-sort/anchor-sort.ts +37 -0
  211. package/src/capabilities/anchor-sort/index.ts +7 -0
  212. package/src/capabilities/app-graph-serializer/app-graph-serializer.ts +60 -0
  213. package/src/capabilities/app-graph-serializer/index.ts +7 -0
  214. package/src/capabilities/artifact-definition/artifact-definition.ts +110 -0
  215. package/src/capabilities/artifact-definition/index.ts +7 -0
  216. package/src/capabilities/blueprint-definition/blueprint-definition.ts +26 -0
  217. package/src/capabilities/blueprint-definition/index.ts +7 -0
  218. package/src/capabilities/index.ts +7 -11
  219. package/src/capabilities/operation-resolver/index.ts +7 -0
  220. package/src/capabilities/operation-resolver/operation-resolver.ts +45 -0
  221. package/src/capabilities/react-surface/index.ts +7 -0
  222. package/src/capabilities/react-surface/react-surface.tsx +102 -0
  223. package/src/capabilities/settings/index.ts +7 -0
  224. package/src/capabilities/settings/settings.ts +37 -0
  225. package/src/capabilities/state/index.ts +7 -0
  226. package/src/capabilities/state/state.ts +31 -0
  227. package/src/cli/index.ts +5 -0
  228. package/src/cli/plugin.ts +30 -0
  229. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +58 -0
  230. package/src/components/MarkdownCard/MarkdownCard.tsx +64 -0
  231. package/src/components/MarkdownCard/index.ts +9 -0
  232. package/src/components/MarkdownContainer.stories.tsx +81 -61
  233. package/src/components/MarkdownContainer.tsx +106 -247
  234. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  235. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +58 -36
  236. package/src/components/MarkdownEditor/MarkdownEditor.tsx +226 -272
  237. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +162 -0
  238. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +66 -0
  239. package/src/components/MarkdownSettings/MarkdownSettings.tsx +97 -80
  240. package/src/components/Suggestions.stories.tsx +66 -72
  241. package/src/components/index.ts +10 -3
  242. package/src/hooks/index.ts +3 -0
  243. package/src/hooks/useEditorMenuOptions.ts +68 -0
  244. package/src/{extensions.tsx → hooks/useExtensions.tsx} +78 -131
  245. package/src/hooks/useLinkQuery.ts +83 -0
  246. package/src/hooks/useSelectCurrentThread.tsx +39 -34
  247. package/src/index.ts +7 -3
  248. package/src/meta.ts +9 -10
  249. package/src/testing.ts +27 -0
  250. package/src/translations.ts +9 -2
  251. package/src/types/Markdown.ts +57 -0
  252. package/src/types/MarkdownAction.ts +59 -0
  253. package/src/types/capabilities.ts +38 -0
  254. package/src/types/events.ts +14 -0
  255. package/src/types/index.ts +6 -1
  256. package/src/types/types.ts +7 -50
  257. package/src/util.test.ts +44 -0
  258. package/src/util.tsx +100 -11
  259. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs +0 -778
  260. package/dist/lib/browser/MarkdownContainer-F3WEEIBX.mjs.map +0 -7
  261. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs +0 -80
  262. package/dist/lib/browser/MarkdownPreview-S3C7CGAV.mjs.map +0 -7
  263. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs +0 -32
  264. package/dist/lib/browser/anchor-sort-UKJJ7ZNP.mjs.map +0 -7
  265. package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs +0 -52
  266. package/dist/lib/browser/app-graph-serializer-ICLAF662.mjs.map +0 -7
  267. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs +0 -145
  268. package/dist/lib/browser/artifact-definition-R2YYWOPN.mjs.map +0 -7
  269. package/dist/lib/browser/chunk-777RIED6.mjs +0 -16
  270. package/dist/lib/browser/chunk-777RIED6.mjs.map +0 -7
  271. package/dist/lib/browser/chunk-EPTSAJZM.mjs +0 -22
  272. package/dist/lib/browser/chunk-EPTSAJZM.mjs.map +0 -7
  273. package/dist/lib/browser/chunk-LFML7LC6.mjs +0 -51
  274. package/dist/lib/browser/chunk-LFML7LC6.mjs.map +0 -7
  275. package/dist/lib/browser/chunk-LHDCHDBW.mjs.map +0 -7
  276. package/dist/lib/browser/chunk-PHTD5DTR.mjs +0 -20
  277. package/dist/lib/browser/chunk-PHTD5DTR.mjs.map +0 -7
  278. package/dist/lib/browser/chunk-UANWRJZU.mjs +0 -79
  279. package/dist/lib/browser/chunk-UANWRJZU.mjs.map +0 -7
  280. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs +0 -64
  281. package/dist/lib/browser/intent-resolver-3MXYO3MW.mjs.map +0 -7
  282. package/dist/lib/browser/react-surface-C3Z423TV.mjs +0 -206
  283. package/dist/lib/browser/react-surface-C3Z423TV.mjs.map +0 -7
  284. package/dist/lib/browser/settings-KN75ZQY6.mjs +0 -28
  285. package/dist/lib/browser/settings-KN75ZQY6.mjs.map +0 -7
  286. package/dist/lib/browser/state-LZWTAS65.mjs +0 -37
  287. package/dist/lib/browser/state-LZWTAS65.mjs.map +0 -7
  288. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs +0 -779
  289. package/dist/lib/node-esm/MarkdownContainer-VOUHL6IU.mjs.map +0 -7
  290. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs +0 -81
  291. package/dist/lib/node-esm/MarkdownPreview-77UFEWXT.mjs.map +0 -7
  292. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs +0 -33
  293. package/dist/lib/node-esm/anchor-sort-IPIS5D5B.mjs.map +0 -7
  294. package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs +0 -53
  295. package/dist/lib/node-esm/app-graph-serializer-FLBXQKKR.mjs.map +0 -7
  296. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs +0 -146
  297. package/dist/lib/node-esm/artifact-definition-MLTAY4LK.mjs.map +0 -7
  298. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs +0 -22
  299. package/dist/lib/node-esm/chunk-7X6TPTJK.mjs.map +0 -7
  300. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs +0 -17
  301. package/dist/lib/node-esm/chunk-ACFGXH2K.mjs.map +0 -7
  302. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs +0 -52
  303. package/dist/lib/node-esm/chunk-CWTFQSN7.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs +0 -24
  305. package/dist/lib/node-esm/chunk-CXG7GMYP.mjs.map +0 -7
  306. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs +0 -80
  307. package/dist/lib/node-esm/chunk-JEEQLO7C.mjs.map +0 -7
  308. package/dist/lib/node-esm/chunk-VIR2ABYE.mjs.map +0 -7
  309. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs +0 -65
  310. package/dist/lib/node-esm/intent-resolver-BZYWV53A.mjs.map +0 -7
  311. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs +0 -207
  312. package/dist/lib/node-esm/react-surface-TTTBYNI2.mjs.map +0 -7
  313. package/dist/lib/node-esm/settings-KVP7TVX7.mjs +0 -29
  314. package/dist/lib/node-esm/settings-KVP7TVX7.mjs.map +0 -7
  315. package/dist/lib/node-esm/state-NW3W4JCQ.mjs +0 -38
  316. package/dist/lib/node-esm/state-NW3W4JCQ.mjs.map +0 -7
  317. package/dist/types/src/capabilities/anchor-sort.d.ts +0 -6
  318. package/dist/types/src/capabilities/anchor-sort.d.ts.map +0 -1
  319. package/dist/types/src/capabilities/app-graph-serializer.d.ts +0 -4
  320. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +0 -1
  321. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -11
  322. package/dist/types/src/capabilities/artifact-definition.d.ts.map +0 -1
  323. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  324. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  325. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  326. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  327. package/dist/types/src/capabilities/react-surface.d.ts +0 -4
  328. package/dist/types/src/capabilities/react-surface.d.ts.map +0 -1
  329. package/dist/types/src/capabilities/settings.d.ts +0 -4
  330. package/dist/types/src/capabilities/settings.d.ts.map +0 -1
  331. package/dist/types/src/capabilities/state.d.ts +0 -11
  332. package/dist/types/src/capabilities/state.d.ts.map +0 -1
  333. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts +0 -6
  334. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.d.ts.map +0 -1
  335. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts +0 -42
  336. package/dist/types/src/components/MarkdownPreview/MarkdownPreview.stories.d.ts.map +0 -1
  337. package/dist/types/src/components/MarkdownPreview/index.d.ts +0 -4
  338. package/dist/types/src/components/MarkdownPreview/index.d.ts.map +0 -1
  339. package/dist/types/src/components/Toolbar.stories.d.ts +0 -11
  340. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  341. package/dist/types/src/events.d.ts +0 -4
  342. package/dist/types/src/events.d.ts.map +0 -1
  343. package/dist/types/src/extensions.d.ts +0 -24
  344. package/dist/types/src/extensions.d.ts.map +0 -1
  345. package/dist/types/src/types/schema.d.ts +0 -35
  346. package/dist/types/src/types/schema.d.ts.map +0 -1
  347. package/src/capabilities/anchor-sort.ts +0 -30
  348. package/src/capabilities/app-graph-serializer.ts +0 -52
  349. package/src/capabilities/artifact-definition.ts +0 -116
  350. package/src/capabilities/capabilities.ts +0 -20
  351. package/src/capabilities/intent-resolver.ts +0 -63
  352. package/src/capabilities/react-surface.tsx +0 -113
  353. package/src/capabilities/settings.ts +0 -25
  354. package/src/capabilities/state.ts +0 -31
  355. package/src/components/MarkdownPreview/MarkdownPreview.stories.tsx +0 -81
  356. package/src/components/MarkdownPreview/MarkdownPreview.tsx +0 -73
  357. package/src/components/MarkdownPreview/index.ts +0 -9
  358. package/src/components/Toolbar.stories.tsx +0 -113
  359. package/src/events.ts +0 -11
  360. package/src/types/schema.ts +0 -39
@@ -0,0 +1,215 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, expect, it } from '@effect/vitest';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Layer from 'effect/Layer';
8
+
9
+ import { MemoizedAiService } from '@dxos/ai/testing';
10
+ import { AiContextService, AiConversationService } from '@dxos/assistant';
11
+ import { AssistantTestLayer } from '@dxos/assistant/testing';
12
+ import { Blueprint } from '@dxos/blueprints';
13
+ import { SpaceProperties } from '@dxos/client-protocol';
14
+ import { Database, Obj, Query, Ref } from '@dxos/echo';
15
+ import { TestHelpers } from '@dxos/effect/testing';
16
+ import { FunctionInvocationService } from '@dxos/functions';
17
+ import { invariant } from '@dxos/invariant';
18
+ import { ObjectId } from '@dxos/keys';
19
+ import { Markdown } from '@dxos/plugin-markdown/types';
20
+ import { Collection } from '@dxos/schema';
21
+ import { HasSubject } from '@dxos/types';
22
+ import { trim } from '@dxos/util';
23
+
24
+ import { WithProperties } from '../../testing';
25
+ import * as MarkdownBlueprint from '../markdown-blueprint';
26
+
27
+ import update from './update';
28
+
29
+ ObjectId.dangerouslyDisableRandomness();
30
+
31
+ const TestLayer = AssistantTestLayer({
32
+ functions: [...MarkdownBlueprint.functions],
33
+ types: [SpaceProperties, Collection.Collection, Blueprint.Blueprint, Markdown.Document, HasSubject.HasSubject],
34
+ tracing: 'pretty',
35
+ });
36
+
37
+ describe('update', () => {
38
+ it.effect(
39
+ 'call a function to update a markdown document',
40
+ Effect.fnUntraced(
41
+ function* (_) {
42
+ const doc = Markdown.make({
43
+ name: 'BlueYard',
44
+ content: 'Founders and portfolio of BlueYard.',
45
+ });
46
+ yield* Database.add(doc);
47
+
48
+ yield* FunctionInvocationService.invokeFunction(update, {
49
+ doc: Ref.make(doc),
50
+ edits: [{ oldString: 'Founders', newString: '# Founders' }],
51
+ });
52
+
53
+ const updatedDoc = yield* Database.resolve(Obj.getDXN(doc), Markdown.Document);
54
+ expect(updatedDoc.name).toBe(doc.name);
55
+ const text = yield* Database.load(updatedDoc.content);
56
+ expect(text.content).toBe('# Founders and portfolio of BlueYard.');
57
+ },
58
+ WithProperties,
59
+ Effect.provide(TestLayer),
60
+ TestHelpers.provideTestContext,
61
+ ),
62
+ );
63
+
64
+ it.scoped(
65
+ 'create and update a markdown document',
66
+ Effect.fnUntraced(
67
+ function* (_) {
68
+ const markdownBlueprint = yield* Database.add(Obj.clone(MarkdownBlueprint.make()));
69
+ yield* AiContextService.bindContext({
70
+ blueprints: [Ref.make(markdownBlueprint)],
71
+ });
72
+
73
+ yield* AiConversationService.run({
74
+ prompt: `Create a document with a cookie recipe.`,
75
+ });
76
+ {
77
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
78
+ if (docs.length !== 1) {
79
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
80
+ }
81
+
82
+ const doc = docs[0];
83
+ invariant(Obj.instanceOf(Markdown.Document, doc));
84
+ console.log({
85
+ name: doc.name,
86
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
87
+ });
88
+ }
89
+
90
+ yield* AiConversationService.run({
91
+ prompt: 'Add a section with a holiday-themed variation.',
92
+ });
93
+ {
94
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
95
+ if (docs.length !== 1) {
96
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
97
+ }
98
+
99
+ const doc = docs[0];
100
+ invariant(Obj.instanceOf(Markdown.Document, doc));
101
+ console.log({
102
+ name: doc.name,
103
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
104
+ });
105
+ }
106
+ },
107
+ WithProperties,
108
+ Effect.provide(AiConversationService.layerNewQueue().pipe(Layer.provideMerge(TestLayer))),
109
+ TestHelpers.provideTestContext,
110
+ ),
111
+ MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
112
+ );
113
+
114
+ it.scoped(
115
+ 'update existing document',
116
+ Effect.fnUntraced(
117
+ function* (_) {
118
+ const document = yield* Database.add(
119
+ Markdown.make({
120
+ name: 'Cookie Recipe',
121
+ content: trim`
122
+ Ingredients:
123
+ - 2 cups of ???
124
+ - 1 cup of sugar
125
+ - 1 cup of butter
126
+ - 1 cup of eggs
127
+ `,
128
+ }),
129
+ );
130
+ const markdownBlueprint = yield* Database.add(Obj.clone(MarkdownBlueprint.make()));
131
+ yield* AiContextService.bindContext({
132
+ blueprints: [Ref.make(markdownBlueprint)],
133
+ objects: [Ref.make(document)],
134
+ });
135
+
136
+ yield* AiConversationService.run({
137
+ prompt: 'Add the missing ingredient (its flour).',
138
+ });
139
+
140
+ {
141
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
142
+ if (docs.length !== 1) {
143
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
144
+ }
145
+
146
+ const doc = docs[0];
147
+ invariant(Obj.instanceOf(Markdown.Document, doc));
148
+ const content = yield* Database.load(doc.content).pipe(Effect.map((_) => _.content));
149
+ console.log({
150
+ name: doc.name,
151
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
152
+ });
153
+ expect(content.toLowerCase()).toContain('flour');
154
+ }
155
+ },
156
+ WithProperties,
157
+ Effect.provide(AiConversationService.layerNewQueue().pipe(Layer.provideMerge(TestLayer))),
158
+ TestHelpers.provideTestContext,
159
+ ),
160
+ MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
161
+ );
162
+
163
+ it.scoped(
164
+ 'add lines to document one by one',
165
+ Effect.fnUntraced(
166
+ function* (_) {
167
+ const document = yield* Database.add(
168
+ Markdown.make({
169
+ name: 'Shopping list',
170
+ content: trim`
171
+ # Shopping list
172
+ `,
173
+ }),
174
+ );
175
+ const markdownBlueprint = yield* Database.add(Obj.clone(MarkdownBlueprint.make()));
176
+ yield* AiContextService.bindContext({
177
+ blueprints: [Ref.make(markdownBlueprint)],
178
+ objects: [Ref.make(document)],
179
+ });
180
+
181
+ yield* AiConversationService.run({
182
+ prompt: 'Add milk to the shopping list.',
183
+ });
184
+ yield* AiConversationService.run({
185
+ prompt: 'Add bread to the shopping list.',
186
+ });
187
+ yield* AiConversationService.run({
188
+ prompt: 'Add eggs to the shopping list.',
189
+ });
190
+
191
+ {
192
+ const docs = yield* Database.runQuery(Query.type(Markdown.Document));
193
+ if (docs.length !== 1) {
194
+ throw new Error(`Expected 1 document; got ${docs.length}: ${docs.map((_) => _.name)}`);
195
+ }
196
+
197
+ const doc = docs[0];
198
+ invariant(Obj.instanceOf(Markdown.Document, doc));
199
+ const content = yield* Database.load(doc.content).pipe(Effect.map((_) => _.content));
200
+ console.log({
201
+ name: doc.name,
202
+ content: yield* Database.load(doc.content).pipe(Effect.map((_) => _.content)),
203
+ });
204
+ expect(content.toLowerCase()).toContain('milk');
205
+ expect(content.toLowerCase()).toContain('bread');
206
+ expect(content.toLowerCase()).toContain('eggs');
207
+ }
208
+ },
209
+ WithProperties,
210
+ Effect.provide(AiConversationService.layerNewQueue().pipe(Layer.provideMerge(TestLayer))),
211
+ TestHelpers.provideTestContext,
212
+ ),
213
+ MemoizedAiService.isGenerationEnabled() ? 240_000 : 30_000,
214
+ );
215
+ });
@@ -0,0 +1,79 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { next as A, type Doc } from '@automerge/automerge';
6
+ import * as Effect from 'effect/Effect';
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import { Database, Type } from '@dxos/echo';
10
+ import { DocAccessor, createDocAccessor } from '@dxos/echo-db';
11
+ import { defineFunction } from '@dxos/functions';
12
+ import { trim } from '@dxos/util';
13
+
14
+ import { Markdown } from '../../types';
15
+
16
+ const Edit = Schema.Struct({
17
+ oldString: Schema.String.annotations({
18
+ description: 'The text to find in the document.',
19
+ }),
20
+ newString: Schema.String.annotations({
21
+ description: 'The text to replace it with.',
22
+ }),
23
+ replaceAll: Schema.optional(Schema.Boolean).annotations({
24
+ description: 'If true, replaces all occurrences. Defaults to false (first occurrence only).',
25
+ }),
26
+ });
27
+
28
+ // TODO(wittjosiah): Reconcile with ThreadAction.AddProposal.
29
+ // Based on opencode's MutilEdit tool: https://deepwiki.com/search/how-does-text-edit-tool-work_a159bc76-5401-424e-b29f-f087d1ea4f78
30
+ export default defineFunction({
31
+ key: 'dxos.org/function/markdown/update',
32
+ name: 'Update',
33
+ description: trim`
34
+ Applies a set of edits to the markdown document.
35
+ `,
36
+ inputSchema: Schema.Struct({
37
+ doc: Type.Ref(Markdown.Document).annotations({
38
+ description: 'The ID of the markdown document.',
39
+ }),
40
+ edits: Schema.Array(Edit).annotations({
41
+ description: 'The edits to apply to the document. Each edit finds oldString and replaces it with newString.',
42
+ }),
43
+ }),
44
+ outputSchema: Schema.Struct({
45
+ newContent: Schema.String,
46
+ }),
47
+ handler: Effect.fn(function* ({ data: { doc, edits } }) {
48
+ const content = yield* doc.pipe(
49
+ Database.load,
50
+ Effect.map((_) => _.content),
51
+ Effect.flatMap(Database.load),
52
+ );
53
+ const accessor = createDocAccessor(content, ['content']);
54
+
55
+ for (const edit of edits) {
56
+ accessor.handle.change((doc: Doc<typeof content>) => {
57
+ const text = DocAccessor.getValue<string>(accessor);
58
+ if (edit.replaceAll) {
59
+ let idx = text.indexOf(edit.oldString);
60
+ while (idx !== -1) {
61
+ A.splice(doc, accessor.path as A.Prop[], idx, edit.oldString.length, edit.newString);
62
+ const updated = DocAccessor.getValue<string>(accessor);
63
+ idx = updated.indexOf(edit.oldString, idx + edit.newString.length);
64
+ }
65
+ } else {
66
+ const idx = text.indexOf(edit.oldString);
67
+ if (idx === -1) {
68
+ throw new Error(`Edit not found: ${JSON.stringify(edit.oldString)}`);
69
+ }
70
+ A.splice(doc, accessor.path as A.Prop[], idx, edit.oldString.length, edit.newString);
71
+ }
72
+ });
73
+ }
74
+
75
+ return {
76
+ newContent: DocAccessor.getValue<string>(accessor),
77
+ };
78
+ }),
79
+ });
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * as MarkdownBlueprint from './markdown-blueprint';
@@ -0,0 +1,38 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Blueprint, Template } from '@dxos/blueprints';
6
+ import { type FunctionDefinition } from '@dxos/functions';
7
+ import { trim } from '@dxos/util';
8
+
9
+ import { create, open, update } from './functions';
10
+
11
+ export const functions: FunctionDefinition[] = [create, open, update];
12
+
13
+ export const Key = 'dxos.org/blueprint/markdown';
14
+
15
+ export const make = () =>
16
+ Blueprint.make({
17
+ key: Key,
18
+ name: 'Markdown',
19
+ tools: Blueprint.toolDefinitions({ functions }),
20
+ instructions: Template.make({
21
+ // TODO(wittjosiah): Move example to function input schema annotation.
22
+ source: trim`
23
+ {{! Markdown }}
24
+
25
+ You can create, read and update markdown documents.
26
+ When asked to edit or update documents return updates as a set of compact diff string pairs.
27
+ For each diff, respond with the smallest possible matching span.
28
+
29
+ Example:
30
+ ${'```'}diff
31
+ - "There is a tyop in this sentence."
32
+ + "There is a typo in this sentence."
33
+ - "This id good."
34
+ + "This sentence is really good."
35
+ ${'```'}
36
+ `,
37
+ }),
38
+ });
@@ -0,0 +1,37 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { AppCapabilities } from '@dxos/app-toolkit';
9
+ import { Relation } from '@dxos/echo';
10
+ import { createDocAccessor, getRangeFromCursor } from '@dxos/echo-db';
11
+ import { type AnchoredTo } from '@dxos/types';
12
+
13
+ import { Markdown } from '../../types';
14
+
15
+ export default Capability.makeModule(() =>
16
+ Effect.succeed(
17
+ Capability.contributes(AppCapabilities.AnchorSort, {
18
+ key: Markdown.Document.typename,
19
+ sort: (anchorA: AnchoredTo.AnchoredTo, anchorB: AnchoredTo.AnchoredTo) => {
20
+ const doc = Relation.getTarget(anchorA) as Markdown.Document;
21
+ const accessor = doc.content.target ? createDocAccessor(doc.content.target, ['content']) : undefined;
22
+ if (doc !== Relation.getTarget(anchorB) || !accessor) {
23
+ return 0;
24
+ }
25
+
26
+ const getStartPosition = (cursor: string | undefined) => {
27
+ const range = cursor ? getRangeFromCursor(accessor, cursor) : undefined;
28
+ return range?.start ?? Number.MAX_SAFE_INTEGER;
29
+ };
30
+
31
+ const posA = getStartPosition(anchorA.anchor);
32
+ const posB = getStartPosition(anchorB.anchor);
33
+ return posA - posB;
34
+ },
35
+ }),
36
+ ),
37
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const AnchorSort = Capability.lazy('AnchorSort', () => import('./anchor-sort'));
@@ -0,0 +1,60 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capabilities, Capability } from '@dxos/app-framework';
8
+ import { AppCapabilities } from '@dxos/app-toolkit';
9
+ import { Obj } from '@dxos/echo';
10
+ import { SpaceOperation } from '@dxos/plugin-space/types';
11
+ import { isSpace } from '@dxos/react-client/echo';
12
+ import { Collection } from '@dxos/schema';
13
+
14
+ import { translations } from '../../translations';
15
+ import { Markdown, MarkdownOperation } from '../../types';
16
+
17
+ export default Capability.makeModule(
18
+ Effect.fnUntraced(function* () {
19
+ // Get context for lazy capability access in callbacks.
20
+ const capabilities = yield* Capability.Service;
21
+
22
+ return Capability.contributes(AppCapabilities.AppGraphSerializer, [
23
+ {
24
+ inputType: Markdown.Document.typename,
25
+ outputType: 'text/markdown',
26
+ // Reconcile with metadata serializers.
27
+ serialize: async (node) => {
28
+ const doc = node.data;
29
+ const content = await doc.content.load();
30
+ return {
31
+ name:
32
+ doc.name ||
33
+ doc.fallbackName ||
34
+ translations[0]['en-US'][Markdown.Document.typename]['object name placeholder'],
35
+ data: content.content,
36
+ type: 'text/markdown',
37
+ };
38
+ },
39
+ deserialize: async (data, ancestors) => {
40
+ const space = ancestors.find(isSpace);
41
+ const target =
42
+ ancestors.findLast((ancestor) => Obj.instanceOf(Collection.Collection, ancestor)) ??
43
+ space?.properties[Collection.Collection.typename]?.target;
44
+ if (!space || !target) {
45
+ return;
46
+ }
47
+
48
+ const { invokePromise } = capabilities.get(Capabilities.OperationInvoker);
49
+ const createResult = await invokePromise(MarkdownOperation.Create, { name: data.name, content: data.data });
50
+ if (!createResult.data?.object) {
51
+ return undefined;
52
+ }
53
+ await invokePromise(SpaceOperation.AddObject, { target, object: createResult.data.object });
54
+
55
+ return createResult.data.object;
56
+ },
57
+ },
58
+ ]);
59
+ }),
60
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const AppGraphSerializer = Capability.lazy('AppGraphSerializer', () => import('./app-graph-serializer'));
@@ -0,0 +1,110 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // ISSUE(burdon): defineArtifact
6
+ // @ts-nocheck
7
+
8
+ import * as Effect from 'effect/Effect';
9
+ import * as Schema from 'effect/Schema';
10
+
11
+ import { ToolResult, createTool } from '@dxos/ai';
12
+ import { Capabilities, Capability } from '@dxos/app-framework';
13
+ import { ArtifactId, createArtifactElement } from '@dxos/assistant';
14
+ import { defineArtifact } from '@dxos/blueprints';
15
+ import { Obj } from '@dxos/echo';
16
+ import { assertArgument, invariant } from '@dxos/invariant';
17
+ import { SpaceOperation } from '@dxos/plugin-space/types';
18
+ import { Filter } from '@dxos/react-client/echo';
19
+
20
+ import { meta } from '../../meta';
21
+ import { Markdown } from '../../types';
22
+
23
+ export default Capability.makeModule(() =>
24
+ Effect.sync(() => {
25
+ const definition = defineArtifact({
26
+ id: `artifact:${meta.id}`, // TODO(burdon): meta.id/artifact?
27
+ name: meta.name,
28
+ instructions: `
29
+ The markdown plugin allows you to work with text documents in the current space.
30
+ Use these tools to interact with documents, including listing available documents and retrieving their content.
31
+ Documents are stored in Markdown format.
32
+ `,
33
+ schema: Markdown.Document,
34
+ tools: [
35
+ createTool(meta.id, {
36
+ name: 'create',
37
+ description: 'Create a new markdown document',
38
+ caption: 'Creating document...',
39
+ schema: Schema.Struct({
40
+ name: Schema.optional(Schema.String).annotations({
41
+ description: 'Optional name for the document.',
42
+ }),
43
+ content: Schema.String.annotations({
44
+ description: 'The content of the document.',
45
+ }),
46
+ }),
47
+ execute: async ({ name, content }, { extensions }) => {
48
+ invariant(extensions?.space, 'No space');
49
+ invariant(extensions?.invoke, 'No operation invoker');
50
+
51
+ const document = Markdown.make({ name, content });
52
+
53
+ const { error } = await extensions.invoke(SpaceOperation.AddObject, {
54
+ target: extensions.space,
55
+ object: document,
56
+ });
57
+ if (error) {
58
+ return ToolResult.Error(error?.message ?? 'Failed to add document to space');
59
+ }
60
+
61
+ return ToolResult.Success(createArtifactElement(document.id));
62
+ },
63
+ }),
64
+ createTool(meta.id, {
65
+ name: 'list',
66
+ description: 'List all markdown documents in the current space.',
67
+ caption: 'Listing markdown documents...',
68
+ schema: Schema.Struct({}),
69
+ execute: async (_input, { extensions }) => {
70
+ invariant(extensions?.space, 'No space');
71
+ const space = extensions.space;
72
+ const { objects: documents } = await space.db.query(Filter.type(Markdown.Document)).run();
73
+ const documentInfo = documents.map((doc) => {
74
+ invariant(Obj.instanceOf(Markdown.Document, doc));
75
+ return {
76
+ id: Obj.getDXN(doc).toString(),
77
+ name: doc.name || doc.fallbackName || 'Unnamed Document',
78
+ // TODO(ZaymonFC): Include updatedAt?
79
+ };
80
+ });
81
+
82
+ return ToolResult.Success(documentInfo);
83
+ },
84
+ }),
85
+ createTool(meta.id, {
86
+ name: 'inspect',
87
+ description: 'Read the content of a markdown document.',
88
+ caption: 'Inspecting markdown document...',
89
+ schema: Schema.Struct({
90
+ id: ArtifactId,
91
+ }),
92
+ execute: async ({ id }, { extensions }) => {
93
+ invariant(extensions?.space, 'No space');
94
+ const document = await extensions.space.db.query(Filter.id(ArtifactId.toDXN(id).toString())).first();
95
+ assertArgument(Obj.instanceOf(Markdown.Document, document), 'document', 'Invalid type');
96
+
97
+ const { content } = await document.content?.load();
98
+ return ToolResult.Success({
99
+ id: Obj.getDXN(document).toString(),
100
+ name: document.name || document.fallbackName || 'Unnamed Document',
101
+ content,
102
+ });
103
+ },
104
+ }),
105
+ ],
106
+ });
107
+
108
+ return Capability.contributes(Capabilities.ArtifactDefinition, definition);
109
+ }),
110
+ );
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const ArtifactDefinition = Capability.lazy('ArtifactDefinition', () => import('./artifact-definition'));
@@ -0,0 +1,26 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Capability } from '@dxos/app-framework';
8
+ import { AppCapabilities } from '@dxos/app-toolkit';
9
+
10
+ import { MarkdownBlueprint } from '../../blueprints';
11
+
12
+ export const functions = MarkdownBlueprint.functions;
13
+
14
+ export type BlueprintCapabilities = [
15
+ Capability.Capability<typeof AppCapabilities.Functions>,
16
+ Capability.Capability<typeof AppCapabilities.BlueprintDefinition>,
17
+ ];
18
+
19
+ const blueprintDefinition = Capability.makeModule<[], BlueprintCapabilities>(() =>
20
+ Effect.succeed([
21
+ Capability.contributes(AppCapabilities.Functions, functions),
22
+ Capability.contributes(AppCapabilities.BlueprintDefinition, MarkdownBlueprint.make()),
23
+ ]),
24
+ );
25
+
26
+ export default blueprintDefinition;
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const BlueprintDefinition = Capability.lazy('BlueprintDefinition', () => import('./blueprint-definition'));
@@ -2,14 +2,10 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { lazy } from '@dxos/app-framework';
6
-
7
- export const AnchorSort = lazy(() => import('./anchor-sort'));
8
- export const AppGraphSerializer = lazy(() => import('./app-graph-serializer'));
9
- export const ArtifactDefinition = lazy(() => import('./artifact-definition'));
10
- export const IntentResolver = lazy(() => import('./intent-resolver'));
11
- export const ReactSurface = lazy(() => import('./react-surface'));
12
- export const MarkdownSettings = lazy(() => import('./settings'));
13
- export const MarkdownState = lazy(() => import('./state'));
14
-
15
- export * from './capabilities';
5
+ export * from './anchor-sort';
6
+ export * from './app-graph-serializer';
7
+ export * from './blueprint-definition';
8
+ export * from './operation-resolver';
9
+ export * from './react-surface';
10
+ export * from './settings';
11
+ export * from './state';
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capability } from '@dxos/app-framework';
6
+
7
+ export const OperationResolver = Capability.lazy('OperationResolver', () => import('./operation-resolver'));