@dxos/plugin-assistant 0.7.5-staging.e6154f3 → 0.8.1-main.013e445

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 (240) hide show
  1. package/dist/lib/browser/{AssistantDialog-TX6YYBUG.mjs → AssistantDialog-EIUUSXDS.mjs} +11 -10
  2. package/dist/lib/browser/AssistantDialog-EIUUSXDS.mjs.map +7 -0
  3. package/dist/lib/browser/{ChatContainer-AT3OAUT3.mjs → ChatContainer-NHHA6CSP.mjs} +5 -5
  4. package/dist/lib/browser/TemplateContainer-7IQ6V5AD.mjs +78 -0
  5. package/dist/lib/browser/TemplateContainer-7IQ6V5AD.mjs.map +7 -0
  6. package/dist/lib/browser/ai-client-BAPVMSNX.mjs +35 -0
  7. package/dist/lib/browser/ai-client-BAPVMSNX.mjs.map +7 -0
  8. package/dist/lib/browser/{app-graph-builder-AXAIFOGV.mjs → app-graph-builder-DTCUWBKB.mjs} +57 -13
  9. package/dist/lib/browser/app-graph-builder-DTCUWBKB.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-G7B54APW.mjs → chunk-25APJ3ZK.mjs} +34 -12
  11. package/dist/lib/browser/chunk-25APJ3ZK.mjs.map +7 -0
  12. package/dist/lib/browser/{chunk-EUMPBC4T.mjs → chunk-6FTPLBSC.mjs} +2 -2
  13. package/dist/lib/browser/{chunk-NV7SVHMV.mjs → chunk-AF7VQAKS.mjs} +1 -1
  14. package/dist/lib/browser/{chunk-NV7SVHMV.mjs.map → chunk-AF7VQAKS.mjs.map} +2 -2
  15. package/dist/lib/browser/{chunk-NFVIZS3B.mjs → chunk-KGIACFAX.mjs} +351 -207
  16. package/dist/lib/browser/chunk-KGIACFAX.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-VZ4W6SHE.mjs → chunk-SVUCJXGN.mjs} +2 -2
  18. package/dist/lib/browser/chunk-SVUCJXGN.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-FRIKXDDQ.mjs → chunk-X6ALDUA5.mjs} +26 -4
  20. package/dist/lib/browser/chunk-X6ALDUA5.mjs.map +7 -0
  21. package/dist/lib/browser/index.mjs +25 -27
  22. package/dist/lib/browser/index.mjs.map +3 -3
  23. package/dist/lib/browser/{intent-resolver-QRVRZL6K.mjs → intent-resolver-U57FXP3I.mjs} +6 -3
  24. package/dist/lib/browser/{intent-resolver-QRVRZL6K.mjs.map → intent-resolver-U57FXP3I.mjs.map} +3 -3
  25. package/dist/lib/browser/meta.json +1 -1
  26. package/dist/lib/browser/{react-surface-JLXNWOI6.mjs → react-surface-YNN5NYJW.mjs} +10 -9
  27. package/dist/lib/browser/react-surface-YNN5NYJW.mjs.map +7 -0
  28. package/dist/lib/browser/{settings-JTT62IHD.mjs → settings-VAW6UWFL.mjs} +3 -3
  29. package/dist/lib/browser/types/index.mjs +6 -2
  30. package/dist/lib/node/{AssistantDialog-U4GBPZD6.cjs → AssistantDialog-GT7R7MKH.cjs} +17 -16
  31. package/dist/lib/node/AssistantDialog-GT7R7MKH.cjs.map +7 -0
  32. package/dist/lib/node/{ChatContainer-CVHXNHGA.cjs → ChatContainer-JUZOEZZ7.cjs} +10 -10
  33. package/dist/lib/node/TemplateContainer-VPAZRFQA.cjs +104 -0
  34. package/dist/lib/node/TemplateContainer-VPAZRFQA.cjs.map +7 -0
  35. package/dist/lib/node/{ai-client-YANJEPO3.cjs → ai-client-5ESLYXAV.cjs} +19 -8
  36. package/dist/lib/node/ai-client-5ESLYXAV.cjs.map +7 -0
  37. package/dist/lib/node/{app-graph-builder-D7SHQTZS.cjs → app-graph-builder-3P6WSON2.cjs} +63 -20
  38. package/dist/lib/node/app-graph-builder-3P6WSON2.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-IXJCGW7U.cjs → chunk-G2HY3UJ4.cjs} +40 -18
  40. package/dist/lib/node/chunk-G2HY3UJ4.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-XUTDR7HI.cjs → chunk-JAB6KLPP.cjs} +356 -216
  42. package/dist/lib/node/chunk-JAB6KLPP.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-37GI4NYH.cjs → chunk-KLSNCP34.cjs} +33 -9
  44. package/dist/lib/node/chunk-KLSNCP34.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-NV4TQQSU.cjs → chunk-N3SW6DJ6.cjs} +6 -6
  46. package/dist/lib/node/{chunk-GNPXCHFT.cjs → chunk-U6J2GO7I.cjs} +4 -4
  47. package/dist/lib/node/{chunk-GNPXCHFT.cjs.map → chunk-U6J2GO7I.cjs.map} +2 -2
  48. package/dist/lib/node/{chunk-ZGH6F5YA.cjs → chunk-VRXFIS4X.cjs} +6 -6
  49. package/dist/lib/node/chunk-VRXFIS4X.cjs.map +7 -0
  50. package/dist/lib/node/index.cjs +75 -77
  51. package/dist/lib/node/index.cjs.map +3 -3
  52. package/dist/lib/node/{intent-resolver-YMMAFVOB.cjs → intent-resolver-YIFAMM3B.cjs} +13 -10
  53. package/dist/lib/node/{intent-resolver-YMMAFVOB.cjs.map → intent-resolver-YIFAMM3B.cjs.map} +3 -3
  54. package/dist/lib/node/meta.json +1 -1
  55. package/dist/lib/node/{react-surface-BSUZQ3HZ.cjs → react-surface-IDGIN55C.cjs} +25 -24
  56. package/dist/lib/node/react-surface-IDGIN55C.cjs.map +7 -0
  57. package/dist/lib/node/{settings-4YEO7KXF.cjs → settings-2FEYGLYU.cjs} +8 -8
  58. package/dist/lib/node/types/index.cjs +15 -11
  59. package/dist/lib/node/types/index.cjs.map +2 -2
  60. package/dist/lib/node-esm/{AssistantDialog-5AT5JAZL.mjs → AssistantDialog-JMBFM6QH.mjs} +11 -10
  61. package/dist/lib/node-esm/AssistantDialog-JMBFM6QH.mjs.map +7 -0
  62. package/dist/lib/node-esm/{ChatContainer-VR766C4M.mjs → ChatContainer-ZNN5CMVL.mjs} +5 -5
  63. package/dist/lib/node-esm/TemplateContainer-YLA6BJY6.mjs +79 -0
  64. package/dist/lib/node-esm/TemplateContainer-YLA6BJY6.mjs.map +7 -0
  65. package/dist/lib/node-esm/ai-client-XYZ5N7CR.mjs +36 -0
  66. package/dist/lib/node-esm/ai-client-XYZ5N7CR.mjs.map +7 -0
  67. package/dist/lib/node-esm/{app-graph-builder-H2GC2AZA.mjs → app-graph-builder-PMAQLTTN.mjs} +57 -13
  68. package/dist/lib/node-esm/app-graph-builder-PMAQLTTN.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-77ARTFBA.mjs → chunk-2CIYX3SD.mjs} +2 -2
  70. package/dist/lib/node-esm/chunk-2CIYX3SD.mjs.map +7 -0
  71. package/dist/lib/node-esm/{chunk-LBQGJE5T.mjs → chunk-J63VQFQO.mjs} +2 -2
  72. package/dist/lib/node-esm/{chunk-7SV6X6XU.mjs → chunk-N6BVC2C2.mjs} +1 -1
  73. package/dist/lib/node-esm/{chunk-7SV6X6XU.mjs.map → chunk-N6BVC2C2.mjs.map} +2 -2
  74. package/dist/lib/node-esm/{chunk-CJ4Y3QW5.mjs → chunk-NMMRHHAR.mjs} +26 -4
  75. package/dist/lib/node-esm/chunk-NMMRHHAR.mjs.map +7 -0
  76. package/dist/lib/node-esm/{chunk-7JENJTLB.mjs → chunk-PK5JCOYB.mjs} +351 -207
  77. package/dist/lib/node-esm/chunk-PK5JCOYB.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-AMQMVQJO.mjs → chunk-SMUINDXQ.mjs} +34 -12
  79. package/dist/lib/node-esm/chunk-SMUINDXQ.mjs.map +7 -0
  80. package/dist/lib/node-esm/index.mjs +25 -27
  81. package/dist/lib/node-esm/index.mjs.map +3 -3
  82. package/dist/lib/node-esm/{intent-resolver-MR7BOKEW.mjs → intent-resolver-SQ4HLL5L.mjs} +6 -3
  83. package/dist/lib/node-esm/{intent-resolver-MR7BOKEW.mjs.map → intent-resolver-SQ4HLL5L.mjs.map} +3 -3
  84. package/dist/lib/node-esm/meta.json +1 -1
  85. package/dist/lib/node-esm/{react-surface-IGVYAOGL.mjs → react-surface-424JZTZ4.mjs} +10 -9
  86. package/dist/lib/node-esm/react-surface-424JZTZ4.mjs.map +7 -0
  87. package/dist/lib/node-esm/{settings-S7P5RWQI.mjs → settings-VHR5KT4J.mjs} +3 -3
  88. package/dist/lib/node-esm/types/index.mjs +6 -2
  89. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/ai-client.d.ts +2 -2
  91. package/dist/types/src/capabilities/ai-client.d.ts.map +1 -1
  92. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/capabilities.d.ts +3 -2
  94. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/index.d.ts +1 -1
  96. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  97. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  98. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts +5 -4
  99. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts.map +1 -1
  100. package/dist/types/src/components/AssistantDialog.d.ts.map +1 -1
  101. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts +2 -1
  102. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  103. package/dist/types/src/components/ChatContainer.d.ts +2 -1
  104. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  105. package/dist/types/src/components/Prompt/Prompt.d.ts +3 -0
  106. package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -1
  107. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +1 -0
  108. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -1
  109. package/dist/types/src/components/Prompt/PromptBar.d.ts +3 -2
  110. package/dist/types/src/components/Prompt/PromptBar.d.ts.map +1 -1
  111. package/dist/types/src/components/Prompt/references.d.ts +30 -0
  112. package/dist/types/src/components/Prompt/references.d.ts.map +1 -0
  113. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts +2 -1
  114. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts.map +1 -1
  115. package/dist/types/src/components/TemplateContainer.d.ts +2 -1
  116. package/dist/types/src/components/TemplateContainer.d.ts.map +1 -1
  117. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -1
  118. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  119. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +2 -1
  120. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  121. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +3 -2
  122. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  123. package/dist/types/src/components/Thread/Thread.d.ts +12 -1
  124. package/dist/types/src/components/Thread/Thread.d.ts.map +1 -1
  125. package/dist/types/src/components/Thread/ThreadContainer.d.ts +1 -0
  126. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
  127. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +2 -1
  128. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
  129. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
  130. package/dist/types/src/components/Toolbox/Toolbox.d.ts +4 -3
  131. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  132. package/dist/types/src/components/index.d.ts +2 -2
  133. package/dist/types/src/components/index.d.ts.map +1 -1
  134. package/dist/types/src/hooks/email.d.ts.map +1 -1
  135. package/dist/types/src/hooks/index.d.ts +1 -0
  136. package/dist/types/src/hooks/index.d.ts.map +1 -1
  137. package/dist/types/src/hooks/invocation-handler.d.ts +1 -1
  138. package/dist/types/src/hooks/invocation-handler.d.ts.map +1 -1
  139. package/dist/types/src/hooks/processor.d.ts +10 -15
  140. package/dist/types/src/hooks/processor.d.ts.map +1 -1
  141. package/dist/types/src/hooks/useChatProcessor.d.ts +9 -2
  142. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  143. package/dist/types/src/hooks/useContextProvider.d.ts +17 -0
  144. package/dist/types/src/hooks/useContextProvider.d.ts.map +1 -0
  145. package/dist/types/src/hooks/useMessageQueue.d.ts +4 -4
  146. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -1
  147. package/dist/types/src/meta.d.ts +2 -8
  148. package/dist/types/src/meta.d.ts.map +1 -1
  149. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  150. package/dist/types/src/tools/function.d.ts +1 -1
  151. package/dist/types/src/tools/function.d.ts.map +1 -1
  152. package/dist/types/src/translations.d.ts +23 -12
  153. package/dist/types/src/translations.d.ts.map +1 -1
  154. package/dist/types/src/types/service.d.ts +1 -1
  155. package/dist/types/src/types/service.d.ts.map +1 -1
  156. package/dist/types/src/types/template.d.ts +36 -0
  157. package/dist/types/src/types/template.d.ts.map +1 -1
  158. package/dist/types/src/types/types.d.ts +3 -1
  159. package/dist/types/src/types/types.d.ts.map +1 -1
  160. package/package.json +56 -56
  161. package/src/AssistantPlugin.tsx +11 -4
  162. package/src/capabilities/ai-client.ts +23 -4
  163. package/src/capabilities/app-graph-builder.ts +48 -4
  164. package/src/capabilities/capabilities.ts +4 -2
  165. package/src/capabilities/intent-resolver.ts +1 -1
  166. package/src/capabilities/react-surface.tsx +3 -2
  167. package/src/components/AmbientDialog/AmbientDialog.tsx +11 -11
  168. package/src/components/AssistantDialog.tsx +7 -1
  169. package/src/components/AssistantSettings/AssistantSettings.tsx +39 -5
  170. package/src/components/Prompt/Prompt.stories.tsx +34 -0
  171. package/src/components/Prompt/Prompt.tsx +28 -18
  172. package/src/components/Prompt/PromptBar.tsx +18 -7
  173. package/src/components/Prompt/references.ts +180 -0
  174. package/src/components/TemplateContainer.tsx +79 -4
  175. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +1 -1
  176. package/src/components/TemplateEditor/TemplateForm.stories.tsx +1 -1
  177. package/src/components/TemplateEditor/TemplateForm.tsx +1 -1
  178. package/src/components/Thread/Thread.tsx +21 -0
  179. package/src/components/Thread/ThreadContainer.stories.tsx +7 -12
  180. package/src/components/Thread/ThreadContainer.tsx +7 -4
  181. package/src/components/Thread/ThreadMessage.tsx +17 -9
  182. package/src/components/Toolbox/Toolbox.tsx +1 -1
  183. package/src/components/index.ts +3 -0
  184. package/src/hooks/email.ts +3 -3
  185. package/src/hooks/index.ts +1 -0
  186. package/src/hooks/invocation-handler.ts +3 -5
  187. package/src/hooks/processor.ts +60 -110
  188. package/src/hooks/useChatProcessor.tsx +25 -17
  189. package/src/hooks/useContextProvider.ts +55 -0
  190. package/src/hooks/useLocalTriggerManager.ts +1 -1
  191. package/src/hooks/useMessageQueue.ts +2 -4
  192. package/src/meta.ts +2 -2
  193. package/src/testing/test-functions.ts +2 -2
  194. package/src/tools/function.ts +2 -2
  195. package/src/tools/openapi.test.ts +4 -4
  196. package/src/translations.ts +10 -5
  197. package/src/types/service.ts +1 -1
  198. package/src/types/template.ts +22 -0
  199. package/src/types/types.ts +3 -1
  200. package/dist/lib/browser/AssistantDialog-TX6YYBUG.mjs.map +0 -7
  201. package/dist/lib/browser/TemplateContainer-B7MQNUPY.mjs +0 -23
  202. package/dist/lib/browser/TemplateContainer-B7MQNUPY.mjs.map +0 -7
  203. package/dist/lib/browser/ai-client-RTCGRKZE.mjs +0 -22
  204. package/dist/lib/browser/ai-client-RTCGRKZE.mjs.map +0 -7
  205. package/dist/lib/browser/app-graph-builder-AXAIFOGV.mjs.map +0 -7
  206. package/dist/lib/browser/chunk-FRIKXDDQ.mjs.map +0 -7
  207. package/dist/lib/browser/chunk-G7B54APW.mjs.map +0 -7
  208. package/dist/lib/browser/chunk-NFVIZS3B.mjs.map +0 -7
  209. package/dist/lib/browser/chunk-VZ4W6SHE.mjs.map +0 -7
  210. package/dist/lib/browser/react-surface-JLXNWOI6.mjs.map +0 -7
  211. package/dist/lib/node/AssistantDialog-U4GBPZD6.cjs.map +0 -7
  212. package/dist/lib/node/TemplateContainer-R4BZZP3E.cjs +0 -53
  213. package/dist/lib/node/TemplateContainer-R4BZZP3E.cjs.map +0 -7
  214. package/dist/lib/node/ai-client-YANJEPO3.cjs.map +0 -7
  215. package/dist/lib/node/app-graph-builder-D7SHQTZS.cjs.map +0 -7
  216. package/dist/lib/node/chunk-37GI4NYH.cjs.map +0 -7
  217. package/dist/lib/node/chunk-IXJCGW7U.cjs.map +0 -7
  218. package/dist/lib/node/chunk-XUTDR7HI.cjs.map +0 -7
  219. package/dist/lib/node/chunk-ZGH6F5YA.cjs.map +0 -7
  220. package/dist/lib/node/react-surface-BSUZQ3HZ.cjs.map +0 -7
  221. package/dist/lib/node-esm/AssistantDialog-5AT5JAZL.mjs.map +0 -7
  222. package/dist/lib/node-esm/TemplateContainer-WSHTZBB5.mjs +0 -24
  223. package/dist/lib/node-esm/TemplateContainer-WSHTZBB5.mjs.map +0 -7
  224. package/dist/lib/node-esm/ai-client-66IBZVCX.mjs +0 -23
  225. package/dist/lib/node-esm/ai-client-66IBZVCX.mjs.map +0 -7
  226. package/dist/lib/node-esm/app-graph-builder-H2GC2AZA.mjs.map +0 -7
  227. package/dist/lib/node-esm/chunk-77ARTFBA.mjs.map +0 -7
  228. package/dist/lib/node-esm/chunk-7JENJTLB.mjs.map +0 -7
  229. package/dist/lib/node-esm/chunk-AMQMVQJO.mjs.map +0 -7
  230. package/dist/lib/node-esm/chunk-CJ4Y3QW5.mjs.map +0 -7
  231. package/dist/lib/node-esm/react-surface-IGVYAOGL.mjs.map +0 -7
  232. /package/dist/lib/browser/{ChatContainer-AT3OAUT3.mjs.map → ChatContainer-NHHA6CSP.mjs.map} +0 -0
  233. /package/dist/lib/browser/{chunk-EUMPBC4T.mjs.map → chunk-6FTPLBSC.mjs.map} +0 -0
  234. /package/dist/lib/browser/{settings-JTT62IHD.mjs.map → settings-VAW6UWFL.mjs.map} +0 -0
  235. /package/dist/lib/node/{ChatContainer-CVHXNHGA.cjs.map → ChatContainer-JUZOEZZ7.cjs.map} +0 -0
  236. /package/dist/lib/node/{chunk-NV4TQQSU.cjs.map → chunk-N3SW6DJ6.cjs.map} +0 -0
  237. /package/dist/lib/node/{settings-4YEO7KXF.cjs.map → settings-2FEYGLYU.cjs.map} +0 -0
  238. /package/dist/lib/node-esm/{ChatContainer-VR766C4M.mjs.map → ChatContainer-ZNN5CMVL.mjs.map} +0 -0
  239. /package/dist/lib/node-esm/{chunk-LBQGJE5T.mjs.map → chunk-J63VQFQO.mjs.map} +0 -0
  240. /package/dist/lib/node-esm/{settings-S7P5RWQI.mjs.map → settings-VHR5KT4J.mjs.map} +0 -0
@@ -4,22 +4,23 @@ import {
4
4
  ChatContainer,
5
5
  ServiceRegistry,
6
6
  TemplateContainer
7
- } from "./chunk-G7B54APW.mjs";
8
- import "./chunk-EUMPBC4T.mjs";
9
- import "./chunk-NFVIZS3B.mjs";
10
- import "./chunk-VZ4W6SHE.mjs";
7
+ } from "./chunk-25APJ3ZK.mjs";
8
+ import "./chunk-6FTPLBSC.mjs";
9
+ import "./chunk-KGIACFAX.mjs";
10
+ import "./chunk-SVUCJXGN.mjs";
11
11
  import {
12
12
  AIChatType,
13
13
  TemplateType
14
- } from "./chunk-FRIKXDDQ.mjs";
14
+ } from "./chunk-X6ALDUA5.mjs";
15
15
  import {
16
16
  ASSISTANT_DIALOG,
17
17
  ASSISTANT_PLUGIN
18
- } from "./chunk-NV7SVHMV.mjs";
18
+ } from "./chunk-AF7VQAKS.mjs";
19
19
 
20
20
  // packages/plugins/experimental/plugin-assistant/src/capabilities/react-surface.tsx
21
21
  import React from "react";
22
22
  import { Capabilities, contributes, createSurface } from "@dxos/app-framework";
23
+ import { isInstanceOf } from "@dxos/echo-schema";
23
24
  import { SettingsStore } from "@dxos/local-storage";
24
25
  import { getSpace, isSpace } from "@dxos/react-client/echo";
25
26
  var react_surface_default = () => contributes(Capabilities.ReactSurface, [
@@ -40,7 +41,7 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
40
41
  createSurface({
41
42
  id: `${ASSISTANT_PLUGIN}/chat`,
42
43
  role: "article",
43
- filter: (data) => data.subject instanceof AIChatType,
44
+ filter: (data) => isInstanceOf(AIChatType, data.subject),
44
45
  component: ({ data, role }) => /* @__PURE__ */ React.createElement(ChatContainer, {
45
46
  role,
46
47
  chat: data.subject
@@ -49,7 +50,7 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
49
50
  createSurface({
50
51
  id: `${ASSISTANT_PLUGIN}/template`,
51
52
  role: "article",
52
- filter: (data) => data.subject instanceof TemplateType,
53
+ filter: (data) => isInstanceOf(TemplateType, data.subject),
53
54
  component: ({ data, role }) => /* @__PURE__ */ React.createElement(TemplateContainer, {
54
55
  role,
55
56
  template: data.subject
@@ -66,4 +67,4 @@ var react_surface_default = () => contributes(Capabilities.ReactSurface, [
66
67
  export {
67
68
  react_surface_default as default
68
69
  };
69
- //# sourceMappingURL=react-surface-JLXNWOI6.mjs.map
70
+ //# sourceMappingURL=react-surface-YNN5NYJW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/react-surface.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { getSpace, isSpace } from '@dxos/react-client/echo';\n\nimport { AssistantDialog, AssistantSettings, ChatContainer, ServiceRegistry, TemplateContainer } from '../components';\nimport { ASSISTANT_PLUGIN, ASSISTANT_DIALOG } from '../meta';\nimport { AIChatType, type AssistantSettingsProps, TemplateType } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${ASSISTANT_PLUGIN}/settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<AssistantSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === ASSISTANT_PLUGIN,\n component: ({ data: { subject } }) => <AssistantSettings settings={subject.value} />,\n }),\n createSurface({\n id: ASSISTANT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: { chat: AIChatType } } => data.component === ASSISTANT_DIALOG,\n component: ({ data }) => <AssistantDialog {...data.props} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/chat`,\n role: 'article',\n filter: (data): data is { subject: AIChatType } => isInstanceOf(AIChatType, data.subject),\n component: ({ data, role }) => <ChatContainer role={role} chat={data.subject} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/template`,\n role: 'article',\n filter: (data): data is { subject: TemplateType } => isInstanceOf(TemplateType, data.subject),\n component: ({ data, role }) => <TemplateContainer role={role} template={data.subject} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/service-registry`,\n role: 'complementary--service-registry',\n component: ({ data }) => (\n <ServiceRegistry space={isSpace(data.subject) ? data.subject : getSpace(data.subject)!} />\n ),\n }),\n ]);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,oBAAoB;AAC7B,SAASC,qBAAqB;AAC9B,SAASC,UAAUC,eAAe;AAMlC,IAAA,wBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKC,mBAAmBC,iBAAiBF,KAAKC,QAAQE,WAAWN;IACnEO,WAAW,CAAC,EAAEJ,MAAM,EAAEC,QAAO,EAAE,MAAO,sBAAA,cAACI,mBAAAA;MAAkBC,UAAUL,QAAQM;;EAC7E,CAAA;EACAZ,cAAc;IACZC,IAAIY;IACJV,MAAM;IACNC,QAAQ,CAACC,SAAkDA,KAAKI,cAAcI;IAC9EJ,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACS,iBAAoBT,KAAKU,KAAK;EAC1D,CAAA;EACAf,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA0CW,aAAaC,YAAYZ,KAAKC,OAAO;IACxFG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACe,eAAAA;MAAcf;MAAYgB,MAAMd,KAAKC;;EACvE,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA4CW,aAAaI,cAAcf,KAAKC,OAAO;IAC5FG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACkB,mBAAAA;MAAkBlB;MAAYmB,UAAUjB,KAAKC;;EAC/E,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNM,WAAW,CAAC,EAAEJ,KAAI,MAChB,sBAAA,cAACkB,iBAAAA;MAAgBC,OAAOC,QAAQpB,KAAKC,OAAO,IAAID,KAAKC,UAAUoB,SAASrB,KAAKC,OAAO;;EAExF,CAAA;CACD;",
6
+ "names": ["React", "Capabilities", "contributes", "createSurface", "isInstanceOf", "SettingsStore", "getSpace", "isSpace", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "ASSISTANT_PLUGIN", "role", "filter", "data", "subject", "SettingsStore", "prefix", "component", "AssistantSettings", "settings", "value", "ASSISTANT_DIALOG", "AssistantDialog", "props", "isInstanceOf", "AIChatType", "ChatContainer", "chat", "TemplateType", "TemplateContainer", "template", "ServiceRegistry", "space", "isSpace", "getSpace"]
7
+ }
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  AssistantSettingsSchema
3
- } from "./chunk-FRIKXDDQ.mjs";
3
+ } from "./chunk-X6ALDUA5.mjs";
4
4
  import {
5
5
  ASSISTANT_PLUGIN
6
- } from "./chunk-NV7SVHMV.mjs";
6
+ } from "./chunk-AF7VQAKS.mjs";
7
7
 
8
8
  // packages/plugins/experimental/plugin-assistant/src/capabilities/settings.ts
9
9
  import { Capabilities, contributes } from "@dxos/app-framework";
@@ -19,4 +19,4 @@ var settings_default = () => {
19
19
  export {
20
20
  settings_default as default
21
21
  };
22
- //# sourceMappingURL=settings-JTT62IHD.mjs.map
22
+ //# sourceMappingURL=settings-VAW6UWFL.mjs.map
@@ -6,10 +6,12 @@ import {
6
6
  ServiceType,
7
7
  TemplateInputSchema,
8
8
  TemplateInputType,
9
+ TemplateKindSchema,
10
+ TemplateKinds,
9
11
  TemplateType,
10
12
  categoryIcons
11
- } from "../chunk-FRIKXDDQ.mjs";
12
- import "../chunk-NV7SVHMV.mjs";
13
+ } from "../chunk-X6ALDUA5.mjs";
14
+ import "../chunk-AF7VQAKS.mjs";
13
15
  export {
14
16
  AIChatType,
15
17
  ApiAuthorization,
@@ -18,6 +20,8 @@ export {
18
20
  ServiceType,
19
21
  TemplateInputSchema,
20
22
  TemplateInputType,
23
+ TemplateKindSchema,
24
+ TemplateKinds,
21
25
  TemplateType,
22
26
  categoryIcons
23
27
  };
@@ -26,16 +26,16 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var AssistantDialog_U4GBPZD6_exports = {};
30
- __export(AssistantDialog_U4GBPZD6_exports, {
29
+ var AssistantDialog_GT7R7MKH_exports = {};
30
+ __export(AssistantDialog_GT7R7MKH_exports, {
31
31
  AssistantDialog: () => AssistantDialog,
32
32
  default: () => AssistantDialog_default
33
33
  });
34
- module.exports = __toCommonJS(AssistantDialog_U4GBPZD6_exports);
35
- var import_chunk_XUTDR7HI = require("./chunk-XUTDR7HI.cjs");
36
- var import_chunk_ZGH6F5YA = require("./chunk-ZGH6F5YA.cjs");
37
- var import_chunk_37GI4NYH = require("./chunk-37GI4NYH.cjs");
38
- var import_chunk_GNPXCHFT = require("./chunk-GNPXCHFT.cjs");
34
+ module.exports = __toCommonJS(AssistantDialog_GT7R7MKH_exports);
35
+ var import_chunk_JAB6KLPP = require("./chunk-JAB6KLPP.cjs");
36
+ var import_chunk_VRXFIS4X = require("./chunk-VRXFIS4X.cjs");
37
+ var import_chunk_KLSNCP34 = require("./chunk-KLSNCP34.cjs");
38
+ var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_app_framework = require("@dxos/app-framework");
41
41
  var import_plugin_transcription = require("@dxos/plugin-transcription");
@@ -46,14 +46,14 @@ var import_react_ui_dnd = require("@dxos/react-ui-dnd");
46
46
  var import_react_ui_theme = require("@dxos/react-ui-theme");
47
47
  var preventDefault = (event) => event.preventDefault();
48
48
  var minSize = 5;
49
- var AmbientDialog = ({ children, open: _open, title, onOpenChange }) => {
49
+ var AmbientDialog = ({ children, open: controlledOpen, title, onOpenChange }) => {
50
50
  const [resizeKey, setReizeKey] = (0, import_react2.useState)(0);
51
51
  const [size, setSize] = (0, import_react2.useState)("min-content");
52
- const [open, setOpen] = (0, import_react2.useState)(_open);
52
+ const [open, setOpen] = (0, import_react2.useState)(controlledOpen);
53
53
  (0, import_react2.useEffect)(() => {
54
- setOpen(_open);
54
+ setOpen(controlledOpen);
55
55
  }, [
56
- _open
56
+ controlledOpen
57
57
  ]);
58
58
  (0, import_react2.useEffect)(() => {
59
59
  setSize(open ? "min-content" : minSize);
@@ -77,7 +77,7 @@ var AmbientDialog = ({ children, open: _open, title, onOpenChange }) => {
77
77
  ...import_react_ui_dnd.resizeAttributes,
78
78
  style: {
79
79
  ...(0, import_react_ui_dnd.sizeStyle)(size, "vertical", true),
80
- maxBlockSize: "calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 8rem)"
80
+ maxBlockSize: "calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 9rem)"
81
81
  },
82
82
  onInteractOutside: preventDefault
83
83
  }, /* @__PURE__ */ import_react2.default.createElement(import_react_ui_dnd.ResizeHandle, {
@@ -117,18 +117,19 @@ var DialogHeader = ({ open, title, onToggle }) => {
117
117
  })));
118
118
  };
119
119
  var AssistantDialog = ({ chat }) => {
120
- const { t } = (0, import_react_ui.useTranslation)(import_chunk_GNPXCHFT.ASSISTANT_PLUGIN);
120
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN);
121
121
  const transcription = (0, import_app_framework.useCapabilities)(import_plugin_transcription.TranscriptionCapabilities.Transcription).length > 0;
122
- const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_GNPXCHFT.ASSISTANT_PLUGIN)?.value;
122
+ const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN)?.value;
123
123
  const [open, setOpen] = (0, import_react.useState)(false);
124
124
  return /* @__PURE__ */ import_react.default.createElement(AmbientDialog, {
125
125
  open,
126
126
  onOpenChange: setOpen,
127
127
  title: t("assistant dialog title")
128
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_XUTDR7HI.ThreadContainer, {
128
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_JAB6KLPP.ThreadContainer, {
129
129
  chat,
130
130
  onOpenChange: setOpen,
131
131
  settings,
132
+ part: "dialog",
132
133
  transcription
133
134
  }));
134
135
  };
@@ -137,4 +138,4 @@ var AssistantDialog_default = AssistantDialog;
137
138
  0 && (module.exports = {
138
139
  AssistantDialog
139
140
  });
140
- //# sourceMappingURL=AssistantDialog-U4GBPZD6.cjs.map
141
+ //# sourceMappingURL=AssistantDialog-GT7R7MKH.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/AssistantDialog.tsx", "../../../src/components/AmbientDialog/AmbientDialog.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, useState } from 'react';\n\nimport { useCapability, Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { TranscriptionCapabilities } from '@dxos/plugin-transcription';\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { AmbientDialog } from './AmbientDialog';\nimport { ThreadContainer } from './Thread';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps, type AIChatType } from '../types';\n\nexport const AssistantDialog: FC<{ chat?: AIChatType }> = ({ chat }) => {\n const { t } = useTranslation(ASSISTANT_PLUGIN);\n const transcription = useCapabilities(TranscriptionCapabilities.Transcription).length > 0;\n const settings = useCapability(Capabilities.SettingsStore).getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n // TODO(burdon): Refocus when open.\n const [open, setOpen] = useState(false);\n\n return (\n <AmbientDialog open={open} onOpenChange={setOpen} title={t('assistant dialog title')}>\n <ThreadContainer\n chat={chat}\n onOpenChange={setOpen}\n settings={settings}\n part={'dialog'}\n transcription={transcription}\n />\n </AmbientDialog>\n );\n};\n\nexport default AssistantDialog;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useCallback, useEffect, useState } from 'react';\n\nimport { Dialog, Icon, IconButton } from '@dxos/react-ui';\nimport { resizeAttributes, ResizeHandle, type Size, sizeStyle } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst preventDefault = (event: Event) => event.preventDefault();\n\nconst minSize = 5;\n\nexport type AmbientDialogProps = PropsWithChildren<{\n open?: boolean;\n title?: string;\n onOpenChange?: (open: boolean) => void;\n}>;\n\nexport const AmbientDialog = ({ children, open: controlledOpen, title, onOpenChange }: AmbientDialogProps) => {\n const [resizeKey, setReizeKey] = useState(0);\n const [size, setSize] = useState<Size>('min-content');\n const [open, setOpen] = useState(controlledOpen);\n\n // Update controlled value.\n useEffect(() => {\n setOpen(controlledOpen);\n }, [controlledOpen]);\n\n // Update size and key.\n useEffect(() => {\n setSize(open ? 'min-content' : minSize);\n setReizeKey((key) => key + 1);\n }, [open]);\n\n // TODO(burdon): Animate open/close.\n // NOTE: We set the min size to 5rem (80px), and the header and prompt bar to 40px (i.e., the rail-size) each.\n // The dialog has no vertical padding and has box-content so that when closed it collapses to the size of the header and prompt bar.\n const handleToggle = useCallback(() => {\n setOpen((open) => {\n onOpenChange?.(!open);\n return !open;\n });\n }, []);\n\n return (\n <div role='none' className='dx-dialog__overlay bg-transparent pointer-events-none' data-block-align='end'>\n <Dialog.Content\n classNames='relative box-content py-0 px-2 md:is-[35rem] md:max-is-none overflow-hidden pointer-events-auto transition-[block-size] ease-in-out duration-0 [&:not([data-dx-resizing=\"true\"])]:duration-200'\n inOverlayLayout\n {...resizeAttributes}\n style={{\n ...sizeStyle(size, 'vertical', true),\n maxBlockSize: 'calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 9rem)',\n }}\n onInteractOutside={preventDefault}\n >\n <ResizeHandle\n key={resizeKey}\n side='block-start'\n defaultSize='min-content'\n minSize={minSize}\n fallbackSize={minSize}\n iconPosition='center'\n onSizeChange={setSize}\n />\n\n <DialogHeader open={open} title={title} onToggle={handleToggle} />\n\n {children}\n </Dialog.Content>\n </div>\n );\n};\n\n/**\n * Matches same layout grid as PromptBar.\n */\nconst DialogHeader = ({ open, title, onToggle }: { open?: boolean; title?: string; onToggle: () => void }) => {\n return (\n <div className='flex shrink-0 w-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] items-center overflow-hidden'>\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n <Dialog.Close>\n <Icon icon='ph--x--regular' />\n </Dialog.Close>\n </div>\n <div className='grow'>\n <Dialog.Title classNames='flex justify-center text-xs text-subdued'>{title}</Dialog.Title>\n </div>\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n <IconButton\n variant='ghost'\n icon={'ph--caret-up--regular'}\n classNames={mx('[&>svg]:transition [&>svg]:duration-200', open && '[&>svg]:rotate-180')}\n iconOnly\n label='Shrink'\n onClick={onToggle}\n />\n </div>\n </div>\n );\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["import_react", "import_react_ui", "preventDefault", "event", "minSize", "AmbientDialog", "children", "open", "controlledOpen", "title", "onOpenChange", "resizeKey", "setReizeKey", "useState", "size", "setSize", "setOpen", "useEffect", "key", "handleToggle", "useCallback", "React", "div", "role", "className", "data-block-align", "Dialog", "Content", "classNames", "inOverlayLayout", "resizeAttributes", "style", "sizeStyle", "maxBlockSize", "onInteractOutside", "ResizeHandle", "side", "defaultSize", "fallbackSize", "iconPosition", "onSizeChange", "DialogHeader", "onToggle", "Close", "Icon", "icon", "Title", "IconButton", "variant", "mx", "iconOnly", "label", "onClick", "AssistantDialog", "chat", "t", "useTranslation", "ASSISTANT_PLUGIN", "transcription", "useCapabilities", "TranscriptionCapabilities", "Transcription", "length", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "value", "ThreadContainer", "part"]
7
+ }
@@ -26,28 +26,28 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
26
26
  mod
27
27
  ));
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
- var ChatContainer_CVHXNHGA_exports = {};
30
- __export(ChatContainer_CVHXNHGA_exports, {
29
+ var ChatContainer_JUZOEZZ7_exports = {};
30
+ __export(ChatContainer_JUZOEZZ7_exports, {
31
31
  ChatContainer: () => ChatContainer,
32
32
  default: () => ChatContainer_default
33
33
  });
34
- module.exports = __toCommonJS(ChatContainer_CVHXNHGA_exports);
35
- var import_chunk_XUTDR7HI = require("./chunk-XUTDR7HI.cjs");
36
- var import_chunk_ZGH6F5YA = require("./chunk-ZGH6F5YA.cjs");
37
- var import_chunk_37GI4NYH = require("./chunk-37GI4NYH.cjs");
38
- var import_chunk_GNPXCHFT = require("./chunk-GNPXCHFT.cjs");
34
+ module.exports = __toCommonJS(ChatContainer_JUZOEZZ7_exports);
35
+ var import_chunk_JAB6KLPP = require("./chunk-JAB6KLPP.cjs");
36
+ var import_chunk_VRXFIS4X = require("./chunk-VRXFIS4X.cjs");
37
+ var import_chunk_KLSNCP34 = require("./chunk-KLSNCP34.cjs");
38
+ var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
39
39
  var import_react = __toESM(require("react"));
40
40
  var import_app_framework = require("@dxos/app-framework");
41
41
  var import_plugin_transcription = require("@dxos/plugin-transcription");
42
42
  var import_react_ui_stack = require("@dxos/react-ui-stack");
43
43
  var ChatContainer = ({ chat, role }) => {
44
44
  const transcription = (0, import_app_framework.useCapabilities)(import_plugin_transcription.TranscriptionCapabilities.Transcription).length > 0;
45
- const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_GNPXCHFT.ASSISTANT_PLUGIN)?.value;
45
+ const settings = (0, import_app_framework.useCapability)(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN)?.value;
46
46
  return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
47
47
  toolbar: false,
48
48
  role,
49
49
  classNames: "mli-auto w-full max-w-[50rem]"
50
- }, /* @__PURE__ */ import_react.default.createElement(import_chunk_XUTDR7HI.ThreadContainer, {
50
+ }, /* @__PURE__ */ import_react.default.createElement(import_chunk_JAB6KLPP.ThreadContainer, {
51
51
  chat,
52
52
  settings,
53
53
  transcription
@@ -58,4 +58,4 @@ var ChatContainer_default = ChatContainer;
58
58
  0 && (module.exports = {
59
59
  ChatContainer
60
60
  });
61
- //# sourceMappingURL=ChatContainer-CVHXNHGA.cjs.map
61
+ //# sourceMappingURL=ChatContainer-JUZOEZZ7.cjs.map
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var TemplateContainer_VPAZRFQA_exports = {};
30
+ __export(TemplateContainer_VPAZRFQA_exports, {
31
+ TemplateContainer: () => TemplateContainer,
32
+ default: () => TemplateContainer_default
33
+ });
34
+ module.exports = __toCommonJS(TemplateContainer_VPAZRFQA_exports);
35
+ var import_chunk_N3SW6DJ6 = require("./chunk-N3SW6DJ6.cjs");
36
+ var import_chunk_KLSNCP34 = require("./chunk-KLSNCP34.cjs");
37
+ var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
38
+ var import_effect = require("effect");
39
+ var import_react = __toESM(require("react"));
40
+ var import_async = require("@dxos/async");
41
+ var import_react_ui = require("@dxos/react-ui");
42
+ var import_react_ui_stack = require("@dxos/react-ui-stack");
43
+ var TemplateContainer = ({ template, role }) => {
44
+ const { t } = (0, import_react_ui.useTranslation)(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN);
45
+ const handleKindChange = (0, import_react.useCallback)((value) => {
46
+ const kind = import_effect.Match.type().pipe(import_effect.Match.withReturnType(), import_effect.Match.when("always", () => ({
47
+ include: "always"
48
+ })), import_effect.Match.when("schema-matching", () => ({
49
+ include: "schema-matching",
50
+ typename: ""
51
+ })), import_effect.Match.when("automatically", () => ({
52
+ include: "automatically",
53
+ description: ""
54
+ })), import_effect.Match.orElse(() => ({
55
+ include: "manual"
56
+ })))(value);
57
+ template.kind = kind;
58
+ }, [
59
+ template
60
+ ]);
61
+ const handleTypenameChange = (0, import_react.useCallback)((0, import_async.debounce)((event) => {
62
+ if (template.kind.include === "schema-matching") {
63
+ template.kind.typename = event.target.value;
64
+ }
65
+ }, 300), [
66
+ template.kind.include
67
+ ]);
68
+ const handleDescriptionChange = (0, import_react.useCallback)((0, import_async.debounce)((event) => {
69
+ if (template.kind.include === "automatically") {
70
+ template.kind.description = event.target.value;
71
+ }
72
+ }, 300), [
73
+ template.kind.include
74
+ ]);
75
+ return /* @__PURE__ */ import_react.default.createElement(import_react_ui_stack.StackItem.Content, {
76
+ toolbar: true,
77
+ role,
78
+ classNames: "mli-auto w-full max-w-[50rem]"
79
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Root, {
80
+ value: template.kind.include,
81
+ onValueChange: handleKindChange
82
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Toolbar.Button, {
83
+ asChild: true
84
+ }, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.TriggerButton, null)), /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Portal, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Content, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Viewport, null, import_chunk_KLSNCP34.TemplateKinds.map((kind) => /* @__PURE__ */ import_react.default.createElement(import_react_ui.Select.Option, {
85
+ key: kind,
86
+ value: kind
87
+ }, kind)))))), template.kind.include === "schema-matching" && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
88
+ placeholder: t("typename placeholder"),
89
+ defaultValue: template.kind.typename,
90
+ onChange: handleTypenameChange
91
+ })), template.kind.include === "automatically" && /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.Root, null, /* @__PURE__ */ import_react.default.createElement(import_react_ui.Input.TextInput, {
92
+ placeholder: t("description placeholder"),
93
+ defaultValue: template.kind.description,
94
+ onChange: handleDescriptionChange
95
+ }))), /* @__PURE__ */ import_react.default.createElement(import_chunk_N3SW6DJ6.TemplateEditor, {
96
+ template
97
+ }));
98
+ };
99
+ var TemplateContainer_default = TemplateContainer;
100
+ // Annotate the CommonJS export names for ESM import in node:
101
+ 0 && (module.exports = {
102
+ TemplateContainer
103
+ });
104
+ //# sourceMappingURL=TemplateContainer-VPAZRFQA.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/components/TemplateContainer.tsx"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Match, type Schema as S } from 'effect';\nimport React, { type ChangeEvent, useCallback } from 'react';\n\nimport { debounce } from '@dxos/async';\nimport { Input, Select, Toolbar, useTranslation } from '@dxos/react-ui';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { TemplateEditor } from './TemplateEditor';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { TemplateKinds, type TemplateKindSchema, type TemplateType } from '../types';\n\nexport const TemplateContainer = ({ template, role }: { template: TemplateType; role: string }) => {\n const { t } = useTranslation(ASSISTANT_PLUGIN);\n\n const handleKindChange = useCallback(\n (value: string) => {\n const kind = Match.type<string>().pipe(\n Match.withReturnType<S.Schema.Type<typeof TemplateKindSchema>>(),\n Match.when('always', () => ({ include: 'always' })),\n Match.when('schema-matching', () => ({ include: 'schema-matching', typename: '' })),\n Match.when('automatically', () => ({ include: 'automatically', description: '' })),\n Match.orElse(() => ({ include: 'manual' })),\n )(value);\n\n template.kind = kind;\n },\n [template],\n );\n\n const handleTypenameChange = useCallback(\n debounce((event: ChangeEvent<HTMLInputElement>) => {\n if (template.kind.include === 'schema-matching') {\n template.kind.typename = event.target.value;\n }\n }, 300),\n [template.kind.include],\n );\n\n const handleDescriptionChange = useCallback(\n debounce((event: ChangeEvent<HTMLInputElement>) => {\n if (template.kind.include === 'automatically') {\n template.kind.description = event.target.value;\n }\n }, 300),\n [template.kind.include],\n );\n\n return (\n <StackItem.Content toolbar role={role} classNames='mli-auto w-full max-w-[50rem]'>\n {/* TODO(wittjosiah): Move this toolbar into c11y sidebar. */}\n <Toolbar.Root>\n <Select.Root value={template.kind.include} onValueChange={handleKindChange}>\n <Toolbar.Button asChild>\n <Select.TriggerButton />\n </Toolbar.Button>\n <Select.Portal>\n <Select.Content>\n <Select.Viewport>\n {TemplateKinds.map((kind) => (\n <Select.Option key={kind} value={kind}>\n {kind}\n </Select.Option>\n ))}\n </Select.Viewport>\n </Select.Content>\n </Select.Portal>\n </Select.Root>\n {template.kind.include === 'schema-matching' && (\n <Input.Root>\n <Input.TextInput\n placeholder={t('typename placeholder')}\n defaultValue={template.kind.typename}\n onChange={handleTypenameChange}\n />\n </Input.Root>\n )}\n {template.kind.include === 'automatically' && (\n <Input.Root>\n <Input.TextInput\n placeholder={t('description placeholder')}\n defaultValue={template.kind.description}\n onChange={handleDescriptionChange}\n />\n </Input.Root>\n )}\n </Toolbar.Root>\n <TemplateEditor template={template} />\n </StackItem.Content>\n );\n};\n\nexport default TemplateContainer;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,oBAAwC;AACxC,mBAAqD;AAErD,mBAAyB;AACzB,sBAAuD;AACvD,4BAA0B;AAMnB,IAAMA,oBAAoB,CAAC,EAAEC,UAAUC,KAAI,MAA4C;AAC5F,QAAM,EAAEC,EAAC,QAAKC,gCAAeC,sCAAAA;AAE7B,QAAMC,uBAAmBC,0BACvB,CAACC,UAAAA;AACC,UAAMC,OAAOC,oBAAMC,KAAI,EAAWC,KAChCF,oBAAMG,eAAc,GACpBH,oBAAMI,KAAK,UAAU,OAAO;MAAEC,SAAS;IAAS,EAAA,GAChDL,oBAAMI,KAAK,mBAAmB,OAAO;MAAEC,SAAS;MAAmBC,UAAU;IAAG,EAAA,GAChFN,oBAAMI,KAAK,iBAAiB,OAAO;MAAEC,SAAS;MAAiBE,aAAa;IAAG,EAAA,GAC/EP,oBAAMQ,OAAO,OAAO;MAAEH,SAAS;IAAS,EAAA,CAAA,EACxCP,KAAAA;AAEFP,aAASQ,OAAOA;EAClB,GACA;IAACR;GAAS;AAGZ,QAAMkB,2BAAuBZ,8BAC3Ba,uBAAS,CAACC,UAAAA;AACR,QAAIpB,SAASQ,KAAKM,YAAY,mBAAmB;AAC/Cd,eAASQ,KAAKO,WAAWK,MAAMC,OAAOd;IACxC;EACF,GAAG,GAAA,GACH;IAACP,SAASQ,KAAKM;GAAQ;AAGzB,QAAMQ,8BAA0BhB,8BAC9Ba,uBAAS,CAACC,UAAAA;AACR,QAAIpB,SAASQ,KAAKM,YAAY,iBAAiB;AAC7Cd,eAASQ,KAAKQ,cAAcI,MAAMC,OAAOd;IAC3C;EACF,GAAG,GAAA,GACH;IAACP,SAASQ,KAAKM;GAAQ;AAGzB,SACE,6BAAAS,QAAA,cAACC,gCAAUC,SAAO;IAACC,SAAAA;IAAQzB;IAAY0B,YAAW;KAEhD,6BAAAJ,QAAA,cAACK,wBAAQC,MAAI,MACX,6BAAAN,QAAA,cAACO,uBAAOD,MAAI;IAACtB,OAAOP,SAASQ,KAAKM;IAASiB,eAAe1B;KACxD,6BAAAkB,QAAA,cAACK,wBAAQI,QAAM;IAACC,SAAAA;KACd,6BAAAV,QAAA,cAACO,uBAAOI,eAAa,IAAA,CAAA,GAEvB,6BAAAX,QAAA,cAACO,uBAAOK,QAAM,MACZ,6BAAAZ,QAAA,cAACO,uBAAOL,SAAO,MACb,6BAAAF,QAAA,cAACO,uBAAOM,UAAQ,MACbC,oCAAcC,IAAI,CAAC9B,SAClB,6BAAAe,QAAA,cAACO,uBAAOS,QAAM;IAACC,KAAKhC;IAAMD,OAAOC;KAC9BA,IAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,GAOZR,SAASQ,KAAKM,YAAY,qBACzB,6BAAAS,QAAA,cAACkB,sBAAMZ,MAAI,MACT,6BAAAN,QAAA,cAACkB,sBAAMC,WAAS;IACdC,aAAazC,EAAE,sBAAA;IACf0C,cAAc5C,SAASQ,KAAKO;IAC5B8B,UAAU3B;OAIflB,SAASQ,KAAKM,YAAY,mBACzB,6BAAAS,QAAA,cAACkB,sBAAMZ,MAAI,MACT,6BAAAN,QAAA,cAACkB,sBAAMC,WAAS;IACdC,aAAazC,EAAE,yBAAA;IACf0C,cAAc5C,SAASQ,KAAKQ;IAC5B6B,UAAUvB;QAKlB,6BAAAC,QAAA,cAACuB,sCAAAA;IAAe9C;;AAGtB;AAEA,IAAA,4BAAeD;",
6
+ "names": ["TemplateContainer", "template", "role", "t", "useTranslation", "ASSISTANT_PLUGIN", "handleKindChange", "useCallback", "value", "kind", "Match", "type", "pipe", "withReturnType", "when", "include", "typename", "description", "orElse", "handleTypenameChange", "debounce", "event", "target", "handleDescriptionChange", "React", "StackItem", "Content", "toolbar", "classNames", "Toolbar", "Root", "Select", "onValueChange", "Button", "asChild", "TriggerButton", "Portal", "Viewport", "TemplateKinds", "map", "Option", "key", "Input", "TextInput", "placeholder", "defaultValue", "onChange", "TemplateEditor"]
7
+ }
@@ -16,13 +16,14 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var ai_client_YANJEPO3_exports = {};
20
- __export(ai_client_YANJEPO3_exports, {
19
+ var ai_client_5ESLYXAV_exports = {};
20
+ __export(ai_client_5ESLYXAV_exports, {
21
21
  default: () => ai_client_default
22
22
  });
23
- module.exports = __toCommonJS(ai_client_YANJEPO3_exports);
24
- var import_chunk_ZGH6F5YA = require("./chunk-ZGH6F5YA.cjs");
25
- var import_chunk_GNPXCHFT = require("./chunk-GNPXCHFT.cjs");
23
+ module.exports = __toCommonJS(ai_client_5ESLYXAV_exports);
24
+ var import_chunk_VRXFIS4X = require("./chunk-VRXFIS4X.cjs");
25
+ var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
26
+ var import_signals_core = require("@preact/signals-core");
26
27
  var import_app_framework = require("@dxos/app-framework");
27
28
  var import_assistant = require("@dxos/assistant");
28
29
  var import_plugin_client = require("@dxos/plugin-client");
@@ -30,9 +31,19 @@ var DEFAULT_AI_SERVICE_URL = "http://localhost:8788";
30
31
  var ai_client_default = (context) => {
31
32
  const client = context.requestCapability(import_plugin_client.ClientCapabilities.Client);
32
33
  const endpoint = client.config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL;
33
- const aiClient = new import_assistant.AIServiceClientImpl({
34
+ const ai = (0, import_signals_core.signal)(new import_assistant.AIServiceEdgeClient({
34
35
  endpoint
36
+ }));
37
+ const unsubscribe = (0, import_signals_core.effect)(() => {
38
+ const settings = context.requestCapability(import_app_framework.Capabilities.SettingsStore).getStore(import_chunk_U6J2GO7I.ASSISTANT_PLUGIN)?.value;
39
+ if (settings?.llmProvider === "ollama") {
40
+ ai.value = new import_assistant.OllamaClient();
41
+ } else {
42
+ ai.value = new import_assistant.AIServiceEdgeClient({
43
+ endpoint
44
+ });
45
+ }
35
46
  });
36
- return (0, import_app_framework.contributes)(import_chunk_ZGH6F5YA.AssistantCapabilities.AiClient, aiClient);
47
+ return (0, import_app_framework.contributes)(import_chunk_VRXFIS4X.AssistantCapabilities.AiClient, ai, () => unsubscribe());
37
48
  };
38
- //# sourceMappingURL=ai-client-YANJEPO3.cjs.map
49
+ //# sourceMappingURL=ai-client-5ESLYXAV.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/ai-client.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { effect, signal } from '@preact/signals-core';\n\nimport { Capabilities, contributes, type PluginsContext } from '@dxos/app-framework';\nimport { type AIServiceClient, AIServiceEdgeClient, OllamaClient } from '@dxos/assistant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { AssistantCapabilities } from './capabilities';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps } from '../types';\n\n// TODO(wittjosiah): Factor out.\nconst DEFAULT_AI_SERVICE_URL = 'http://localhost:8788';\n\nexport default (context: PluginsContext) => {\n const client = context.requestCapability(ClientCapabilities.Client);\n const endpoint = client.config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL;\n\n const ai = signal<AIServiceClient>(new AIServiceEdgeClient({ endpoint }));\n\n const unsubscribe = effect(() => {\n // TODO(burdon): Could be undefined.\n const settings = context\n .requestCapability(Capabilities.SettingsStore)\n .getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n if (settings?.llmProvider === 'ollama') {\n ai.value = new OllamaClient();\n } else {\n ai.value = new AIServiceEdgeClient({ endpoint });\n }\n });\n\n return contributes(AssistantCapabilities.AiClient, ai, () => unsubscribe());\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAIA,0BAA+B;AAE/B,2BAA+D;AAC/D,uBAAwE;AACxE,2BAAmC;AAOnC,IAAMA,yBAAyB;AAE/B,IAAA,oBAAe,CAACC,YAAAA;AACd,QAAMC,SAASD,QAAQE,kBAAkBC,wCAAmBC,MAAM;AAClE,QAAMC,WAAWJ,OAAOK,OAAOC,OAAOC,SAASC,UAAUC,IAAIC,UAAUZ;AAEvE,QAAMW,SAAKE,4BAAwB,IAAIC,qCAAoB;IAAER;EAAS,CAAA,CAAA;AAEtE,QAAMS,kBAAcC,4BAAO,MAAA;AAEzB,UAAMC,WAAWhB,QACdE,kBAAkBe,kCAAaC,aAAa,EAC5CC,SAAiCC,sCAAAA,GAAmBC;AAEvD,QAAIL,UAAUM,gBAAgB,UAAU;AACtCZ,SAAGW,QAAQ,IAAIE,8BAAAA;IACjB,OAAO;AACLb,SAAGW,QAAQ,IAAIR,qCAAoB;QAAER;MAAS,CAAA;IAChD;EACF,CAAA;AAEA,aAAOmB,kCAAYC,4CAAsBC,UAAUhB,IAAI,MAAMI,YAAAA,CAAAA;AAC/D;",
6
+ "names": ["DEFAULT_AI_SERVICE_URL", "context", "client", "requestCapability", "ClientCapabilities", "Client", "endpoint", "config", "values", "runtime", "services", "ai", "server", "signal", "AIServiceEdgeClient", "unsubscribe", "effect", "settings", "Capabilities", "SettingsStore", "getStore", "ASSISTANT_PLUGIN", "value", "llmProvider", "OllamaClient", "contributes", "AssistantCapabilities", "AiClient"]
7
+ }
@@ -16,24 +16,24 @@ var __copyProps = (to, from, except, desc) => {
16
16
  return to;
17
17
  };
18
18
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
- var app_graph_builder_D7SHQTZS_exports = {};
20
- __export(app_graph_builder_D7SHQTZS_exports, {
19
+ var app_graph_builder_3P6WSON2_exports = {};
20
+ __export(app_graph_builder_3P6WSON2_exports, {
21
21
  default: () => app_graph_builder_default
22
22
  });
23
- module.exports = __toCommonJS(app_graph_builder_D7SHQTZS_exports);
24
- var import_chunk_37GI4NYH = require("./chunk-37GI4NYH.cjs");
25
- var import_chunk_GNPXCHFT = require("./chunk-GNPXCHFT.cjs");
23
+ module.exports = __toCommonJS(app_graph_builder_3P6WSON2_exports);
24
+ var import_chunk_KLSNCP34 = require("./chunk-KLSNCP34.cjs");
25
+ var import_chunk_U6J2GO7I = require("./chunk-U6J2GO7I.cjs");
26
26
  var import_app_framework = require("@dxos/app-framework");
27
27
  var import_invariant = require("@dxos/invariant");
28
- var import_log = require("@dxos/log");
29
28
  var import_plugin_client = require("@dxos/plugin-client");
30
29
  var import_plugin_graph = require("@dxos/plugin-graph");
30
+ var import_plugin_space = require("@dxos/plugin-space");
31
31
  var import_types = require("@dxos/plugin-space/types");
32
32
  var import_echo = require("@dxos/react-client/echo");
33
33
  var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-assistant/src/capabilities/app-graph-builder.ts";
34
34
  var app_graph_builder_default = (context) => (0, import_app_framework.contributes)(import_app_framework.Capabilities.AppGraphBuilder, [
35
35
  (0, import_plugin_graph.createExtension)({
36
- id: `${import_chunk_GNPXCHFT.ASSISTANT_PLUGIN}/assistant`,
36
+ id: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/assistant`,
37
37
  filter: (node) => node.id === import_plugin_graph.ROOT_ID,
38
38
  actions: () => [
39
39
  {
@@ -57,17 +57,11 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
57
57
  chat = await getOrCreateChat(dispatch, space);
58
58
  }
59
59
  if (!chat) {
60
- import_log.log.warn("no chat found", void 0, {
61
- F: __dxlog_file,
62
- L: 54,
63
- S: void 0,
64
- C: (f, a) => f(...a)
65
- });
66
60
  return;
67
61
  }
68
62
  await dispatch((0, import_app_framework.createIntent)(import_app_framework.LayoutAction.UpdateDialog, {
69
63
  part: "dialog",
70
- subject: import_chunk_GNPXCHFT.ASSISTANT_DIALOG,
64
+ subject: import_chunk_U6J2GO7I.ASSISTANT_DIALOG,
71
65
  options: {
72
66
  state: true,
73
67
  blockAlign: "end",
@@ -81,7 +75,7 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
81
75
  label: [
82
76
  "open assistant label",
83
77
  {
84
- ns: import_chunk_GNPXCHFT.ASSISTANT_PLUGIN
78
+ ns: import_chunk_U6J2GO7I.ASSISTANT_PLUGIN
85
79
  }
86
80
  ],
87
81
  icon: "ph--chat-centered-text--regular",
@@ -94,19 +88,68 @@ var app_graph_builder_default = (context) => (0, import_app_framework.contribute
94
88
  }
95
89
  }
96
90
  ]
91
+ }),
92
+ (0, import_plugin_graph.createExtension)({
93
+ id: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/root`,
94
+ filter: (node) => (0, import_echo.isSpace)(node.data),
95
+ connector: ({ node }) => {
96
+ const templates = (0, import_plugin_space.memoizeQuery)(node.data, import_echo.Filter.schema(import_chunk_KLSNCP34.TemplateType));
97
+ return templates.length > 0 ? [
98
+ {
99
+ id: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/templates`,
100
+ type: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/templates`,
101
+ data: null,
102
+ properties: {
103
+ label: [
104
+ "templates label",
105
+ {
106
+ ns: import_chunk_U6J2GO7I.ASSISTANT_PLUGIN
107
+ }
108
+ ],
109
+ icon: "ph--file-code--regular",
110
+ space: node.data
111
+ }
112
+ }
113
+ ] : [];
114
+ }
115
+ }),
116
+ (0, import_plugin_graph.createExtension)({
117
+ id: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/templates`,
118
+ filter: (node) => node.id === `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/templates`,
119
+ connector: ({ node }) => {
120
+ const templates = (0, import_plugin_space.memoizeQuery)(node.properties.space, import_echo.Filter.schema(import_chunk_KLSNCP34.TemplateType));
121
+ return templates.toSorted((a, b) => {
122
+ const nameA = a.name ?? "";
123
+ const nameB = b.name ?? "";
124
+ return nameA.localeCompare(nameB);
125
+ }).map((template) => ({
126
+ id: (0, import_echo.fullyQualifiedId)(template),
127
+ type: `${import_chunk_U6J2GO7I.ASSISTANT_PLUGIN}/template`,
128
+ data: template,
129
+ properties: {
130
+ label: template.name ?? [
131
+ "template title placeholder",
132
+ {
133
+ ns: import_chunk_U6J2GO7I.ASSISTANT_PLUGIN
134
+ }
135
+ ],
136
+ icon: "ph--file-code--regular"
137
+ }
138
+ }));
139
+ }
97
140
  })
98
141
  ]);
99
142
  var getOrCreateChat = async (dispatch, space) => {
100
- const { objects } = await space.db.query(import_echo.Filter.schema(import_chunk_37GI4NYH.AIChatType)).run();
143
+ const { objects } = await space.db.query(import_echo.Filter.schema(import_chunk_KLSNCP34.AIChatType)).run();
101
144
  if (objects.length > 0) {
102
145
  return objects[objects.length - 1];
103
146
  }
104
- const { data } = await dispatch((0, import_app_framework.createIntent)(import_chunk_37GI4NYH.AssistantAction.CreateChat, {
147
+ const { data } = await dispatch((0, import_app_framework.createIntent)(import_chunk_KLSNCP34.AssistantAction.CreateChat, {
105
148
  spaceId: space.id
106
149
  }));
107
- (0, import_invariant.invariant)(data?.object instanceof import_chunk_37GI4NYH.AIChatType, void 0, {
150
+ (0, import_invariant.invariant)(data?.object instanceof import_chunk_KLSNCP34.AIChatType, void 0, {
108
151
  F: __dxlog_file,
109
- L: 97,
152
+ L: 141,
110
153
  S: void 0,
111
154
  A: [
112
155
  "data?.object instanceof AIChatType",
@@ -119,4 +162,4 @@ var getOrCreateChat = async (dispatch, space) => {
119
162
  }));
120
163
  return data.object;
121
164
  };
122
- //# sourceMappingURL=app-graph-builder-D7SHQTZS.cjs.map
165
+ //# sourceMappingURL=app-graph-builder-3P6WSON2.cjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n LayoutAction,\n type PromiseIntentDispatcher,\n type PluginsContext,\n} from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, type Node, ROOT_ID } from '@dxos/plugin-graph';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { type Space, Filter, fullyQualifiedId, getSpace, isSpace } from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, ASSISTANT_PLUGIN } from '../meta';\nimport { AIChatType, AssistantAction, TemplateType } from '../types';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${ASSISTANT_PLUGIN}/assistant`,\n filter: (node): node is Node<null> => node.id === ROOT_ID,\n actions: () => [\n {\n id: `${LayoutAction.UpdateDialog._tag}/assistant/open`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const client = context.requestCapability(ClientCapabilities.Client);\n const layout = context.requestCapability(Capabilities.Layout);\n const { graph } = context.requestCapability(Capabilities.AppGraph);\n\n // TODO(burdon): Get space from workspace.\n // TODO(burdon): If need to create chat, then add to dispatch stack below.\n let chat: AIChatType | undefined;\n if (layout.active.length > 0) {\n const node = graph.findNode(layout.active[0]);\n if (node) {\n const space = getSpace(node.data);\n if (space) {\n chat = await getOrCreateChat(dispatch, space);\n }\n }\n } else {\n const space = client.spaces.default;\n chat = await getOrCreateChat(dispatch, space);\n }\n\n if (!chat) {\n return;\n }\n\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: ASSISTANT_DIALOG,\n options: {\n state: true,\n blockAlign: 'end',\n props: {\n chat,\n },\n },\n }),\n );\n },\n properties: {\n label: ['open assistant label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--chat-centered-text--regular',\n disposition: 'pin-end',\n position: 'hoist',\n keyBinding: {\n macos: 'shift+meta+k',\n windows: 'shift+ctrl+k',\n },\n },\n },\n ],\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/root`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n connector: ({ node }) => {\n const templates = memoizeQuery(node.data, Filter.schema(TemplateType));\n return templates.length > 0\n ? [\n {\n id: `${ASSISTANT_PLUGIN}/templates`,\n type: `${ASSISTANT_PLUGIN}/templates`,\n data: null,\n properties: {\n label: ['templates label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--file-code--regular',\n space: node.data,\n },\n },\n ]\n : [];\n },\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/templates`,\n filter: (node): node is Node<null, { space: Space }> => node.id === `${ASSISTANT_PLUGIN}/templates`,\n connector: ({ node }) => {\n const templates = memoizeQuery(node.properties.space, Filter.schema(TemplateType));\n return templates\n .toSorted((a, b) => {\n const nameA = a.name ?? '';\n const nameB = b.name ?? '';\n return nameA.localeCompare(nameB);\n })\n .map((template) => ({\n id: fullyQualifiedId(template),\n type: `${ASSISTANT_PLUGIN}/template`,\n data: template,\n properties: {\n label: template.name ?? ['template title placeholder', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--file-code--regular',\n },\n }));\n },\n }),\n ]);\n\n// TODO(burdon): Factor out.\nconst getOrCreateChat = async (dispatch: PromiseIntentDispatcher, space: Space): Promise<AIChatType | undefined> => {\n const { objects } = await space.db.query(Filter.schema(AIChatType)).run();\n // console.log('objects', JSON.stringify(objects, null, 2));\n if (objects.length > 0) {\n // TODO(burdon): Is this the most recent?\n return objects[objects.length - 1];\n }\n\n const { data } = await dispatch(createIntent(AssistantAction.CreateChat, { spaceId: space.id }));\n invariant(data?.object instanceof AIChatType);\n await dispatch(createIntent(SpaceAction.AddObject, { target: space, object: data.object }));\n return data.object;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "ASSISTANT_PLUGIN", "filter", "node", "ROOT_ID", "actions", "LayoutAction", "UpdateDialog", "_tag", "data", "dispatchPromise", "dispatch", "requestCapability", "IntentDispatcher", "client", "ClientCapabilities", "Client", "layout", "Layout", "graph", "AppGraph", "chat", "active", "length", "findNode", "space", "getSpace", "getOrCreateChat", "spaces", "default", "createIntent", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "properties", "label", "ns", "icon", "disposition", "position", "keyBinding", "macos", "windows", "isSpace", "connector", "templates", "memoizeQuery", "Filter", "schema", "TemplateType", "type", "toSorted", "a", "b", "nameA", "name", "nameB", "localeCompare", "map", "template", "fullyQualifiedId", "objects", "db", "query", "AIChatType", "run", "AssistantAction", "CreateChat", "spaceId", "invariant", "object", "SpaceAction", "AddObject", "target"]
7
+ }