@dxos/plugin-markdown 0.8.4-main.28f8d3d → 0.8.4-main.406dc2a

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 (178) hide show
  1. package/dist/lib/browser/{MarkdownCard-IMCR4A4V.mjs → MarkdownCard-AGWOTODZ.mjs} +21 -18
  2. package/dist/lib/browser/MarkdownCard-AGWOTODZ.mjs.map +7 -0
  3. package/dist/lib/browser/{MarkdownContainer-VGJPHMVG.mjs → MarkdownContainer-MV2UNAUV.mjs} +64 -93
  4. package/dist/lib/browser/MarkdownContainer-MV2UNAUV.mjs.map +7 -0
  5. package/dist/lib/browser/{anchor-sort-AJKRIWFD.mjs → anchor-sort-YWJI3BKT.mjs} +5 -5
  6. package/dist/lib/browser/{anchor-sort-AJKRIWFD.mjs.map → anchor-sort-YWJI3BKT.mjs.map} +1 -1
  7. package/dist/lib/browser/{app-graph-serializer-OIS3MZX2.mjs → app-graph-serializer-KYDFCUOW.mjs} +8 -9
  8. package/dist/lib/browser/app-graph-serializer-KYDFCUOW.mjs.map +7 -0
  9. package/dist/lib/browser/blueprint-definition-BHRMFZAC.mjs +11 -0
  10. package/dist/lib/browser/blueprint-definition-BHRMFZAC.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-JMBQG2ZC.mjs → chunk-6KU5DKP7.mjs} +6 -5
  12. package/dist/lib/browser/chunk-6KU5DKP7.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-HBBEHOP3.mjs +106 -0
  14. package/dist/lib/browser/chunk-HBBEHOP3.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-MVL4K3OD.mjs → chunk-O6XUPW6S.mjs} +4 -3
  16. package/dist/lib/browser/chunk-O6XUPW6S.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-IKPZHFTW.mjs → chunk-ODB2PTBP.mjs} +2 -4
  18. package/dist/lib/browser/{chunk-IKPZHFTW.mjs.map → chunk-ODB2PTBP.mjs.map} +3 -3
  19. package/dist/lib/browser/{chunk-LMJPXTPL.mjs → chunk-OY6CGPOO.mjs} +2 -2
  20. package/dist/lib/browser/{chunk-JTIGSUMB.mjs → chunk-XMT6PMU5.mjs} +11 -12
  21. package/dist/lib/browser/chunk-XMT6PMU5.mjs.map +7 -0
  22. package/dist/lib/browser/chunk-Z5PDJNBV.mjs +22 -0
  23. package/dist/lib/browser/chunk-Z5PDJNBV.mjs.map +7 -0
  24. package/dist/lib/browser/index.mjs +31 -16
  25. package/dist/lib/browser/index.mjs.map +3 -3
  26. package/dist/lib/browser/{intent-resolver-BLLHRSTQ.mjs → intent-resolver-XHVCZZHU.mjs} +20 -18
  27. package/dist/lib/browser/intent-resolver-XHVCZZHU.mjs.map +7 -0
  28. package/dist/lib/browser/meta.json +1 -1
  29. package/dist/lib/browser/{react-surface-NL3BZR6H.mjs → react-surface-3A2GO3BN.mjs} +38 -31
  30. package/dist/lib/browser/react-surface-3A2GO3BN.mjs.map +7 -0
  31. package/dist/lib/browser/{settings-Z7ZV7SLC.mjs → settings-XY265Y2Q.mjs} +5 -5
  32. package/dist/lib/browser/{settings-Z7ZV7SLC.mjs.map → settings-XY265Y2Q.mjs.map} +1 -1
  33. package/dist/lib/browser/{state-ORTZIEJU.mjs → state-6QODXCSZ.mjs} +5 -5
  34. package/dist/lib/browser/{state-ORTZIEJU.mjs.map → state-6QODXCSZ.mjs.map} +1 -1
  35. package/dist/lib/browser/toolkit-YA65QX2S.mjs +76 -0
  36. package/dist/lib/browser/toolkit-YA65QX2S.mjs.map +7 -0
  37. package/dist/lib/browser/types/index.mjs +2 -2
  38. package/dist/lib/node-esm/{MarkdownCard-JV2YDV3M.mjs → MarkdownCard-B2IWTFOC.mjs} +21 -18
  39. package/dist/lib/node-esm/MarkdownCard-B2IWTFOC.mjs.map +7 -0
  40. package/dist/lib/node-esm/{MarkdownContainer-BJRNCXJZ.mjs → MarkdownContainer-J2R3DLCQ.mjs} +64 -93
  41. package/dist/lib/node-esm/MarkdownContainer-J2R3DLCQ.mjs.map +7 -0
  42. package/dist/lib/node-esm/{anchor-sort-N7WEA5E3.mjs → anchor-sort-FCRYL2FX.mjs} +5 -5
  43. package/dist/lib/node-esm/{anchor-sort-N7WEA5E3.mjs.map → anchor-sort-FCRYL2FX.mjs.map} +1 -1
  44. package/dist/lib/node-esm/{app-graph-serializer-Q3B44VFB.mjs → app-graph-serializer-FAUQM3BH.mjs} +8 -9
  45. package/dist/lib/node-esm/app-graph-serializer-FAUQM3BH.mjs.map +7 -0
  46. package/dist/lib/node-esm/blueprint-definition-XYFKMIDR.mjs +12 -0
  47. package/dist/lib/node-esm/blueprint-definition-XYFKMIDR.mjs.map +7 -0
  48. package/dist/lib/node-esm/chunk-7RDNIMTF.mjs +24 -0
  49. package/dist/lib/node-esm/chunk-7RDNIMTF.mjs.map +7 -0
  50. package/dist/lib/node-esm/{chunk-AYWAYBAY.mjs → chunk-CB2R4YIY.mjs} +2 -2
  51. package/dist/lib/node-esm/chunk-FVI7LPC3.mjs +107 -0
  52. package/dist/lib/node-esm/chunk-FVI7LPC3.mjs.map +7 -0
  53. package/dist/lib/node-esm/{chunk-KIRZFVX5.mjs → chunk-FWZKC6X5.mjs} +11 -12
  54. package/dist/lib/node-esm/chunk-FWZKC6X5.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-H4I2FGDZ.mjs → chunk-VCG2U522.mjs} +2 -4
  56. package/dist/lib/node-esm/{chunk-H4I2FGDZ.mjs.map → chunk-VCG2U522.mjs.map} +3 -3
  57. package/dist/lib/node-esm/{chunk-Z4XQ6C3D.mjs → chunk-XO3IEQJE.mjs} +4 -3
  58. package/dist/lib/node-esm/chunk-XO3IEQJE.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-JDMMLOB6.mjs → chunk-ZBXV4ON7.mjs} +6 -5
  60. package/dist/lib/node-esm/chunk-ZBXV4ON7.mjs.map +7 -0
  61. package/dist/lib/node-esm/index.mjs +31 -16
  62. package/dist/lib/node-esm/index.mjs.map +3 -3
  63. package/dist/lib/node-esm/{intent-resolver-NHPUPSWK.mjs → intent-resolver-7A2EXGZQ.mjs} +20 -18
  64. package/dist/lib/node-esm/intent-resolver-7A2EXGZQ.mjs.map +7 -0
  65. package/dist/lib/node-esm/meta.json +1 -1
  66. package/dist/lib/node-esm/{react-surface-XJ6ODCBE.mjs → react-surface-RCLL5WVQ.mjs} +38 -31
  67. package/dist/lib/node-esm/react-surface-RCLL5WVQ.mjs.map +7 -0
  68. package/dist/lib/node-esm/{settings-UCXEWBCT.mjs → settings-H3UDD3KO.mjs} +5 -5
  69. package/dist/lib/node-esm/{settings-UCXEWBCT.mjs.map → settings-H3UDD3KO.mjs.map} +1 -1
  70. package/dist/lib/node-esm/{state-47WSZG54.mjs → state-W3PECOJX.mjs} +5 -5
  71. package/dist/lib/node-esm/{state-47WSZG54.mjs.map → state-W3PECOJX.mjs.map} +1 -1
  72. package/dist/lib/node-esm/toolkit-HSIKUGNK.mjs +77 -0
  73. package/dist/lib/node-esm/toolkit-HSIKUGNK.mjs.map +7 -0
  74. package/dist/lib/node-esm/types/index.mjs +2 -2
  75. package/dist/types/src/MarkdownPlugin.d.ts +1 -1
  76. package/dist/types/src/MarkdownPlugin.d.ts.map +1 -1
  77. package/dist/types/src/capabilities/anchor-sort.d.ts +2 -2
  78. package/dist/types/src/capabilities/app-graph-serializer.d.ts +1 -1
  79. package/dist/types/src/capabilities/artifact-definition.d.ts +0 -8
  80. package/dist/types/src/capabilities/artifact-definition.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/blueprint-definition.d.ts +5 -0
  82. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  83. package/dist/types/src/capabilities/index.d.ts +11 -8
  84. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/intent-resolver.d.ts +1 -1
  86. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  87. package/dist/types/src/capabilities/react-surface.d.ts +1 -1
  88. package/dist/types/src/capabilities/settings.d.ts +1 -1
  89. package/dist/types/src/capabilities/state.d.ts +2 -2
  90. package/dist/types/src/capabilities/toolkit.d.ts +4 -0
  91. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  92. package/dist/types/src/components/MarkdownCard/MarkdownCard.d.ts.map +1 -1
  93. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts +5 -38
  94. package/dist/types/src/components/MarkdownCard/MarkdownCard.stories.d.ts.map +1 -1
  95. package/dist/types/src/components/MarkdownContainer.d.ts.map +1 -1
  96. package/dist/types/src/components/MarkdownContainer.stories.d.ts +51 -5
  97. package/dist/types/src/components/MarkdownContainer.stories.d.ts.map +1 -1
  98. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts +5 -5
  99. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.d.ts.map +1 -1
  100. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts +111 -13
  101. package/dist/types/src/components/MarkdownEditor/MarkdownEditor.stories.d.ts.map +1 -1
  102. package/dist/types/src/components/MarkdownSettings/MarkdownSettings.d.ts.map +1 -1
  103. package/dist/types/src/components/Suggestions.stories.d.ts +1 -2
  104. package/dist/types/src/components/Suggestions.stories.d.ts.map +1 -1
  105. package/dist/types/src/components/Toolbar.stories.d.ts +45 -8
  106. package/dist/types/src/components/Toolbar.stories.d.ts.map +1 -1
  107. package/dist/types/src/extensions.d.ts +0 -2
  108. package/dist/types/src/extensions.d.ts.map +1 -1
  109. package/dist/types/src/functions/diff.d.ts +6 -0
  110. package/dist/types/src/functions/diff.d.ts.map +1 -0
  111. package/dist/types/src/functions/index.d.ts +3 -0
  112. package/dist/types/src/functions/index.d.ts.map +1 -0
  113. package/dist/types/src/functions/open.d.ts +7 -0
  114. package/dist/types/src/functions/open.d.ts.map +1 -0
  115. package/dist/types/src/hooks/useSelectCurrentThread.d.ts +1 -1
  116. package/dist/types/src/hooks/useSelectCurrentThread.d.ts.map +1 -1
  117. package/dist/types/src/meta.d.ts +0 -1
  118. package/dist/types/src/meta.d.ts.map +1 -1
  119. package/dist/types/src/translations.d.ts +1 -0
  120. package/dist/types/src/translations.d.ts.map +1 -1
  121. package/dist/types/src/types/Markdown.d.ts +7 -5
  122. package/dist/types/src/types/Markdown.d.ts.map +1 -1
  123. package/dist/types/src/types/MarkdownAction.d.ts +6 -14
  124. package/dist/types/src/types/MarkdownAction.d.ts.map +1 -1
  125. package/dist/types/src/types/types.d.ts.map +1 -1
  126. package/dist/types/src/util.d.ts +1 -1
  127. package/dist/types/src/util.d.ts.map +1 -1
  128. package/dist/types/tsconfig.tsbuildinfo +1 -1
  129. package/package.json +55 -52
  130. package/src/MarkdownPlugin.tsx +100 -86
  131. package/src/capabilities/app-graph-serializer.ts +3 -3
  132. package/src/capabilities/artifact-definition.ts +9 -16
  133. package/src/capabilities/blueprint-definition.ts +39 -0
  134. package/src/capabilities/index.ts +3 -0
  135. package/src/capabilities/intent-resolver.ts +11 -11
  136. package/src/capabilities/toolkit.ts +49 -0
  137. package/src/components/MarkdownCard/MarkdownCard.stories.tsx +8 -11
  138. package/src/components/MarkdownCard/MarkdownCard.tsx +17 -16
  139. package/src/components/MarkdownContainer.stories.tsx +46 -37
  140. package/src/components/MarkdownContainer.tsx +16 -14
  141. package/src/components/MarkdownEditor/MarkdownEditor.stories.tsx +19 -16
  142. package/src/components/MarkdownEditor/MarkdownEditor.tsx +47 -48
  143. package/src/components/MarkdownSettings/MarkdownSettings.tsx +77 -74
  144. package/src/components/Suggestions.stories.tsx +36 -38
  145. package/src/components/Toolbar.stories.tsx +20 -14
  146. package/src/extensions.tsx +4 -32
  147. package/src/functions/diff.ts +37 -0
  148. package/src/functions/index.ts +6 -0
  149. package/src/functions/open.ts +32 -0
  150. package/src/hooks/useSelectCurrentThread.tsx +2 -2
  151. package/src/meta.ts +0 -3
  152. package/src/translations.ts +1 -0
  153. package/src/types/Markdown.ts +6 -3
  154. package/src/types/MarkdownAction.ts +4 -6
  155. package/src/types/types.ts +1 -0
  156. package/src/util.tsx +8 -2
  157. package/dist/lib/browser/MarkdownCard-IMCR4A4V.mjs.map +0 -7
  158. package/dist/lib/browser/MarkdownContainer-VGJPHMVG.mjs.map +0 -7
  159. package/dist/lib/browser/app-graph-serializer-OIS3MZX2.mjs.map +0 -7
  160. package/dist/lib/browser/chunk-JHH7VL52.mjs +0 -18
  161. package/dist/lib/browser/chunk-JHH7VL52.mjs.map +0 -7
  162. package/dist/lib/browser/chunk-JMBQG2ZC.mjs.map +0 -7
  163. package/dist/lib/browser/chunk-JTIGSUMB.mjs.map +0 -7
  164. package/dist/lib/browser/chunk-MVL4K3OD.mjs.map +0 -7
  165. package/dist/lib/browser/intent-resolver-BLLHRSTQ.mjs.map +0 -7
  166. package/dist/lib/browser/react-surface-NL3BZR6H.mjs.map +0 -7
  167. package/dist/lib/node-esm/MarkdownCard-JV2YDV3M.mjs.map +0 -7
  168. package/dist/lib/node-esm/MarkdownContainer-BJRNCXJZ.mjs.map +0 -7
  169. package/dist/lib/node-esm/app-graph-serializer-Q3B44VFB.mjs.map +0 -7
  170. package/dist/lib/node-esm/chunk-H6TITL7A.mjs +0 -20
  171. package/dist/lib/node-esm/chunk-H6TITL7A.mjs.map +0 -7
  172. package/dist/lib/node-esm/chunk-JDMMLOB6.mjs.map +0 -7
  173. package/dist/lib/node-esm/chunk-KIRZFVX5.mjs.map +0 -7
  174. package/dist/lib/node-esm/chunk-Z4XQ6C3D.mjs.map +0 -7
  175. package/dist/lib/node-esm/intent-resolver-NHPUPSWK.mjs.map +0 -7
  176. package/dist/lib/node-esm/react-surface-XJ6ODCBE.mjs.map +0 -7
  177. /package/dist/lib/browser/{chunk-LMJPXTPL.mjs.map → chunk-OY6CGPOO.mjs.map} +0 -0
  178. /package/dist/lib/node-esm/{chunk-AYWAYBAY.mjs.map → chunk-CB2R4YIY.mjs.map} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/plugin-markdown",
3
- "version": "0.8.4-main.28f8d3d",
3
+ "version": "0.8.4-main.406dc2a",
4
4
  "description": "DXOS Surface plugin for interacting with Markdown",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -35,66 +35,69 @@
35
35
  "src"
36
36
  ],
37
37
  "dependencies": {
38
- "@automerge/automerge": "3.1.1",
39
- "@codemirror/search": "^6.5.6",
40
- "@codemirror/view": "^6.34.1",
38
+ "@automerge/automerge": "3.1.2",
39
+ "@codemirror/search": "^6.5.11",
40
+ "@codemirror/view": "^6.38.4",
41
+ "@effect/ai": "0.29.1",
42
+ "@effect/experimental": "0.56.0",
41
43
  "@preact-signals/safe-react": "^0.9.0",
42
- "@preact/signals-core": "^1.9.0",
44
+ "@preact/signals-core": "^1.12.1",
43
45
  "react-dropzone": "^14.2.3",
44
- "@dxos/ai": "0.8.4-main.28f8d3d",
45
- "@dxos/assistant": "0.8.4-main.28f8d3d",
46
- "@dxos/app-framework": "0.8.4-main.28f8d3d",
47
- "@dxos/async": "0.8.4-main.28f8d3d",
48
- "@dxos/blueprints": "0.8.4-main.28f8d3d",
49
- "@dxos/echo": "0.8.4-main.28f8d3d",
50
- "@dxos/echo-schema": "0.8.4-main.28f8d3d",
51
- "@dxos/invariant": "0.8.4-main.28f8d3d",
52
- "@dxos/keys": "0.8.4-main.28f8d3d",
53
- "@dxos/lit-ui": "0.8.4-main.28f8d3d",
54
- "@dxos/live-object": "0.8.4-main.28f8d3d",
55
- "@dxos/local-storage": "0.8.4-main.28f8d3d",
56
- "@dxos/log": "0.8.4-main.28f8d3d",
57
- "@dxos/plugin-attention": "0.8.4-main.28f8d3d",
58
- "@dxos/plugin-client": "0.8.4-main.28f8d3d",
59
- "@dxos/plugin-deck": "0.8.4-main.28f8d3d",
60
- "@dxos/plugin-graph": "0.8.4-main.28f8d3d",
61
- "@dxos/plugin-preview": "0.8.4-main.28f8d3d",
62
- "@dxos/plugin-space": "0.8.4-main.28f8d3d",
63
- "@dxos/plugin-theme": "0.8.4-main.28f8d3d",
64
- "@dxos/react-client": "0.8.4-main.28f8d3d",
65
- "@dxos/react-hooks": "0.8.4-main.28f8d3d",
66
- "@dxos/react-ui-attention": "0.8.4-main.28f8d3d",
67
- "@dxos/react-ui-editor": "0.8.4-main.28f8d3d",
68
- "@dxos/react-ui-form": "0.8.4-main.28f8d3d",
69
- "@dxos/react-ui-stack": "0.8.4-main.28f8d3d",
70
- "@dxos/schema": "0.8.4-main.28f8d3d",
71
- "@dxos/util": "0.8.4-main.28f8d3d"
46
+ "@dxos/ai": "0.8.4-main.406dc2a",
47
+ "@dxos/app-framework": "0.8.4-main.406dc2a",
48
+ "@dxos/assistant": "0.8.4-main.406dc2a",
49
+ "@dxos/echo": "0.8.4-main.406dc2a",
50
+ "@dxos/echo-db": "0.8.4-main.406dc2a",
51
+ "@dxos/blueprints": "0.8.4-main.406dc2a",
52
+ "@dxos/invariant": "0.8.4-main.406dc2a",
53
+ "@dxos/functions": "0.8.4-main.406dc2a",
54
+ "@dxos/lit-ui": "0.8.4-main.406dc2a",
55
+ "@dxos/keys": "0.8.4-main.406dc2a",
56
+ "@dxos/async": "0.8.4-main.406dc2a",
57
+ "@dxos/local-storage": "0.8.4-main.406dc2a",
58
+ "@dxos/live-object": "0.8.4-main.406dc2a",
59
+ "@dxos/plugin-attention": "0.8.4-main.406dc2a",
60
+ "@dxos/log": "0.8.4-main.406dc2a",
61
+ "@dxos/plugin-client": "0.8.4-main.406dc2a",
62
+ "@dxos/plugin-deck": "0.8.4-main.406dc2a",
63
+ "@dxos/plugin-graph": "0.8.4-main.406dc2a",
64
+ "@dxos/plugin-preview": "0.8.4-main.406dc2a",
65
+ "@dxos/plugin-space": "0.8.4-main.406dc2a",
66
+ "@dxos/react-hooks": "0.8.4-main.406dc2a",
67
+ "@dxos/react-ui-editor": "0.8.4-main.406dc2a",
68
+ "@dxos/react-ui-form": "0.8.4-main.406dc2a",
69
+ "@dxos/react-ui-attention": "0.8.4-main.406dc2a",
70
+ "@dxos/react-ui-stack": "0.8.4-main.406dc2a",
71
+ "@dxos/schema": "0.8.4-main.406dc2a",
72
+ "@dxos/react-client": "0.8.4-main.406dc2a",
73
+ "@dxos/util": "0.8.4-main.406dc2a",
74
+ "@dxos/plugin-theme": "0.8.4-main.406dc2a"
72
75
  },
73
76
  "devDependencies": {
74
- "@effect-rx/rx-react": "0.38.0",
75
- "@effect/platform": "0.90.2",
76
- "@types/react": "~18.2.0",
77
- "@types/react-dom": "~18.2.0",
78
- "effect": "3.17.7",
79
- "react": "~18.2.0",
80
- "react-dom": "~18.2.0",
81
- "vite": "5.4.7",
82
- "@dxos/debug": "0.8.4-main.28f8d3d",
83
- "@dxos/plugin-storybook-layout": "0.8.4-main.28f8d3d",
84
- "@dxos/random": "0.8.4-main.28f8d3d",
85
- "@dxos/react-ui": "0.8.4-main.28f8d3d",
86
- "@dxos/react-ui-theme": "0.8.4-main.28f8d3d",
87
- "@dxos/storybook-utils": "0.8.4-main.28f8d3d",
88
- "@dxos/plugin-theme": "0.8.4-main.28f8d3d"
77
+ "@effect-rx/rx-react": "0.42.4",
78
+ "@effect/platform": "0.92.1",
79
+ "@types/react": "~19.2.2",
80
+ "@types/react-dom": "~19.2.1",
81
+ "effect": "3.18.3",
82
+ "react": "~19.2.0",
83
+ "react-dom": "~19.2.0",
84
+ "vite": "7.1.9",
85
+ "@dxos/debug": "0.8.4-main.406dc2a",
86
+ "@dxos/plugin-storybook-layout": "0.8.4-main.406dc2a",
87
+ "@dxos/plugin-theme": "0.8.4-main.406dc2a",
88
+ "@dxos/random": "0.8.4-main.406dc2a",
89
+ "@dxos/react-ui": "0.8.4-main.406dc2a",
90
+ "@dxos/react-ui-theme": "0.8.4-main.406dc2a",
91
+ "@dxos/storybook-utils": "0.8.4-main.406dc2a"
89
92
  },
90
93
  "peerDependencies": {
91
94
  "@effect-rx/rx-react": "^0.34.1",
92
95
  "@effect/platform": "^0.80.12",
93
96
  "effect": "^3.13.3",
94
- "react": "~18.2.0",
95
- "react-dom": "~18.2.0",
96
- "@dxos/react-ui": "0.8.4-main.28f8d3d",
97
- "@dxos/react-ui-theme": "0.8.4-main.28f8d3d"
97
+ "react": "^19.0.0",
98
+ "react-dom": "^19.0.0",
99
+ "@dxos/react-ui": "0.8.4-main.406dc2a",
100
+ "@dxos/react-ui-theme": "0.8.4-main.406dc2a"
98
101
  },
99
102
  "publishConfig": {
100
103
  "access": "public"
@@ -14,10 +14,13 @@ import { DataType } from '@dxos/schema';
14
14
  import {
15
15
  AnchorSort,
16
16
  AppGraphSerializer,
17
+ BLUEPRINT_KEY,
18
+ BlueprintDefinition,
17
19
  IntentResolver,
18
20
  MarkdownSettings,
19
21
  MarkdownState,
20
22
  ReactSurface,
23
+ Toolkit,
21
24
  } from './capabilities';
22
25
  import { MarkdownEvents } from './events';
23
26
  import { meta } from './meta';
@@ -25,91 +28,102 @@ import { translations } from './translations';
25
28
  import { Markdown, MarkdownAction } from './types';
26
29
  import { serializer } from './util';
27
30
 
28
- export const MarkdownPlugin = () =>
29
- definePlugin(meta, [
30
- defineModule({
31
- id: `${meta.id}/module/translations`,
32
- activatesOn: Events.SetupTranslations,
33
- activate: () => contributes(Capabilities.Translations, [...translations, ...editorTranslations]),
34
- }),
35
- defineModule({
36
- id: `${meta.id}/module/settings`,
37
- activatesOn: Events.SetupSettings,
38
- activate: MarkdownSettings,
39
- }),
40
- defineModule({
41
- id: `${meta.id}/module/state`,
42
- // TODO(wittjosiah): Does not integrate with settings store.
43
- // Should this be a different event?
44
- // Should settings store be renamed to be more generic?
45
- activatesOn: Events.SetupSettings,
46
- activate: MarkdownState,
47
- }),
48
- defineModule({
49
- id: `${meta.id}/module/metadata`,
50
- activatesOn: Events.SetupMetadata,
51
- activate: () =>
52
- contributes(Capabilities.Metadata, {
53
- id: Markdown.Document.typename,
54
- metadata: {
55
- label: (object: Markdown.Document) => object.name || object.fallbackName,
56
- icon: 'ph--text-aa--regular',
57
- graphProps: {
58
- managesAutofocus: true,
59
- },
60
- // TODO(wittjosiah): Move out of metadata.
61
- loadReferences: async (doc: Markdown.Document) => await Ref.Array.loadAll<Obj.Any>([doc.content]),
62
- serializer,
63
- // TODO(wittjosiah): Consider how to do generic comments without these.
64
- comments: 'anchored',
65
- selectionMode: 'multi-range',
66
- getAnchorLabel: (doc: Markdown.Document, anchor: string): string | undefined => {
67
- if (doc.content) {
68
- const [start, end] = anchor.split(':');
69
- return getTextInRange(createDocAccessor(doc.content.target!, ['content']), start, end);
70
- }
71
- },
31
+ export const MarkdownPlugin = definePlugin(meta, () => [
32
+ defineModule({
33
+ id: `${meta.id}/module/translations`,
34
+ activatesOn: Events.SetupTranslations,
35
+ activate: () => contributes(Capabilities.Translations, [...translations, ...editorTranslations]),
36
+ }),
37
+ defineModule({
38
+ id: `${meta.id}/module/settings`,
39
+ activatesOn: Events.SetupSettings,
40
+ activate: MarkdownSettings,
41
+ }),
42
+ defineModule({
43
+ id: `${meta.id}/module/state`,
44
+ // TODO(wittjosiah): Does not integrate with settings store.
45
+ // Should this be a different event?
46
+ // Should settings store be renamed to be more generic?
47
+ activatesOn: Events.SetupSettings,
48
+ activate: MarkdownState,
49
+ }),
50
+ defineModule({
51
+ id: `${meta.id}/module/metadata`,
52
+ activatesOn: Events.SetupMetadata,
53
+ activate: () =>
54
+ contributes(Capabilities.Metadata, {
55
+ id: Markdown.Document.typename,
56
+ metadata: {
57
+ label: (object: Markdown.Document) => object.name || object.fallbackName,
58
+ icon: 'ph--text-aa--regular',
59
+ blueprints: [BLUEPRINT_KEY],
60
+ graphProps: {
61
+ managesAutofocus: true,
72
62
  },
63
+ // TODO(wittjosiah): Move out of metadata.
64
+ loadReferences: async (doc: Markdown.Document) => await Ref.Array.loadAll<Obj.Any>([doc.content]),
65
+ serializer,
66
+ // TODO(wittjosiah): Consider how to do generic comments without these.
67
+ comments: 'anchored',
68
+ selectionMode: 'multi-range',
69
+ getAnchorLabel: (doc: Markdown.Document, anchor: string): string | undefined => {
70
+ if (doc.content) {
71
+ const [start, end] = anchor.split(':');
72
+ return getTextInRange(createDocAccessor(doc.content.target!, ['content']), start, end);
73
+ }
74
+ },
75
+ },
76
+ }),
77
+ }),
78
+ defineModule({
79
+ id: `${meta.id}/module/object-form`,
80
+ activatesOn: ClientEvents.SetupSchema,
81
+ activate: () =>
82
+ contributes(
83
+ SpaceCapabilities.ObjectForm,
84
+ defineObjectForm({
85
+ objectSchema: Markdown.Document,
86
+ getIntent: () => createIntent(MarkdownAction.Create, {}),
73
87
  }),
74
- }),
75
- defineModule({
76
- id: `${meta.id}/module/object-form`,
77
- activatesOn: ClientEvents.SetupSchema,
78
- activate: () =>
79
- contributes(
80
- SpaceCapabilities.ObjectForm,
81
- defineObjectForm({
82
- objectSchema: Markdown.Document,
83
- getIntent: (_, { space }) => createIntent(MarkdownAction.Create, { spaceId: space.id }),
84
- }),
85
- ),
86
- }),
87
- defineModule({
88
- id: `${meta.id}/module/schema`,
89
- activatesOn: ClientEvents.SetupSchema,
90
- activate: () => contributes(ClientCapabilities.Schema, [DataType.Text]),
91
- }),
92
- defineModule({
93
- id: `${meta.id}/module/react-surface`,
94
- activatesOn: Events.SetupReactSurface,
95
- // TODO(wittjosiah): Should occur before the editor is loaded when surfaces activation is more granular.
96
- activatesBefore: [MarkdownEvents.SetupExtensions],
97
- activate: ReactSurface,
98
- }),
99
- defineModule({
100
- id: `${meta.id}/module/intent-resolver`,
101
- activatesOn: Events.SetupIntentResolver,
102
- activate: IntentResolver,
103
- }),
104
- defineModule({
105
- id: `${meta.id}/module/app-graph-serializer`,
106
- activatesOn: Events.AppGraphReady,
107
- activate: AppGraphSerializer,
108
- }),
109
- defineModule({
110
- id: `${meta.id}/module/anchor-sort`,
111
- // TODO(wittjosiah): More relevant event?
112
- activatesOn: Events.AppGraphReady,
113
- activate: AnchorSort,
114
- }),
115
- ]);
88
+ ),
89
+ }),
90
+ defineModule({
91
+ id: `${meta.id}/module/schema`,
92
+ activatesOn: ClientEvents.SetupSchema,
93
+ activate: () => contributes(ClientCapabilities.Schema, [DataType.Text]),
94
+ }),
95
+ defineModule({
96
+ id: `${meta.id}/module/react-surface`,
97
+ activatesOn: Events.SetupReactSurface,
98
+ // TODO(wittjosiah): Should occur before the editor is loaded when surfaces activation is more granular.
99
+ activatesBefore: [MarkdownEvents.SetupExtensions],
100
+ activate: ReactSurface,
101
+ }),
102
+ defineModule({
103
+ id: `${meta.id}/module/intent-resolver`,
104
+ activatesOn: Events.SetupIntentResolver,
105
+ activate: IntentResolver,
106
+ }),
107
+ defineModule({
108
+ id: `${meta.id}/module/app-graph-serializer`,
109
+ activatesOn: Events.AppGraphReady,
110
+ activate: AppGraphSerializer,
111
+ }),
112
+ defineModule({
113
+ id: `${meta.id}/module/anchor-sort`,
114
+ // TODO(wittjosiah): More relevant event?
115
+ activatesOn: Events.AppGraphReady,
116
+ activate: AnchorSort,
117
+ }),
118
+ defineModule({
119
+ id: `${meta.id}/module/blueprint`,
120
+ activatesOn: Events.SetupArtifactDefinition,
121
+ activate: BlueprintDefinition,
122
+ }),
123
+ defineModule({
124
+ id: `${meta.id}/module/toolkit`,
125
+ // TODO(wittjosiah): Use a different event.
126
+ activatesOn: Events.Startup,
127
+ activate: Toolkit,
128
+ }),
129
+ ]);
@@ -2,7 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { pipe } from 'effect';
5
+ import * as Function from 'effect/Function';
6
6
 
7
7
  import { Capabilities, type PluginContext, chain, contributes, createIntent } from '@dxos/app-framework';
8
8
  import { Obj } from '@dxos/echo';
@@ -42,8 +42,8 @@ export default (context: PluginContext) =>
42
42
 
43
43
  const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
44
44
  const result = await dispatch(
45
- pipe(
46
- createIntent(MarkdownAction.Create, { spaceId: space.id, name: data.name, content: data.data }),
45
+ Function.pipe(
46
+ createIntent(MarkdownAction.Create, { name: data.name, content: data.data }),
47
47
  chain(SpaceAction.AddObject, { target }),
48
48
  ),
49
49
  );
@@ -5,36 +5,29 @@
5
5
  // ISSUE(burdon): defineArtifact
6
6
  // @ts-nocheck
7
7
 
8
- import { Schema, pipe } from 'effect';
8
+ import * as Function from 'effect/Function';
9
+ import * as Schema from 'effect/Schema';
9
10
 
10
11
  import { ToolResult, createTool } from '@dxos/ai';
11
- import { Capabilities, type PromiseIntentDispatcher, chain, contributes, createIntent } from '@dxos/app-framework';
12
+ import { Capabilities, chain, contributes, createIntent } from '@dxos/app-framework';
12
13
  import { ArtifactId, createArtifactElement } from '@dxos/assistant';
13
14
  import { defineArtifact } from '@dxos/blueprints';
14
15
  import { Obj } from '@dxos/echo';
15
16
  import { assertArgument, invariant } from '@dxos/invariant';
16
17
  import { SpaceAction } from '@dxos/plugin-space/types';
17
- import { Filter, type Space, fullyQualifiedId } from '@dxos/react-client/echo';
18
+ import { Filter, fullyQualifiedId } from '@dxos/react-client/echo';
18
19
 
19
20
  import { meta } from '../meta';
20
21
  import { Markdown, MarkdownAction } from '../types';
21
22
 
22
- // TODO(burdon): Factor out.
23
- declare global {
24
- interface ToolContextExtensions {
25
- space?: Space;
26
- dispatch?: PromiseIntentDispatcher;
27
- }
28
- }
29
-
30
23
  export default () => {
31
24
  const definition = defineArtifact({
32
25
  id: `artifact:${meta.id}`, // TODO(burdon): meta.id/artifact?
33
26
  name: meta.name,
34
27
  instructions: `
35
- - The markdown plugin allows you to work with text documents in the current space.
36
- - Use these tools to interact with documents, including listing available documents and retrieving their content.
37
- - Documents are stored in Markdown format.
28
+ The markdown plugin allows you to work with text documents in the current space.
29
+ Use these tools to interact with documents, including listing available documents and retrieving their content.
30
+ Documents are stored in Markdown format.
38
31
  `,
39
32
  schema: Markdown.Document,
40
33
  tools: [
@@ -54,7 +47,7 @@ export default () => {
54
47
  invariant(extensions?.space, 'No space');
55
48
  invariant(extensions?.dispatch, 'No intent dispatcher');
56
49
 
57
- const intent = pipe(
50
+ const intent = Function.pipe(
58
51
  createIntent(MarkdownAction.Create, {
59
52
  spaceId: extensions.space.id,
60
53
  name,
@@ -102,7 +95,7 @@ export default () => {
102
95
  execute: async ({ id }, { extensions }) => {
103
96
  invariant(extensions?.space, 'No space');
104
97
  const document = await extensions.space.db.query(Filter.ids(ArtifactId.toDXN(id).toString())).first();
105
- assertArgument(Obj.instanceOf(Markdown.Document, document), 'Invalid type');
98
+ assertArgument(Obj.instanceOf(Markdown.Document, document), 'document', 'Invalid type');
106
99
 
107
100
  const { content } = await document.content?.load();
108
101
  return ToolResult.Success({
@@ -0,0 +1,39 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Capabilities, type Capability, contributes } from '@dxos/app-framework';
6
+ import { Blueprint, Template } from '@dxos/blueprints';
7
+ import { type FunctionDefinition } from '@dxos/functions';
8
+ import { trim } from '@dxos/util';
9
+
10
+ import { diff, open } from '../functions';
11
+
12
+ const functions: FunctionDefinition[] = [diff, open];
13
+ const tools = ['add-proposals', 'create-document'];
14
+
15
+ export const BLUEPRINT_KEY = 'dxos.org/blueprint/markdown';
16
+
17
+ export default (): Capability<any>[] => [
18
+ contributes(Capabilities.Functions, functions),
19
+ contributes(
20
+ Capabilities.BlueprintDefinition,
21
+ Blueprint.make({
22
+ key: BLUEPRINT_KEY,
23
+ name: 'Markdown',
24
+ tools: Blueprint.toolDefinitions({ functions, tools }),
25
+ instructions: Template.make({
26
+ source: trim`
27
+ You can create and update markdown documents.
28
+ When asked to edit or update documents return updates as a set of compact diff string pairs.
29
+ For each diff, respond with the smallest possible matching span.
30
+ For example:
31
+ - "There is a tyop in this sentence."
32
+ + "There is a typo in this sentence."
33
+ - "This id goof."
34
+ + "This is good."
35
+ `,
36
+ }),
37
+ }),
38
+ ),
39
+ ];
@@ -6,9 +6,12 @@ import { lazy } from '@dxos/app-framework';
6
6
 
7
7
  export const AnchorSort = lazy(() => import('./anchor-sort'));
8
8
  export const AppGraphSerializer = lazy(() => import('./app-graph-serializer'));
9
+ export const BlueprintDefinition = lazy(() => import('./blueprint-definition'));
9
10
  export const IntentResolver = lazy(() => import('./intent-resolver'));
10
11
  export const ReactSurface = lazy(() => import('./react-surface'));
11
12
  export const MarkdownSettings = lazy(() => import('./settings'));
12
13
  export const MarkdownState = lazy(() => import('./state'));
14
+ export const Toolkit = lazy(() => import('./toolkit'));
13
15
 
16
+ export * from './blueprint-definition';
14
17
  export * from './capabilities';
@@ -3,7 +3,8 @@
3
3
  //
4
4
 
5
5
  import { next as A } from '@automerge/automerge';
6
- import { Option, type Schema, pipe } from 'effect';
6
+ import * as Option from 'effect/Option';
7
+ import type * as Schema from 'effect/Schema';
7
8
 
8
9
  import {
9
10
  Capabilities,
@@ -35,23 +36,22 @@ export default (context: PluginContext) =>
35
36
  },
36
37
  }),
37
38
  createResolver({
38
- intent: CollaborationActions.InsertContent,
39
+ intent: CollaborationActions.AcceptProposal,
39
40
  filter: (
40
41
  data,
41
- ): data is Omit<Schema.Schema.Type<typeof CollaborationActions.InsertContent.fields.input>, 'target'> & {
42
- target: Markdown.Document;
43
- } => Obj.instanceOf(Markdown.Document, data.target),
44
- resolve: async ({ target, object: objectRef, at, label }) => {
45
- const text = await target.content.load();
42
+ ): data is Omit<Schema.Schema.Type<typeof CollaborationActions.AcceptProposal.fields.input>, 'subject'> & {
43
+ subject: Markdown.Document;
44
+ } => Obj.instanceOf(Markdown.Document, data.subject),
45
+ resolve: async ({ subject, anchor, proposal }) => {
46
+ const text = await subject.content.load();
46
47
  const accessor = createDocAccessor(text, ['content']);
47
- const { start, end } = pipe(
48
- Option.fromNullable(at),
48
+ const { start, end } = Option.fromNullable(anchor).pipe(
49
49
  Option.flatMap((at) => Option.fromNullable(getRangeFromCursor(accessor, at))),
50
+ // Fallback to the end of the document.
50
51
  Option.getOrElse(() => ({ start: text.content.length - 1, end: text.content.length - 1 })),
51
52
  );
52
53
  accessor.handle.change((doc) => {
53
- const ref = `[${label ?? 'Generated content'}]](${objectRef.dxn.toString()})\n`;
54
- A.splice(doc, accessor.path.slice(), start, end - start, ref);
54
+ A.splice(doc, accessor.path.slice(), start, end - start, proposal.text);
55
55
  });
56
56
  },
57
57
  }),
@@ -0,0 +1,49 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Tool from '@effect/ai/Tool';
6
+ import * as Toolkit from '@effect/ai/Toolkit';
7
+ import * as Effect from 'effect/Effect';
8
+ import * as Schema from 'effect/Schema';
9
+
10
+ import { Capabilities, type Capability, type PluginContext, contributes, createIntent } from '@dxos/app-framework';
11
+ import { invariant } from '@dxos/invariant';
12
+ import { getActiveSpace } from '@dxos/plugin-space';
13
+ import { SpaceAction } from '@dxos/plugin-space/types';
14
+
15
+ import { MarkdownAction } from '../types';
16
+
17
+ // TODO(burdon): Reconcile with functions (currently reuses plugin framework intents).
18
+ class MarkdownToolkit extends Toolkit.make(
19
+ Tool.make('create-document', {
20
+ description: 'Creates a new markdown document.',
21
+ parameters: {
22
+ name: Schema.optional(Schema.String),
23
+ content: Schema.optional(Schema.String),
24
+ },
25
+ // TODO(wittjosiah): Return document.
26
+ success: Schema.Any,
27
+ failure: Schema.Never,
28
+ }),
29
+ ) {
30
+ static layer = (context: PluginContext) =>
31
+ MarkdownToolkit.toLayer({
32
+ 'create-document': ({ name, content }) => {
33
+ const { dispatch } = context.getCapability(Capabilities.IntentDispatcher);
34
+ const space = getActiveSpace(context);
35
+ invariant(space, 'No active space');
36
+
37
+ return Effect.gen(function* () {
38
+ const { object } = yield* dispatch(createIntent(MarkdownAction.Create, { name, content }));
39
+ yield* dispatch(createIntent(SpaceAction.AddObject, { object, target: space }));
40
+ return { id: object.id };
41
+ }).pipe(Effect.orDie);
42
+ },
43
+ });
44
+ }
45
+
46
+ export default (context: PluginContext): Capability<any>[] => [
47
+ contributes(Capabilities.Toolkit, MarkdownToolkit),
48
+ contributes(Capabilities.ToolkitHandler, MarkdownToolkit.layer(context)),
49
+ ];
@@ -2,8 +2,6 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React from 'react';
9
7
 
@@ -11,8 +9,8 @@ import { IntentPlugin } from '@dxos/app-framework';
11
9
  import { withPluginManager } from '@dxos/app-framework/testing';
12
10
  import { Markdown } from '@dxos/plugin-markdown/types';
13
11
  import { faker } from '@dxos/random';
12
+ import { withTheme } from '@dxos/react-ui/testing';
14
13
  import { CardContainer } from '@dxos/react-ui-stack/testing';
15
- import { withLayout, withTheme } from '@dxos/storybook-utils';
16
14
 
17
15
  import { translations } from '../../translations';
18
16
 
@@ -31,11 +29,10 @@ const meta: Meta<typeof MarkdownCard> = {
31
29
  );
32
30
  },
33
31
  decorators: [
32
+ withTheme,
34
33
  withPluginManager({
35
34
  plugins: [IntentPlugin()],
36
35
  }),
37
- withTheme,
38
- withLayout(),
39
36
  ],
40
37
  parameters: {
41
38
  layout: 'centered',
@@ -48,7 +45,7 @@ export default meta;
48
45
 
49
46
  type Story = StoryObj<typeof meta>;
50
47
 
51
- export const Popover = {
48
+ export const Popover: Story = {
52
49
  args: {
53
50
  role: 'card--popover',
54
51
  subject: Markdown.makeDocument({
@@ -56,9 +53,9 @@ export const Popover = {
56
53
  content: faker.lorem.paragraphs(3),
57
54
  }),
58
55
  },
59
- } satisfies Story;
56
+ };
60
57
 
61
- export const Intrinsic = {
58
+ export const Intrinsic: Story = {
62
59
  args: {
63
60
  role: 'card--intrinsic',
64
61
  subject: Markdown.makeDocument({
@@ -66,9 +63,9 @@ export const Intrinsic = {
66
63
  content: faker.lorem.paragraphs(3),
67
64
  }),
68
65
  },
69
- } satisfies Story;
66
+ };
70
67
 
71
- export const Extrinsic = {
68
+ export const Extrinsic: Story = {
72
69
  args: {
73
70
  role: 'card--extrinsic',
74
71
  subject: Markdown.makeDocument({
@@ -76,4 +73,4 @@ export const Extrinsic = {
76
73
  content: faker.lorem.paragraphs(3),
77
74
  }),
78
75
  },
79
- } satisfies Story;
76
+ };