@dxos/plugin-markdown 0.8.4-main.ead640a → 0.8.4-main.effb148878

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 (409) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/neutral/EditableMarkdownCard-AW7MD35U.mjs +34 -0
  4. package/dist/lib/neutral/EditableMarkdownCard-AW7MD35U.mjs.map +7 -0
  5. package/dist/lib/neutral/MarkdownArticle-Z4QRU3WD.mjs +126 -0
  6. package/dist/lib/neutral/MarkdownArticle-Z4QRU3WD.mjs.map +7 -0
  7. package/dist/lib/neutral/MarkdownCard-36P4AHYL.mjs +107 -0
  8. package/dist/lib/neutral/MarkdownCard-36P4AHYL.mjs.map +7 -0
  9. package/dist/lib/neutral/MarkdownPlugin.mjs +58 -0
  10. package/dist/lib/neutral/MarkdownPlugin.mjs.map +7 -0
  11. package/dist/lib/neutral/MarkdownPlugin.node.mjs +25 -0
  12. package/dist/lib/neutral/MarkdownPlugin.node.mjs.map +7 -0
  13. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs +23 -0
  14. package/dist/lib/neutral/MarkdownPlugin.workerd.mjs.map +7 -0
  15. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs +32 -0
  16. package/dist/lib/neutral/MarkdownSettings-YCTZJL5V.mjs.map +7 -0
  17. package/dist/lib/neutral/anchor-sort-37GOHBLW.mjs +32 -0
  18. package/dist/lib/neutral/anchor-sort-37GOHBLW.mjs.map +7 -0
  19. package/dist/lib/neutral/app-graph-serializer-VL5KPM7V.mjs +55 -0
  20. package/dist/lib/neutral/app-graph-serializer-VL5KPM7V.mjs.map +7 -0
  21. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs +15 -0
  22. package/dist/lib/neutral/blueprint-definition-33OK2KUL.mjs.map +7 -0
  23. package/dist/lib/neutral/blueprints/index.mjs +8 -0
  24. package/dist/lib/neutral/capabilities/index.mjs +25 -0
  25. package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
  26. package/dist/lib/neutral/capabilities/node.mjs +11 -0
  27. package/dist/lib/neutral/capabilities/node.mjs.map +7 -0
  28. package/dist/lib/neutral/chunk-5JY7PO7Z.mjs +285 -0
  29. package/dist/lib/neutral/chunk-5JY7PO7Z.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  31. package/dist/lib/neutral/chunk-KDN4GKG2.mjs +98 -0
  32. package/dist/lib/neutral/chunk-KDN4GKG2.mjs.map +7 -0
  33. package/dist/lib/neutral/chunk-LXNSKCPD.mjs +44 -0
  34. package/dist/lib/neutral/chunk-LXNSKCPD.mjs.map +7 -0
  35. package/dist/lib/neutral/chunk-MGVKW5GN.mjs +8 -0
  36. package/dist/lib/neutral/chunk-MGVKW5GN.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-N76TRQSY.mjs +28 -0
  38. package/dist/lib/neutral/chunk-N76TRQSY.mjs.map +7 -0
  39. package/dist/lib/neutral/comment-config-ZEA66BUR.mjs +31 -0
  40. package/dist/lib/neutral/comment-config-ZEA66BUR.mjs.map +7 -0
  41. package/dist/lib/neutral/components/index.mjs +370 -0
  42. package/dist/lib/neutral/components/index.mjs.map +7 -0
  43. package/dist/lib/neutral/containers/index.mjs +13 -0
  44. package/dist/lib/neutral/containers/index.mjs.map +7 -0
  45. package/dist/lib/neutral/create-P255GUFG.mjs +28 -0
  46. package/dist/lib/neutral/create-P255GUFG.mjs.map +7 -0
  47. package/dist/lib/neutral/create-markdown-N2DOEZXT.mjs +20 -0
  48. package/dist/lib/neutral/create-markdown-N2DOEZXT.mjs.map +7 -0
  49. package/dist/lib/neutral/create-object-VU3KX663.mjs +28 -0
  50. package/dist/lib/neutral/create-object-VU3KX663.mjs.map +7 -0
  51. package/dist/lib/neutral/hooks/index.mjs +327 -0
  52. package/dist/lib/neutral/hooks/index.mjs.map +7 -0
  53. package/dist/lib/neutral/index.mjs +42 -0
  54. package/dist/lib/neutral/meta.json +1 -0
  55. package/dist/lib/neutral/meta.mjs +8 -0
  56. package/dist/lib/neutral/open-4U46EH7F.mjs +20 -0
  57. package/dist/lib/neutral/open-4U46EH7F.mjs.map +7 -0
  58. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs +13 -0
  59. package/dist/lib/neutral/operation-handler-2ARMPBGZ.mjs.map +7 -0
  60. package/dist/lib/neutral/operations/index.mjs +8 -0
  61. package/dist/lib/neutral/operations/index.mjs.map +7 -0
  62. package/dist/lib/neutral/plugin.mjs +16 -0
  63. package/dist/lib/neutral/plugin.mjs.map +7 -0
  64. package/dist/lib/neutral/react-surface-P2WX2KXA.mjs +119 -0
  65. package/dist/lib/neutral/react-surface-P2WX2KXA.mjs.map +7 -0
  66. package/dist/lib/neutral/scroll-to-anchor-AFFA7YBC.mjs +47 -0
  67. package/dist/lib/neutral/scroll-to-anchor-AFFA7YBC.mjs.map +7 -0
  68. package/dist/lib/neutral/set-view-mode-UERQK6D7.mjs +24 -0
  69. package/dist/lib/neutral/set-view-mode-UERQK6D7.mjs.map +7 -0
  70. package/dist/lib/neutral/settings-TDGDLCUR.mjs +34 -0
  71. package/dist/lib/neutral/settings-TDGDLCUR.mjs.map +7 -0
  72. package/dist/lib/neutral/state-5COCF5PN.mjs +44 -0
  73. package/dist/lib/neutral/state-5COCF5PN.mjs.map +7 -0
  74. package/dist/lib/neutral/testing.mjs +19 -0
  75. package/dist/lib/neutral/testing.mjs.map +7 -0
  76. package/dist/lib/neutral/translations.mjs +44 -0
  77. package/dist/lib/neutral/translations.mjs.map +7 -0
  78. package/dist/lib/neutral/types/index.mjs +16 -0
  79. package/dist/lib/neutral/types/index.mjs.map +7 -0
  80. package/dist/lib/neutral/update-markdown-Q4MT3TW3.mjs +44 -0
  81. package/dist/lib/neutral/update-markdown-Q4MT3TW3.mjs.map +7 -0
  82. package/dist/types/src/MarkdownPlugin.d.ts +3 -1
  83. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  84. package/dist/types/src/MarkdownPlugin.node.d.ts +4 -0
  85. package/dist/types/src/MarkdownPlugin.node.d.ts.map +1 -0
  86. package/dist/types/src/MarkdownPlugin.test.d.ts +2 -0
  87. package/dist/types/src/MarkdownPlugin.test.d.ts.map +1 -0
  88. package/dist/types/src/MarkdownPlugin.workerd.d.ts +4 -0
  89. package/dist/types/src/MarkdownPlugin.workerd.d.ts.map +1 -0
  90. package/dist/types/src/blueprints/index.d.ts +2 -0
  91. package/dist/types/src/blueprints/index.d.ts.map +1 -0
  92. package/dist/types/src/blueprints/markdown-blueprint.d.ts +4 -0
  93. package/dist/types/src/blueprints/markdown-blueprint.d.ts.map +1 -0
  94. package/dist/types/src/capabilities/anchor-sort.d.ts +4 -4
  95. package/dist/types/src/capabilities/anchor-sort.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/app-graph-serializer.d.ts +3 -2
  97. package/dist/types/src/capabilities/app-graph-serializer.d.ts.map +1 -1
  98. package/dist/types/src/capabilities/artifact-definition.d.ts +3 -1
  99. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  100. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -4
  101. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/comment-config.d.ts +12 -0
  103. package/dist/types/src/capabilities/comment-config.d.ts.map +1 -0
  104. package/dist/types/src/capabilities/create-object.d.ts +11 -0
  105. package/dist/types/src/capabilities/create-object.d.ts.map +1 -0
  106. package/dist/types/src/capabilities/index.d.ts +22 -18
  107. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/node.d.ts +10 -0
  109. package/dist/types/src/capabilities/node.d.ts.map +1 -0
  110. package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
  111. package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
  112. package/dist/types/src/capabilities/react-surface.d.ts +3 -2
  113. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  114. package/dist/types/src/capabilities/settings.d.ts +4 -2
  115. package/dist/types/src/capabilities/settings.d.ts.map +1 -1
  116. package/dist/types/src/capabilities/state.d.ts +4 -9
  117. package/dist/types/src/capabilities/state.d.ts.map +1 -1
  118. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts +11 -0
  119. package/dist/types/src/components/MarkdownEditor/FileUpload.d.ts.map +1 -0
  120. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +52 -21
  121. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  122. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +5 -110
  123. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  124. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts +33 -0
  125. package/dist/types/src/components/MarkdownEditor/MarkdownEditorContent.d.ts.map +1 -0
  126. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts +13 -0
  127. package/dist/types/src/components/MarkdownEditor/MarkdownEditorToolbar.d.ts.map +1 -0
  128. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts +4 -4
  129. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  130. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts +94 -0
  131. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.stories.d.ts.map +1 -0
  132. package/dist/types/src/components/MarkdownSettings/index.d.ts +1 -1
  133. package/dist/types/src/components/MarkdownSettings/index.d.ts.map +1 -1
  134. package/dist/types/src/components/index.d.ts +3 -3
  135. package/dist/types/src/components/index.d.ts.map +1 -1
  136. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts +15 -0
  137. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.d.ts.map +1 -0
  138. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.d.ts +9 -0
  139. package/dist/types/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.d.ts.map +1 -0
  140. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts +3 -0
  141. package/dist/types/src/containers/EditableMarkdownCard/index.d.ts.map +1 -0
  142. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts +40 -0
  143. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.d.ts.map +1 -0
  144. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts +97 -0
  145. package/dist/types/src/containers/MarkdownArticle/MarkdownArticle.stories.d.ts.map +1 -0
  146. package/dist/types/src/containers/MarkdownArticle/index.d.ts +3 -0
  147. package/dist/types/src/containers/MarkdownArticle/index.d.ts.map +1 -0
  148. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts +8 -0
  149. package/dist/types/src/containers/MarkdownCard/MarkdownCard.d.ts.map +1 -0
  150. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts +9 -0
  151. package/dist/types/src/containers/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -0
  152. package/dist/types/src/containers/MarkdownCard/index.d.ts +2 -0
  153. package/dist/types/src/containers/MarkdownCard/index.d.ts.map +1 -0
  154. package/dist/types/src/containers/MarkdownCard/snippet.d.ts +17 -0
  155. package/dist/types/src/containers/MarkdownCard/snippet.d.ts.map +1 -0
  156. package/dist/types/src/containers/index.d.ts +6 -0
  157. package/dist/types/src/containers/index.d.ts.map +1 -0
  158. package/dist/types/src/hooks/index.d.ts +3 -1
  159. package/dist/types/src/hooks/index.d.ts.map +1 -1
  160. package/dist/types/src/hooks/useEditorMenuOptions.d.ts +9 -0
  161. package/dist/types/src/hooks/useEditorMenuOptions.d.ts.map +1 -0
  162. package/dist/types/src/hooks/useExtensions.d.ts +25 -0
  163. package/dist/types/src/hooks/useExtensions.d.ts.map +1 -0
  164. package/dist/types/src/hooks/useLinkQuery.d.ts +4 -0
  165. package/dist/types/src/hooks/useLinkQuery.d.ts.map +1 -0
  166. package/dist/types/src/index.d.ts +2 -3
  167. package/dist/types/src/index.d.ts.map +1 -1
  168. package/dist/types/src/meta.d.ts +2 -2
  169. package/dist/types/src/meta.d.ts.map +1 -1
  170. package/dist/types/src/operations/create-markdown.d.ts +5 -0
  171. package/dist/types/src/operations/create-markdown.d.ts.map +1 -0
  172. package/dist/types/src/operations/create.d.ts +5 -0
  173. package/dist/types/src/operations/create.d.ts.map +1 -0
  174. package/dist/types/src/operations/create.test.d.ts +2 -0
  175. package/dist/types/src/operations/create.test.d.ts.map +1 -0
  176. package/dist/types/src/operations/index.d.ts +3 -0
  177. package/dist/types/src/operations/index.d.ts.map +1 -0
  178. package/dist/types/src/operations/open.d.ts +5 -0
  179. package/dist/types/src/operations/open.d.ts.map +1 -0
  180. package/dist/types/src/operations/scroll-to-anchor.d.ts +5 -0
  181. package/dist/types/src/operations/scroll-to-anchor.d.ts.map +1 -0
  182. package/dist/types/src/operations/set-view-mode.d.ts +5 -0
  183. package/dist/types/src/operations/set-view-mode.d.ts.map +1 -0
  184. package/dist/types/src/operations/update-markdown.d.ts +5 -0
  185. package/dist/types/src/operations/update-markdown.d.ts.map +1 -0
  186. package/dist/types/src/operations/update.test.d.ts +2 -0
  187. package/dist/types/src/operations/update.test.d.ts.map +1 -0
  188. package/dist/types/src/plugin.d.ts +4 -0
  189. package/dist/types/src/plugin.d.ts.map +1 -0
  190. package/dist/types/src/testing.d.ts +7 -0
  191. package/dist/types/src/testing.d.ts.map +1 -0
  192. package/dist/types/src/translations.d.ts +74 -33
  193. package/dist/types/src/translations.d.ts.map +1 -1
  194. package/dist/types/src/types/Markdown.d.ts +35 -34
  195. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  196. package/dist/types/src/types/MarkdownCapabilities.d.ts +32 -0
  197. package/dist/types/src/types/MarkdownCapabilities.d.ts.map +1 -0
  198. package/dist/types/src/types/MarkdownEvents.d.ts +3 -0
  199. package/dist/types/src/types/MarkdownEvents.d.ts.map +1 -0
  200. package/dist/types/src/types/MarkdownOperation.d.ts +64 -0
  201. package/dist/types/src/types/MarkdownOperation.d.ts.map +1 -0
  202. package/dist/types/src/types/Settings.d.ts +30 -0
  203. package/dist/types/src/types/Settings.d.ts.map +1 -0
  204. package/dist/types/src/types/index.d.ts +5 -2
  205. package/dist/types/src/types/index.d.ts.map +1 -1
  206. package/dist/types/src/types/types.d.ts +3 -2
  207. package/dist/types/src/types/types.d.ts.map +1 -1
  208. package/dist/types/src/util.d.ts +8 -5
  209. package/dist/types/src/util.d.ts.map +1 -1
  210. package/dist/types/src/util.test.d.ts +2 -0
  211. package/dist/types/src/util.test.d.ts.map +1 -0
  212. package/dist/types/tsconfig.tsbuildinfo +1 -1
  213. package/package.json +154 -74
  214. package/src/MarkdownPlugin.node.ts +20 -0
  215. package/src/MarkdownPlugin.test.ts +26 -0
  216. package/src/MarkdownPlugin.tsx +34 -104
  217. package/src/MarkdownPlugin.workerd.ts +19 -0
  218. package/src/blueprints/index.ts +5 -0
  219. package/src/blueprints/markdown-blueprint.ts +43 -0
  220. package/src/capabilities/anchor-sort.ts +29 -22
  221. package/src/capabilities/app-graph-serializer.ts +52 -43
  222. package/src/capabilities/artifact-definition.ts +83 -86
  223. package/src/capabilities/blueprint-definition.ts +11 -31
  224. package/src/capabilities/comment-config.ts +33 -0
  225. package/src/capabilities/create-object.ts +31 -0
  226. package/src/capabilities/index.ts +15 -12
  227. package/src/capabilities/node.ts +13 -0
  228. package/src/capabilities/operation-handler.ts +16 -0
  229. package/src/capabilities/react-surface.tsx +116 -103
  230. package/src/capabilities/settings.ts +30 -18
  231. package/src/capabilities/state.ts +41 -25
  232. package/src/components/MarkdownEditor/FileUpload.tsx +63 -0
  233. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +63 -40
  234. package/src/components/MarkdownEditor/MarkdownEditor.tsx +248 -256
  235. package/src/components/MarkdownEditor/MarkdownEditorContent.tsx +169 -0
  236. package/src/components/MarkdownEditor/MarkdownEditorToolbar.tsx +47 -0
  237. package/src/components/MarkdownSettings/MarkdownSettings.stories.tsx +40 -0
  238. package/src/components/MarkdownSettings/MarkdownSettings.tsx +23 -96
  239. package/src/components/MarkdownSettings/index.ts +1 -1
  240. package/src/components/index.ts +4 -5
  241. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.stories.tsx +86 -0
  242. package/src/containers/EditableMarkdownCard/EditableMarkdownCard.tsx +44 -0
  243. package/src/containers/EditableMarkdownCard/index.ts +6 -0
  244. package/src/containers/MarkdownArticle/MarkdownArticle.stories.tsx +135 -0
  245. package/src/containers/MarkdownArticle/MarkdownArticle.tsx +146 -0
  246. package/src/containers/MarkdownArticle/index.ts +6 -0
  247. package/src/containers/MarkdownCard/MarkdownCard.stories.tsx +68 -0
  248. package/src/containers/MarkdownCard/MarkdownCard.tsx +75 -0
  249. package/src/containers/MarkdownCard/index.ts +5 -0
  250. package/src/containers/MarkdownCard/snippet.ts +54 -0
  251. package/src/containers/index.ts +11 -0
  252. package/src/hooks/index.ts +3 -1
  253. package/src/hooks/useEditorMenuOptions.ts +68 -0
  254. package/src/hooks/useExtensions.tsx +268 -0
  255. package/src/hooks/useLinkQuery.ts +99 -0
  256. package/src/index.ts +2 -5
  257. package/src/meta.ts +16 -7
  258. package/src/operations/create-markdown.ts +19 -0
  259. package/src/operations/create.conversations.json +1 -0
  260. package/src/operations/create.test.ts +96 -0
  261. package/src/operations/create.ts +26 -0
  262. package/src/operations/index.ts +14 -0
  263. package/src/operations/open.ts +25 -0
  264. package/src/operations/scroll-to-anchor.ts +38 -0
  265. package/src/operations/set-view-mode.ts +23 -0
  266. package/src/operations/update-markdown.ts +51 -0
  267. package/src/operations/update.conversations.json +1 -0
  268. package/src/operations/update.test.ts +213 -0
  269. package/src/plugin.ts +11 -0
  270. package/src/testing.ts +32 -0
  271. package/src/translations.ts +28 -33
  272. package/src/types/Markdown.ts +28 -34
  273. package/src/types/MarkdownCapabilities.ts +51 -0
  274. package/src/types/MarkdownEvents.ts +14 -0
  275. package/src/types/MarkdownOperation.ts +125 -0
  276. package/src/types/Settings.ts +85 -0
  277. package/src/types/index.ts +6 -2
  278. package/src/types/types.ts +7 -3
  279. package/src/util.test.ts +44 -0
  280. package/src/util.tsx +82 -13
  281. package/dist/lib/browser/MarkdownCard-AGWOTODZ.mjs +0 -83
  282. package/dist/lib/browser/MarkdownCard-AGWOTODZ.mjs.map +0 -7
  283. package/dist/lib/browser/MarkdownContainer-MV2UNAUV.mjs +0 -751
  284. package/dist/lib/browser/MarkdownContainer-MV2UNAUV.mjs.map +0 -7
  285. package/dist/lib/browser/anchor-sort-YWJI3BKT.mjs +0 -32
  286. package/dist/lib/browser/anchor-sort-YWJI3BKT.mjs.map +0 -7
  287. package/dist/lib/browser/app-graph-serializer-KYDFCUOW.mjs +0 -51
  288. package/dist/lib/browser/app-graph-serializer-KYDFCUOW.mjs.map +0 -7
  289. package/dist/lib/browser/blueprint-definition-BHRMFZAC.mjs +0 -11
  290. package/dist/lib/browser/chunk-6KU5DKP7.mjs +0 -51
  291. package/dist/lib/browser/chunk-6KU5DKP7.mjs.map +0 -7
  292. package/dist/lib/browser/chunk-HBBEHOP3.mjs +0 -106
  293. package/dist/lib/browser/chunk-HBBEHOP3.mjs.map +0 -7
  294. package/dist/lib/browser/chunk-O6XUPW6S.mjs +0 -53
  295. package/dist/lib/browser/chunk-O6XUPW6S.mjs.map +0 -7
  296. package/dist/lib/browser/chunk-ODB2PTBP.mjs +0 -28
  297. package/dist/lib/browser/chunk-ODB2PTBP.mjs.map +0 -7
  298. package/dist/lib/browser/chunk-OY6CGPOO.mjs +0 -16
  299. package/dist/lib/browser/chunk-OY6CGPOO.mjs.map +0 -7
  300. package/dist/lib/browser/chunk-XMT6PMU5.mjs +0 -79
  301. package/dist/lib/browser/chunk-XMT6PMU5.mjs.map +0 -7
  302. package/dist/lib/browser/chunk-Z5PDJNBV.mjs +0 -22
  303. package/dist/lib/browser/chunk-Z5PDJNBV.mjs.map +0 -7
  304. package/dist/lib/browser/index.mjs +0 -174
  305. package/dist/lib/browser/index.mjs.map +0 -7
  306. package/dist/lib/browser/intent-resolver-XHVCZZHU.mjs +0 -62
  307. package/dist/lib/browser/intent-resolver-XHVCZZHU.mjs.map +0 -7
  308. package/dist/lib/browser/meta.json +0 -1
  309. package/dist/lib/browser/react-surface-3A2GO3BN.mjs +0 -215
  310. package/dist/lib/browser/react-surface-3A2GO3BN.mjs.map +0 -7
  311. package/dist/lib/browser/settings-XY265Y2Q.mjs +0 -28
  312. package/dist/lib/browser/settings-XY265Y2Q.mjs.map +0 -7
  313. package/dist/lib/browser/state-6QODXCSZ.mjs +0 -37
  314. package/dist/lib/browser/state-6QODXCSZ.mjs.map +0 -7
  315. package/dist/lib/browser/toolkit-YA65QX2S.mjs +0 -76
  316. package/dist/lib/browser/toolkit-YA65QX2S.mjs.map +0 -7
  317. package/dist/lib/browser/types/index.mjs +0 -10
  318. package/dist/lib/node-esm/MarkdownCard-B2IWTFOC.mjs +0 -84
  319. package/dist/lib/node-esm/MarkdownCard-B2IWTFOC.mjs.map +0 -7
  320. package/dist/lib/node-esm/MarkdownContainer-J2R3DLCQ.mjs +0 -752
  321. package/dist/lib/node-esm/MarkdownContainer-J2R3DLCQ.mjs.map +0 -7
  322. package/dist/lib/node-esm/anchor-sort-FCRYL2FX.mjs +0 -33
  323. package/dist/lib/node-esm/anchor-sort-FCRYL2FX.mjs.map +0 -7
  324. package/dist/lib/node-esm/app-graph-serializer-FAUQM3BH.mjs +0 -52
  325. package/dist/lib/node-esm/app-graph-serializer-FAUQM3BH.mjs.map +0 -7
  326. package/dist/lib/node-esm/blueprint-definition-XYFKMIDR.mjs +0 -12
  327. package/dist/lib/node-esm/chunk-7RDNIMTF.mjs +0 -24
  328. package/dist/lib/node-esm/chunk-7RDNIMTF.mjs.map +0 -7
  329. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs +0 -17
  330. package/dist/lib/node-esm/chunk-CB2R4YIY.mjs.map +0 -7
  331. package/dist/lib/node-esm/chunk-FVI7LPC3.mjs +0 -107
  332. package/dist/lib/node-esm/chunk-FVI7LPC3.mjs.map +0 -7
  333. package/dist/lib/node-esm/chunk-FWZKC6X5.mjs +0 -80
  334. package/dist/lib/node-esm/chunk-FWZKC6X5.mjs.map +0 -7
  335. package/dist/lib/node-esm/chunk-VCG2U522.mjs +0 -29
  336. package/dist/lib/node-esm/chunk-VCG2U522.mjs.map +0 -7
  337. package/dist/lib/node-esm/chunk-XO3IEQJE.mjs +0 -54
  338. package/dist/lib/node-esm/chunk-XO3IEQJE.mjs.map +0 -7
  339. package/dist/lib/node-esm/chunk-ZBXV4ON7.mjs +0 -52
  340. package/dist/lib/node-esm/chunk-ZBXV4ON7.mjs.map +0 -7
  341. package/dist/lib/node-esm/index.mjs +0 -175
  342. package/dist/lib/node-esm/index.mjs.map +0 -7
  343. package/dist/lib/node-esm/intent-resolver-7A2EXGZQ.mjs +0 -63
  344. package/dist/lib/node-esm/intent-resolver-7A2EXGZQ.mjs.map +0 -7
  345. package/dist/lib/node-esm/meta.json +0 -1
  346. package/dist/lib/node-esm/react-surface-RCLL5WVQ.mjs +0 -216
  347. package/dist/lib/node-esm/react-surface-RCLL5WVQ.mjs.map +0 -7
  348. package/dist/lib/node-esm/settings-H3UDD3KO.mjs +0 -29
  349. package/dist/lib/node-esm/settings-H3UDD3KO.mjs.map +0 -7
  350. package/dist/lib/node-esm/state-W3PECOJX.mjs +0 -38
  351. package/dist/lib/node-esm/state-W3PECOJX.mjs.map +0 -7
  352. package/dist/lib/node-esm/toolkit-HSIKUGNK.mjs +0 -77
  353. package/dist/lib/node-esm/toolkit-HSIKUGNK.mjs.map +0 -7
  354. package/dist/lib/node-esm/types/index.mjs +0 -11
  355. package/dist/types/src/capabilities/capabilities.d.ts +0 -12
  356. package/dist/types/src/capabilities/capabilities.d.ts.map +0 -1
  357. package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
  358. package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
  359. package/dist/types/src/capabilities/toolkit.d.ts +0 -4
  360. package/dist/types/src/capabilities/toolkit.d.ts.map +0 -1
  361. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts +0 -7
  362. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +0 -1
  363. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +0 -9
  364. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +0 -1
  365. package/dist/types/src/components/MarkdownCard/index.d.ts +0 -4
  366. package/dist/types/src/components/MarkdownCard/index.d.ts.map +0 -1
  367. package/dist/types/src/components/MarkdownContainer.d.ts +0 -18
  368. package/dist/types/src/components/MarkdownContainer.d.ts.map +0 -1
  369. package/dist/types/src/components/MarkdownContainer.stories.d.ts +0 -55
  370. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +0 -1
  371. package/dist/types/src/components/Suggestions.stories.d.ts +0 -11
  372. package/dist/types/src/components/Suggestions.stories.d.ts.map +0 -1
  373. package/dist/types/src/components/Toolbar.stories.d.ts +0 -48
  374. package/dist/types/src/components/Toolbar.stories.d.ts.map +0 -1
  375. package/dist/types/src/events.d.ts +0 -4
  376. package/dist/types/src/events.d.ts.map +0 -1
  377. package/dist/types/src/extensions.d.ts +0 -22
  378. package/dist/types/src/extensions.d.ts.map +0 -1
  379. package/dist/types/src/functions/diff.d.ts +0 -6
  380. package/dist/types/src/functions/diff.d.ts.map +0 -1
  381. package/dist/types/src/functions/index.d.ts +0 -3
  382. package/dist/types/src/functions/index.d.ts.map +0 -1
  383. package/dist/types/src/functions/open.d.ts +0 -7
  384. package/dist/types/src/functions/open.d.ts.map +0 -1
  385. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +0 -6
  386. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +0 -1
  387. package/dist/types/src/types/MarkdownAction.d.ts +0 -34
  388. package/dist/types/src/types/MarkdownAction.d.ts.map +0 -1
  389. package/src/capabilities/capabilities.ts +0 -21
  390. package/src/capabilities/intent-resolver.ts +0 -58
  391. package/src/capabilities/toolkit.ts +0 -49
  392. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +0 -76
  393. package/src/components/MarkdownCard/MarkdownCard.tsx +0 -76
  394. package/src/components/MarkdownCard/index.ts +0 -9
  395. package/src/components/MarkdownContainer.stories.tsx +0 -109
  396. package/src/components/MarkdownContainer.tsx +0 -257
  397. package/src/components/Suggestions.stories.tsx +0 -219
  398. package/src/components/Toolbar.stories.tsx +0 -118
  399. package/src/events.ts +0 -11
  400. package/src/extensions.tsx +0 -300
  401. package/src/functions/diff.ts +0 -37
  402. package/src/functions/index.ts +0 -6
  403. package/src/functions/open.ts +0 -32
  404. package/src/hooks/useSelectCurrentThread.tsx +0 -56
  405. package/src/types/MarkdownAction.ts +0 -29
  406. /package/dist/lib/{browser/types → neutral/blueprints}/index.mjs.map +0 -0
  407. /package/dist/lib/{browser/blueprint-definition-BHRMFZAC.mjs.map → neutral/chunk-J5LGTIGS.mjs.map} +0 -0
  408. /package/dist/lib/{node-esm/types → neutral}/index.mjs.map +0 -0
  409. /package/dist/lib/{node-esm/blueprint-definition-XYFKMIDR.mjs.map → neutral/meta.mjs.map} +0 -0
@@ -0,0 +1,268 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type ViewUpdate } from '@codemirror/view';
6
+ import { useMemo } from 'react';
7
+
8
+ import { fromUrlPath } from '@dxos/app-toolkit';
9
+ import { debounceAndThrottle } from '@dxos/async';
10
+ import { Obj } from '@dxos/echo';
11
+ import { createDocAccessor } from '@dxos/echo-db';
12
+ import { invariant } from '@dxos/invariant';
13
+ import { getSpace, useObject } from '@dxos/react-client/echo';
14
+ import { useIdentity } from '@dxos/react-client/halo';
15
+ import { useThemeContext } from '@dxos/react-ui';
16
+ import { type SelectionManager } from '@dxos/react-ui-attention';
17
+ import { Text } from '@dxos/schema';
18
+ import { Domino } from '@dxos/ui';
19
+ import {
20
+ Cursor,
21
+ type EditorStateStore,
22
+ EditorView,
23
+ type Extension,
24
+ InputModeExtensions,
25
+ type PreviewOptions,
26
+ createDataExtensions,
27
+ decorateMarkdown,
28
+ documentId,
29
+ folding,
30
+ formattingKeymap,
31
+ linkTooltip,
32
+ listener,
33
+ preview,
34
+ replacer,
35
+ selectionState,
36
+ snippets,
37
+ } from '@dxos/ui-editor';
38
+ import { type EditorViewMode, type RenderCallback } from '@dxos/ui-editor/types';
39
+ import { isTruthy, safeUrl } from '@dxos/util';
40
+
41
+ import { Markdown } from '#types';
42
+
43
+ import { setFallbackName } from '../util';
44
+
45
+ export type DocumentType = Markdown.Document | Text.Text | { id: string; text: string };
46
+
47
+ export type ExtensionsOptions = {
48
+ id: string;
49
+ object?: DocumentType;
50
+ settings?: Markdown.Settings;
51
+ compact?: boolean;
52
+ viewMode?: EditorViewMode;
53
+ editable?: boolean;
54
+ selectionManager?: SelectionManager;
55
+ editorStateStore?: EditorStateStore;
56
+ previewOptions?: PreviewOptions;
57
+ platform?: 'mobile' | 'desktop';
58
+ /** Callback when an internal link is clicked. */
59
+ onSelectObject?: (objectId: string) => void;
60
+ };
61
+
62
+ // TODO(burdon): Merge with createBaseExtensions below.
63
+ export const useExtensions = ({
64
+ id,
65
+ object,
66
+ settings,
67
+ compact,
68
+ viewMode,
69
+ selectionManager,
70
+ editorStateStore,
71
+ previewOptions,
72
+ onSelectObject,
73
+ }: ExtensionsOptions): Extension[] => {
74
+ const { platform } = useThemeContext();
75
+ const identity = useIdentity();
76
+ const space = getSpace(object);
77
+
78
+ // Get the content reference from Document objects.
79
+ const contentRef = Obj.instanceOf(Markdown.Document, object) ? (object as Markdown.Document).content : undefined;
80
+ // Use useObject to trigger re-render when the reference loads (returns snapshot for reactivity).
81
+ useObject(contentRef);
82
+ // Get the actual live object target via .target (needed for createDocAccessor).
83
+ const target = contentRef?.target ?? (Obj.instanceOf(Text.Text, object) ? object : undefined);
84
+
85
+ // TODO(wittjosiah): Autocomplete is not working and this query is causing performance issues.
86
+ // TODO(burdon): Unsubscribe.
87
+ // const query = space?.db.query(Filter.type(DocumentType));
88
+ // query?.subscribe();
89
+
90
+ const baseExtensions = useMemo(
91
+ () =>
92
+ createBaseExtensions({
93
+ id,
94
+ object,
95
+ settings,
96
+ compact,
97
+ viewMode,
98
+ selectionManager,
99
+ previewOptions,
100
+ platform,
101
+ onSelectObject,
102
+ }),
103
+ [
104
+ id,
105
+ object,
106
+ compact,
107
+ viewMode,
108
+ selectionManager,
109
+ previewOptions,
110
+ settings,
111
+ settings?.debug,
112
+ settings?.editorInputMode,
113
+ settings?.folding,
114
+ settings?.numberedHeadings,
115
+ platform,
116
+ onSelectObject,
117
+ ],
118
+ );
119
+
120
+ return useMemo<Extension[]>(
121
+ () =>
122
+ [
123
+ // TODO(burdon): Pass this in?
124
+ // NOTE: Data extensions must be first so that automerge is updated before other extensions compute their state.
125
+ target &&
126
+ createDataExtensions({
127
+ id,
128
+ text: createDocAccessor(target, ['content']),
129
+ messenger: space,
130
+ identity,
131
+ }),
132
+
133
+ // TODO(burdon): Reconcile with effect in parent.
134
+ Obj.instanceOf(Markdown.Document, object) &&
135
+ listener({
136
+ onChange: ({ text }) => {
137
+ setFallbackName(object as Markdown.Document, text);
138
+ },
139
+ }),
140
+
141
+ baseExtensions,
142
+ selectionState(editorStateStore),
143
+ ].filter(isTruthy),
144
+ [identity, space, id, object, target, baseExtensions],
145
+ );
146
+ };
147
+
148
+ /**
149
+ * Create extension instances for editor.
150
+ */
151
+ const createBaseExtensions = ({
152
+ id,
153
+ object,
154
+ onSelectObject,
155
+ settings,
156
+ compact,
157
+ viewMode,
158
+ selectionManager,
159
+ previewOptions,
160
+ platform,
161
+ }: ExtensionsOptions): Extension[] => {
162
+ const extensions: Extension[] = [
163
+ selectionManager && selectionChange(selectionManager),
164
+ settings?.editorInputMode && InputModeExtensions[settings.editorInputMode],
165
+ settings?.folding && !compact && platform !== 'mobile' && folding(),
166
+ ].filter(isTruthy);
167
+
168
+ //
169
+ // Markdown
170
+ //
171
+ if (viewMode !== 'source') {
172
+ extensions.push(
173
+ ...[
174
+ formattingKeymap(),
175
+ decorateMarkdown({
176
+ selectionChangeDelay: 100,
177
+ numberedHeadings: settings?.numberedHeadings ? { from: 2 } : undefined,
178
+ // TODO(wittjosiah): For internal links render the label of the object.
179
+ renderLinkButton: onSelectObject && createRenderLink(onSelectObject),
180
+ }),
181
+ linkTooltip(renderLinkTooltip),
182
+ preview(previewOptions),
183
+ replacer(),
184
+ ],
185
+ );
186
+ }
187
+
188
+ if (settings?.debug) {
189
+ const items = settings.snippets?.split(/[,\n]/) ?? '';
190
+ if (items) {
191
+ extensions.push(snippets({ items }));
192
+ }
193
+ }
194
+
195
+ return extensions;
196
+ };
197
+
198
+ const selectionChange = (selectionManager: SelectionManager) => {
199
+ const debouncedHandler = debounceAndThrottle((update: ViewUpdate) => {
200
+ const id = update.state.facet(documentId);
201
+ const cursorConverter = update.state.facet(Cursor.converter);
202
+ const selection = update.state.selection;
203
+ // NOTE: Filter on numeric offsets BEFORE converting to cursor strings.
204
+ // Cursors are opaque (Automerge-encoded), so a lexicographic `to > from`
205
+ // comparison is nondeterministic — it would let some cursor-placements
206
+ // (where from === to numerically) through and reject genuine selections
207
+ // depending on encoding, which made the comment button's enabled state
208
+ // appear random across different lines.
209
+ const ranges = selection.ranges
210
+ .filter((range) => range.to > range.from)
211
+ .map((range) => ({
212
+ from: cursorConverter.toCursor(range.from),
213
+ to: cursorConverter.toCursor(range.to),
214
+ }));
215
+
216
+ selectionManager.updateMultiRange(id, ranges);
217
+ }, 100);
218
+
219
+ return EditorView.updateListener.of((update: ViewUpdate) => {
220
+ if (update.selectionSet) {
221
+ debouncedHandler(update);
222
+ }
223
+ });
224
+ };
225
+
226
+ const createRenderLink =
227
+ (onSelectObject: (id: string) => void): RenderCallback<{ url: string }> =>
228
+ (el, { url }) => {
229
+ // TODO(burdon): Formalize/document internal link format.
230
+ const isInternal = url.startsWith('/') || url.startsWith(window.location.origin);
231
+ const qualifiedId = isInternal ? fromUrlPath(new URL(url, window.location.origin).pathname) : undefined;
232
+ const icon = Domino.of('span')
233
+ .classNames('dx-link ms-1 inline-block align-[-0.125em]')
234
+ .append(Domino.svg(isInternal ? 'ph--arrow-square-down--regular' : 'ph--arrow-square-out--regular'));
235
+
236
+ if (isInternal) {
237
+ invariant(qualifiedId, 'Invalid link format.');
238
+ icon
239
+ .attributes({ role: 'button', tabindex: '0' })
240
+ .on('click', (event) => {
241
+ event.preventDefault();
242
+ event.stopPropagation();
243
+ onSelectObject(qualifiedId);
244
+ })
245
+ .on('keydown', (event) => {
246
+ const keyboardEvent = event as KeyboardEvent;
247
+ if (keyboardEvent.key !== 'Enter' && keyboardEvent.key !== ' ') {
248
+ return;
249
+ }
250
+
251
+ keyboardEvent.preventDefault();
252
+ keyboardEvent.stopPropagation();
253
+ onSelectObject(qualifiedId);
254
+ });
255
+ }
256
+
257
+ el.appendChild(icon.root);
258
+ };
259
+
260
+ const renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {
261
+ el.appendChild(
262
+ Domino.of('a')
263
+ .attributes({ href: url, target: '_blank', rel: 'noreferrer' })
264
+ .classNames('dx-link flex items-center gap-2')
265
+ .text(safeUrl(url)?.toString() ?? url)
266
+ .append(Domino.svg('ph--arrow-square-out--regular')).root,
267
+ );
268
+ };
@@ -0,0 +1,99 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Option from 'effect/Option';
6
+ import { useCallback, useMemo } from 'react';
7
+
8
+ import { Annotation, type Database, Filter, Obj, Query, Type } from '@dxos/echo';
9
+ import { EntityKind, SystemTypeAnnotation, getTypeAnnotation } from '@dxos/echo/internal';
10
+ import { type Label, toLocalizedString, useTranslation } from '@dxos/react-ui';
11
+ import { type EditorMenuGroup, type EditorMenuItem } from '@dxos/react-ui-editor';
12
+ import { insertAtCursor, insertAtLineStart } from '@dxos/ui-editor';
13
+
14
+ import { Markdown } from '../types';
15
+
16
+ export const useLinkQuery = (db: Database.Database | undefined) => {
17
+ const { t } = useTranslation();
18
+
19
+ const filter = useMemo(
20
+ () =>
21
+ Filter.or(
22
+ ...(db?.schemaRegistry.query({ location: ['database', 'runtime'] }).runSync() ?? [])
23
+ .filter((type) => {
24
+ const schema = Type.getSchema(type);
25
+ return getTypeAnnotation(schema)?.kind !== EntityKind.Relation;
26
+ })
27
+ .filter((type) => {
28
+ const schema = Type.getSchema(type);
29
+ return !SystemTypeAnnotation.get(schema).pipe(Option.getOrElse(() => false));
30
+ })
31
+ .map((schema) => Filter.typename(Type.getTypename(schema))),
32
+ ),
33
+ [db],
34
+ );
35
+
36
+ const handleLinkQuery = useCallback(
37
+ async (query?: string): Promise<EditorMenuGroup[]> => {
38
+ // A second "@" switches the link query into block-embed mode, so "@@foo" searches for "foo".
39
+ const name = query?.startsWith('@') ? query.slice(1).toLowerCase() : (query?.toLowerCase() ?? '');
40
+ const results = await db?.query(Query.select(filter)).run();
41
+
42
+ const getLabel = (object: Obj.Unknown): Label => {
43
+ const type = Obj.getTypename(object)!;
44
+ return Obj.getLabel(object) ?? ['object-name.placeholder', { ns: type, defaultValue: 'New object' }];
45
+ };
46
+
47
+ const items =
48
+ results
49
+ ?.filter((object) => toLocalizedString(getLabel(object), t).toLowerCase().includes(name))
50
+ .map((object: Obj.Unknown): EditorMenuItem => {
51
+ const type = Obj.getType(object);
52
+ const icon = type
53
+ ? Option.getOrUndefined(Annotation.IconAnnotation.get(Type.getSchema(type)))?.icon
54
+ : undefined;
55
+ const label = toLocalizedString(getLabel(object), t);
56
+ return {
57
+ id: object.id,
58
+ label,
59
+ icon,
60
+ onSelect: ({ view, head }) => {
61
+ const link = `[${label}](${Obj.getURI(object)})`;
62
+ // "@@" inserts a block embed on its own line instead of an inline link.
63
+ if (query?.startsWith('@')) {
64
+ insertAtLineStart(view, head, `!${link}\n`);
65
+ } else {
66
+ insertAtCursor(view, head, `${link} `);
67
+ }
68
+ },
69
+ };
70
+ }) ?? [];
71
+
72
+ // Add "Create new document" option at the end.
73
+ const createItem: EditorMenuItem = {
74
+ id: 'create-document',
75
+ label: ['add-object.label', { ns: Type.getTypename(Markdown.Document) }],
76
+ icon: 'ph--plus--regular',
77
+ onSelect: ({ view, head }) => {
78
+ const doc = Markdown.make({ name: name || undefined });
79
+ db?.add(doc);
80
+ const label = name || t('object-name.placeholder', { ns: Type.getTypename(Markdown.Document) });
81
+ const link = `[${label}](${Obj.getURI(doc)})`;
82
+ if (query?.startsWith('@')) {
83
+ insertAtLineStart(view, head, `!${link}\n`);
84
+ } else {
85
+ insertAtCursor(view, head, `${link} `);
86
+ }
87
+ },
88
+ };
89
+
90
+ return [
91
+ { id: 'echo', items },
92
+ { id: 'create', items: [createItem] },
93
+ ];
94
+ },
95
+ [db, filter, t],
96
+ );
97
+
98
+ return handleLinkQuery;
99
+ };
package/src/index.ts CHANGED
@@ -2,11 +2,8 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- export { MarkdownCapabilities } from './capabilities';
6
- export { MarkdownEvents } from './events';
7
-
5
+ export * from './blueprints';
8
6
  export * from './meta';
7
+ export * from './operations';
9
8
  export * from './types';
10
9
  export * from './util';
11
-
12
- export * from './MarkdownPlugin';
package/src/meta.ts CHANGED
@@ -2,18 +2,27 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type PluginMeta } from '@dxos/app-framework';
5
+ import { type Plugin } from '@dxos/app-framework';
6
6
  import { trim } from '@dxos/util';
7
7
 
8
- export const meta: PluginMeta = {
9
- id: 'dxos.org/plugin/markdown',
8
+ export const meta: Plugin.Meta = {
9
+ id: 'org.dxos.plugin.markdown',
10
10
  name: 'Markdown',
11
+ author: 'DXOS',
11
12
  description: trim`
12
- A collaborative and extensible Markdown editor.
13
- In addition to markdown capabilities, the plugin supports collaborative in-line comments.
14
- You can use documents to extend the memory of your personal agents and add context for automated workflows.
13
+ A full-featured markdown editor for authoring documents in your space. Edits flow through a collaborative CodeMirror surface backed by ECHO Text, so every keystroke replicates to other peers in real time without merge conflicts or lost work.
14
+
15
+ Documents can be opened in source, preview, or read-only mode and rendered as a full-surface article or as embeddable cards. An optional formatting toolbar exposes headings, lists, links, and other common markdown actions, and dispositional toolbar actions contributed by other plugins are surfaced inline alongside it.
16
+
17
+ The editor integrates with the rest of the workspace through @ references that link to any ECHO object, image and file uploads stored in the active space, and anchored comment threads on text ranges. Comments can optionally be routed to an AI agent on every message or only on @mention.
18
+
19
+ A built-in blueprint exposes create, open, and update operations as tools for AI agents. Updates are applied as compact find-and-replace diffs against the document, making it safe for agents to edit large documents incrementally while you continue collaborating.
15
20
  `,
16
21
  icon: 'ph--text-aa--regular',
22
+ iconHue: 'indigo',
17
23
  source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-markdown',
18
- screenshots: ['https://dxos.network/plugin-details-markdown-dark.png'],
24
+ screenshots: [
25
+ 'https://customer-5rxcjpyab08avpmn.cloudflarestream.com/cdf2656365bb1fd327c1fc2105d75e5a/iframe?poster=https%3A%2F%2Fcustomer-5rxcjpyab08avpmn.cloudflarestream.com%2Fcdf2656365bb1fd327c1fc2105d75e5a%2Fthumbnails%2Fthumbnail.jpg%3Ftime%3D%26height%3D600',
26
+ 'https://dxos.network/plugin-details-markdown-dark.png',
27
+ ],
19
28
  };
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Effect from 'effect/Effect';
6
+
7
+ import { Operation } from '@dxos/compute';
8
+
9
+ import { Markdown, MarkdownOperation } from '../types';
10
+
11
+ const handler: Operation.WithHandler<typeof MarkdownOperation.CreateMarkdown> = MarkdownOperation.CreateMarkdown.pipe(
12
+ Operation.withHandler(({ name, content }) =>
13
+ Effect.succeed({
14
+ object: Markdown.make({ name, content }),
15
+ }),
16
+ ),
17
+ );
18
+
19
+ export default handler;
@@ -0,0 +1 @@
1
+ {"conversations":[{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"create","description":"Creates a new markdown document and adds it to the space.","inputSchema":{"type":"object","required":["name","content"],"properties":{"name":{"type":"string"},"content":{"type":"string"}},"additionalProperties":false}},{"name":"open","description":"Opens and reads the contents of a new markdown document.","inputSchema":{"type":"object","required":["doc"],"properties":{"doc":{"type":"string","description":"The ID of the referenced object. Formats accepted:\n- DXN (dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4). DXNs can be prepended with an @ symbol for compatibility with in-text references.\n- space ID, object ID tuple (spaceID:objectID)\n- Only object ID that is assumed to be in the current space (01KG7R1ZXWFMWQ4DA1Q6TN1DG4)","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]}},"additionalProperties":false}},{"name":"update","description":"Applies a set of edits to the markdown document.","inputSchema":{"type":"object","required":["doc","edits"],"properties":{"doc":{"type":"string","description":"The ID of the referenced object. Formats accepted:\n- DXN (dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4). DXNs can be prepended with an @ symbol for compatibility with in-text references.\n- space ID, object ID tuple (spaceID:objectID)\n- Only object ID that is assumed to be in the current space (01KG7R1ZXWFMWQ4DA1Q6TN1DG4)","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]},"edits":{"type":"array","items":{"type":"object","required":["oldString","newString"],"properties":{"oldString":{"type":"string","description":"The text to find in the document."},"newString":{"type":"string","description":"The text to replace it with."},"replaceAll":{"type":"boolean","description":"If true, replaces all occurrences. Defaults to false (first occurrence only)."}},"additionalProperties":false},"description":"The edits to apply to the document. Each edit finds oldString and replaces it with newString."}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n You can create, read and update markdown documents.\n When asked to edit or update documents return updates as a set of compact diff string pairs.\n For each diff, respond with the smallest possible matching span.\n \n Example:\n ```diff\n - \"There is a tyop in this sentence.\"\n + \"There is a typo in this sentence.\"\n - \"This id good.\"\n + \"This sentence is really good.\"\n ```\n</blueprint>","options":{}},{"role":"user","content":"Create a document with a cookie recipe.","options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01SwsM5u63Ajko1H7sQGEtvk","modelId":"claude-opus-4-6","timestamp":"2026-05-24T07:14:01.671Z","metadata":{}},{"type":"reasoning-start","id":"0","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"The","metadata":{}},{"type":"reasoning-delta","id":"0","delta":" user wants me to create a document with a cookie recipe. Let me create a nice markdown document with a classic cookie recipe.","metadata":{}},{"type":"reasoning-delta","id":"0","delta":"","metadata":{"anthropic":{"type":"thinking","signature":"EscCCmMIDhgCKkAy43GfB0+dbRMkfoVt2xpO0Chn5/g7c7dPprx3PV9+Z7iiBGhoRS54CpYtz+0wxdGKZKXYjkv0fAS94B7ulrYlMg9jbGF1ZGUtb3B1cy00LTY4AEIIdGhpbmtpbmcSDAzKfjXuIqJ/tjbcGxoMppMi30y7uPBXQM8YIjC2oHk8HCJFrRgEGSfCgLKm/FU81Jrb7qULBRdgfMNWgzlxPwUo8gAMZIOFu6r8GsQqkQHhhiPA6E22Rdd0GNHGVTVB9F/ld1Nb6rjJApg0EKt2uiHzONhxwSoCd1/nfuUZ+DCFnc39C2TWy7+z0FodglbWoRkPkO8LOFJueLIBXTrO4WMxrzDnyZQMMJOnAkzJk9qFTYgy2F5c8x7TbrhDwl8EUlV1/PBvlAoIXRyH8VnXmy888wrnJzyPW2pj0Tvls7K8GAE="}}},{"type":"reasoning-end","id":"0","metadata":{}},{"type":"tool-params-start","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","name":"create","providerExecuted":false,"metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"{\"n","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ame\": \"Cl","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"assi","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"c Chocolate ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"Chip C","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ookies\"","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":", ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"\"content\":","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" \"# Clas","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"si","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"c Cho","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"co","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"late","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" Chip Coo","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"kies\\n","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"\\nA timeles","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"s re","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"cipe f","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"or s","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"of","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"t, c","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"hewy cho","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"colate c","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"hip coo","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"kies th","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"at are g","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"olden o","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n the edg","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"es and ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"gooey in ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"the center.","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"\\n\\n## Ingre","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"dients\\n\\n- ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"2 ¼ cups ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"all-pu","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"rpose f","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"lour\\n","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"- 1 tsp b","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"aking sod","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"a\\n- 1 tsp s","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"al","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"t\\n- 1","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" cup ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"(2 stick","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"s) unsalted ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"butte","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"r, s","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"oft","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ened\\n-","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" ¾ cup ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"gr","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"anulated ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"sugar\\n","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"- ¾ ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"cup packed","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" brown","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" sugar\\n-","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" 2 large e","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ggs","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"\\n","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"- 2 ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"tsp","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" vanilla ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"extract\\n- ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"2 cups sem","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"i-sweet choc","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"olate ch","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ips\\n\\","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n## Instr","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"uctions\\n\\n1","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":". ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"**Prehea","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"t** you","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"r oven to 37","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"5°","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"F (190","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"°C). Line b","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"aking shee","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ts with","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" parchment p","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"aper.\\","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n2. **Combin","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e dry ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ingred","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ie","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"nts:*","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"* In a me","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"dium","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" bowl, whis","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"k to","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"gether the ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"flour, bakin","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"g soda, a","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"nd s","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"alt. Set","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" asid","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e.\\n3. **Cr","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"eam ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"th","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e butter","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" a","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"nd suga","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"rs:","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"**","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" In a larg","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e bo","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"wl, beat t","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"he so","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ftened bu","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"tter, granu","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"lated sugar,","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" and b","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"row","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n sugar","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" together un","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"til light ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"and fluffy, ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"abo","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ut 3–","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"4 ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"minu","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"tes.\\n4. *","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"*Add eggs ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"and vani","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"lla","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":":** Beat i","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n th","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e egg","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"s one a","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"t a time","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":", then mi","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"x in th","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e vanilla ex","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"tra","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ct until com","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"bined.\\n","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"5.","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" **","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"Mix in dry i","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ngredie","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"nts:*","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"* Gradually ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"add th","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e f","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"lour mixtur","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e to the wet","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" ingredi","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ents, mixin","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"g on low ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"speed until","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" just com","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"bined. ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"Do not o","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"vermix.\\","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n6. **Fold i","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n choc","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ola","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"te chips:**","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" Stir","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" in the cho","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"co","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"la","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"te chips","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" with a spat","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ul","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"a or w","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ooden s","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"poon.\\n7. ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"**Scoop ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"the dough","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":":** Dr","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"op round","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ed ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"tabl","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"espoons of ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"dough onto t","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"he prepared ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"baking s","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"heets, spaci","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ng them a","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"bout ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"2 inche","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"s apart.","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"\\n8. **Bak","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e:** Bak","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e for 9–11","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" mi","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"nutes,","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" or until ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"the edge","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"s are ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"go","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"lden b","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ro","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"wn b","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ut ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"the centers ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"still","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" look ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"slightly und","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"erdone","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":".\\n9. **","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"Cool","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":":** Let th","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e co","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"okies ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"cool on t","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"he baki","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ng sh","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"eet for 5 ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"minutes, th","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"en tr","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ansfer to","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" a wir","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"e rack to","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" cool c","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ompletely.","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"\\n\\n## Ti","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ps\\n\\","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n- **C","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"hill the do","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ug","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"h** for","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" at least ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"30 m","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"inutes (or","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" overnight)","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" for","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" thicker, c","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"hewier cook","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ies.\\n- **Do","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n't ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"overbake!*","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"* The c","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ookie","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"s will con","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"tinue to f","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"irm up as ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"they coo","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"l.\\n- **S","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"torage:** K","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"eep in a","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n airtight c","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"ontainer a","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"t room tempe","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"rature fo","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"r up","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":" to 5 day","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"s.\\n\\n---\\","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"n\\n*","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"Makes appro","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"xima","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"tely 4 do","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"zen ","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"cookies. En","metadata":{}},{"type":"tool-params-delta","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","delta":"joy!* 🍪\"}","metadata":{}},{"type":"tool-params-end","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","metadata":{}},{"type":"finish","reason":"tool-calls","usage":{"inputTokens":1564,"outputTokens":650,"totalTokens":2214},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":1564,"output_tokens":9,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"create","description":"Creates a new markdown document and adds it to the space.","inputSchema":{"type":"object","required":["name","content"],"properties":{"name":{"type":"string"},"content":{"type":"string"}},"additionalProperties":false}},{"name":"open","description":"Opens and reads the contents of a new markdown document.","inputSchema":{"type":"object","required":["doc"],"properties":{"doc":{"type":"string","description":"The ID of the referenced object. Formats accepted:\n- DXN (dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4). DXNs can be prepended with an @ symbol for compatibility with in-text references.\n- space ID, object ID tuple (spaceID:objectID)\n- Only object ID that is assumed to be in the current space (01KG7R1ZXWFMWQ4DA1Q6TN1DG4)","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]}},"additionalProperties":false}},{"name":"update","description":"Applies a set of edits to the markdown document.","inputSchema":{"type":"object","required":["doc","edits"],"properties":{"doc":{"type":"string","description":"The ID of the referenced object. Formats accepted:\n- DXN (dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4). DXNs can be prepended with an @ symbol for compatibility with in-text references.\n- space ID, object ID tuple (spaceID:objectID)\n- Only object ID that is assumed to be in the current space (01KG7R1ZXWFMWQ4DA1Q6TN1DG4)","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]},"edits":{"type":"array","items":{"type":"object","required":["oldString","newString"],"properties":{"oldString":{"type":"string","description":"The text to find in the document."},"newString":{"type":"string","description":"The text to replace it with."},"replaceAll":{"type":"boolean","description":"If true, replaces all occurrences. Defaults to false (first occurrence only)."}},"additionalProperties":false},"description":"The edits to apply to the document. Each edit finds oldString and replaces it with newString."}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n You can create, read and update markdown documents.\n When asked to edit or update documents return updates as a set of compact diff string pairs.\n For each diff, respond with the smallest possible matching span.\n \n Example:\n ```diff\n - \"There is a tyop in this sentence.\"\n + \"There is a typo in this sentence.\"\n - \"This id good.\"\n + \"This sentence is really good.\"\n ```\n</blueprint>","options":{}},{"role":"user","content":"Create a document with a cookie recipe.","options":{}},{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to create a document with a cookie recipe. Let me create a nice markdown document with a classic cookie recipe.","options":{}},{"type":"tool-call","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","name":"create","params":{"name":"Classic Chocolate Chip Cookies","content":"# Classic Chocolate Chip Cookies\n\nA timeless recipe for soft, chewy chocolate chip cookies that are golden on the edges and gooey in the center.\n\n## Ingredients\n\n- 2 ¼ cups all-purpose flour\n- 1 tsp baking soda\n- 1 tsp salt\n- 1 cup (2 sticks) unsalted butter, softened\n- ¾ cup granulated sugar\n- ¾ cup packed brown sugar\n- 2 large eggs\n- 2 tsp vanilla extract\n- 2 cups semi-sweet chocolate chips\n\n## Instructions\n\n1. **Preheat** your oven to 375°F (190°C). Line baking sheets with parchment paper.\n2. **Combine dry ingredients:** In a medium bowl, whisk together the flour, baking soda, and salt. Set aside.\n3. **Cream the butter and sugars:** In a large bowl, beat the softened butter, granulated sugar, and brown sugar together until light and fluffy, about 3–4 minutes.\n4. **Add eggs and vanilla:** Beat in the eggs one at a time, then mix in the vanilla extract until combined.\n5. **Mix in dry ingredients:** Gradually add the flour mixture to the wet ingredients, mixing on low speed until just combined. Do not overmix.\n6. **Fold in chocolate chips:** Stir in the chocolate chips with a spatula or wooden spoon.\n7. **Scoop the dough:** Drop rounded tablespoons of dough onto the prepared baking sheets, spacing them about 2 inches apart.\n8. **Bake:** Bake for 9–11 minutes, or until the edges are golden brown but the centers still look slightly underdone.\n9. **Cool:** Let the cookies cool on the baking sheet for 5 minutes, then transfer to a wire rack to cool completely.\n\n## Tips\n\n- **Chill the dough** for at least 30 minutes (or overnight) for thicker, chewier cookies.\n- **Don't overbake!** The cookies will continue to firm up as they cool.\n- **Storage:** Keep in an airtight container at room temperature for up to 5 days.\n\n---\n\n*Makes approximately 4 dozen cookies. Enjoy!* 🍪"},"providerExecuted":false,"options":{}}],"options":{}},{"role":"tool","content":[{"type":"tool-result","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","name":"create","isFailure":false,"result":{"_id":"Exit","_tag":"Success","value":{"id":"dxn:echo:BDJXMULPW5FB55UZ7KP5HLDHVTXUTHE2U:01JGFJJZ00G0WKQSJGMAKCNTHM"}},"providerExecuted":false,"options":{}}],"options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_014BC6TAFsS8YSdwV6kwrZCo","modelId":"claude-opus-4-6","timestamp":"2026-05-24T07:14:11.140Z","metadata":{}},{"type":"text-start","id":"0","metadata":{}},{"type":"text-delta","id":"0","delta":"Your","metadata":{}},{"type":"text-delta","id":"0","delta":" cookie recipe document has been created! 🍪 It includes:\n\n- **Title:** Classic Chocolate Chip Cookies","metadata":{}},{"type":"text-delta","id":"0","delta":"\n- **Ingredients** list with all the essentials (flour, butter, sug","metadata":{}},{"type":"text-delta","id":"0","delta":"ars, eggs, vanilla, and chocolate chips)\n- **Step-by-step instructions** for mixing, scooping, baking, and cooling\n- **Helpful tips** on","metadata":{}},{"type":"text-delta","id":"0","delta":" chilling the dough, avoiding overbaking, and storage\n\nLet me know if you'd like to make any changes","metadata":{}},{"type":"text-delta","id":"0","delta":" — like swapping in a different type of cookie or adjust","metadata":{}},{"type":"text-delta","id":"0","delta":"ing the recipe!","metadata":{}},{"type":"text-end","id":"0","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":2257,"outputTokens":130,"totalTokens":2387},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":2257,"output_tokens":1,"server_tool_use":null,"service_tier":"standard"}}}}]},{"parameters":{"model":"@anthropic/claude-opus-4-6","stream":true,"tools":[{"name":"create","description":"Creates a new markdown document and adds it to the space.","inputSchema":{"type":"object","required":["name","content"],"properties":{"name":{"type":"string"},"content":{"type":"string"}},"additionalProperties":false}},{"name":"open","description":"Opens and reads the contents of a new markdown document.","inputSchema":{"type":"object","required":["doc"],"properties":{"doc":{"type":"string","description":"The ID of the referenced object. Formats accepted:\n- DXN (dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4). DXNs can be prepended with an @ symbol for compatibility with in-text references.\n- space ID, object ID tuple (spaceID:objectID)\n- Only object ID that is assumed to be in the current space (01KG7R1ZXWFMWQ4DA1Q6TN1DG4)","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]}},"additionalProperties":false}},{"name":"update","description":"Applies a set of edits to the markdown document.","inputSchema":{"type":"object","required":["doc","edits"],"properties":{"doc":{"type":"string","description":"The ID of the referenced object. Formats accepted:\n- DXN (dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4). DXNs can be prepended with an @ symbol for compatibility with in-text references.\n- space ID, object ID tuple (spaceID:objectID)\n- Only object ID that is assumed to be in the current space (01KG7R1ZXWFMWQ4DA1Q6TN1DG4)","examples":["dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","@dxn:echo:@:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","BM3FSHFOMJCHCG5QW7JTVKGYABD2GAA7G:01KG7R1ZXWFMWQ4DA1Q6TN1DG4","01KG7R1ZXWFMWQ4DA1Q6TN1DG4"]},"edits":{"type":"array","items":{"type":"object","required":["oldString","newString"],"properties":{"oldString":{"type":"string","description":"The text to find in the document."},"newString":{"type":"string","description":"The text to replace it with."},"replaceAll":{"type":"boolean","description":"If true, replaces all occurrences. Defaults to false (first occurrence only)."}},"additionalProperties":false},"description":"The edits to apply to the document. Each edit finds oldString and replaces it with newString."}},"additionalProperties":false}}]},"prompt":{"content":[{"role":"system","content":"## Blueprints Definitions\n\n<blueprint>\n You can create, read and update markdown documents.\n When asked to edit or update documents return updates as a set of compact diff string pairs.\n For each diff, respond with the smallest possible matching span.\n \n Example:\n ```diff\n - \"There is a tyop in this sentence.\"\n + \"There is a typo in this sentence.\"\n - \"This id good.\"\n + \"This sentence is really good.\"\n ```\n</blueprint>","options":{}},{"role":"user","content":"Create a document with a cookie recipe.","options":{}},{"role":"assistant","content":[{"type":"reasoning","text":"The user wants me to create a document with a cookie recipe. Let me create a nice markdown document with a classic cookie recipe.","options":{}},{"type":"tool-call","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","name":"create","params":{"name":"Classic Chocolate Chip Cookies","content":"# Classic Chocolate Chip Cookies\n\nA timeless recipe for soft, chewy chocolate chip cookies that are golden on the edges and gooey in the center.\n\n## Ingredients\n\n- 2 ¼ cups all-purpose flour\n- 1 tsp baking soda\n- 1 tsp salt\n- 1 cup (2 sticks) unsalted butter, softened\n- ¾ cup granulated sugar\n- ¾ cup packed brown sugar\n- 2 large eggs\n- 2 tsp vanilla extract\n- 2 cups semi-sweet chocolate chips\n\n## Instructions\n\n1. **Preheat** your oven to 375°F (190°C). Line baking sheets with parchment paper.\n2. **Combine dry ingredients:** In a medium bowl, whisk together the flour, baking soda, and salt. Set aside.\n3. **Cream the butter and sugars:** In a large bowl, beat the softened butter, granulated sugar, and brown sugar together until light and fluffy, about 3–4 minutes.\n4. **Add eggs and vanilla:** Beat in the eggs one at a time, then mix in the vanilla extract until combined.\n5. **Mix in dry ingredients:** Gradually add the flour mixture to the wet ingredients, mixing on low speed until just combined. Do not overmix.\n6. **Fold in chocolate chips:** Stir in the chocolate chips with a spatula or wooden spoon.\n7. **Scoop the dough:** Drop rounded tablespoons of dough onto the prepared baking sheets, spacing them about 2 inches apart.\n8. **Bake:** Bake for 9–11 minutes, or until the edges are golden brown but the centers still look slightly underdone.\n9. **Cool:** Let the cookies cool on the baking sheet for 5 minutes, then transfer to a wire rack to cool completely.\n\n## Tips\n\n- **Chill the dough** for at least 30 minutes (or overnight) for thicker, chewier cookies.\n- **Don't overbake!** The cookies will continue to firm up as they cool.\n- **Storage:** Keep in an airtight container at room temperature for up to 5 days.\n\n---\n\n*Makes approximately 4 dozen cookies. Enjoy!* 🍪"},"providerExecuted":false,"options":{}}],"options":{}},{"role":"tool","content":[{"type":"tool-result","id":"toolu_01NiSrZdX8L7iTNgDEnJTxZX","name":"create","isFailure":false,"result":{"_id":"Exit","_tag":"Success","value":{"id":"echo://BDJXMULPW5FB55UZ7KP5HLDHVTXUTHE2U/01JGFJJZ00G0WKQSJGMAKCNTHM"}},"providerExecuted":false,"options":{}}],"options":{"anthropic":{"cacheControl":{"ttl":"5m","type":"ephemeral"}}}}]},"response":[{"type":"response-metadata","id":"msg_01CXkwXJWRjaoRmx7vynoAWr","modelId":"claude-opus-4-6","timestamp":"2026-05-25T16:29:17.110Z","metadata":{}},{"type":"text-start","id":"0","metadata":{}},{"type":"text-delta","id":"0","delta":"Your","metadata":{}},{"type":"text-delta","id":"0","delta":" cookie recipe document has been created! 🍪 It includes:\n\n- **Title","metadata":{}},{"type":"text-delta","id":"0","delta":":** Classic Chocolate Chip Cookies\n- **Ingredients:** A full list including flour, butter, sug","metadata":{}},{"type":"text-delta","id":"0","delta":"ars, eggs, vanilla, and chocolate chips\n- **Step-by-step instructions:** From preheating the oven to cooling the cookies\n- **Helpful","metadata":{}},{"type":"text-delta","id":"0","delta":" tips:** For chilling the dough, avoiding overbaking, and proper storage\n\nThe recipe makes about 4 dozen cookies. Let me know if you'd like to","metadata":{}},{"type":"text-delta","id":"0","delta":" make any changes or additions!","metadata":{}},{"type":"text-end","id":"0","metadata":{}},{"type":"finish","reason":"stop","usage":{"inputTokens":2253,"outputTokens":123,"totalTokens":2376},"metadata":{"anthropic":{"usage":{"cache_creation":{"ephemeral_1h_input_tokens":0,"ephemeral_5m_input_tokens":0},"cache_creation_input_tokens":0,"cache_read_input_tokens":0,"input_tokens":2253,"output_tokens":1,"server_tool_use":null,"service_tier":"standard"}}}}]}]}