@dxos/plugin-assistant 0.8.4-main.f9ba587 → 0.8.4-main.fd6878d

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 (405) hide show
  1. package/dist/lib/browser/{TemplateContainer-6ZGGH5T4.mjs → BlueprintContainer-H7H4BQ2C.mjs} +10 -9
  2. package/dist/lib/browser/BlueprintContainer-H7H4BQ2C.mjs.map +7 -0
  3. package/dist/lib/browser/{ChatContainer-6XNB5NEI.mjs → ChatContainer-OUVSX5V5.mjs} +36 -17
  4. package/dist/lib/browser/ChatContainer-OUVSX5V5.mjs.map +7 -0
  5. package/dist/lib/browser/{ChatDialog-IMWPRXTO.mjs → ChatDialog-P4FLEOHG.mjs} +22 -10
  6. package/dist/lib/browser/ChatDialog-P4FLEOHG.mjs.map +7 -0
  7. package/dist/lib/browser/SequenceContainer-627OQ557.mjs +163 -0
  8. package/dist/lib/browser/SequenceContainer-627OQ557.mjs.map +7 -0
  9. package/dist/lib/browser/ai-service-7KJ5LXBT.mjs +22 -0
  10. package/dist/lib/browser/ai-service-7KJ5LXBT.mjs.map +7 -0
  11. package/dist/lib/browser/{app-graph-builder-UJ5NHRGK.mjs → app-graph-builder-AVHHQ3KV.mjs} +16 -73
  12. package/dist/lib/browser/app-graph-builder-AVHHQ3KV.mjs.map +7 -0
  13. package/dist/lib/browser/blueprint-definition-CMGIZAOW.mjs +146 -0
  14. package/dist/lib/browser/blueprint-definition-CMGIZAOW.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-BRLHDHOF.mjs +244 -0
  16. package/dist/lib/browser/chunk-BRLHDHOF.mjs.map +7 -0
  17. package/dist/lib/browser/chunk-HRLMD35M.mjs +191 -0
  18. package/dist/lib/browser/chunk-HRLMD35M.mjs.map +7 -0
  19. package/dist/lib/browser/chunk-J5LGTIGS.mjs +10 -0
  20. package/dist/lib/browser/chunk-J5LGTIGS.mjs.map +7 -0
  21. package/dist/lib/browser/{chunk-44HZKIAW.mjs → chunk-NZDCKQ6W.mjs} +32 -30
  22. package/dist/lib/browser/chunk-NZDCKQ6W.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-NTBGTFTV.mjs → chunk-QB7OVS6Z.mjs} +3 -2
  24. package/dist/lib/browser/chunk-QB7OVS6Z.mjs.map +7 -0
  25. package/dist/lib/browser/{chunk-TQ3QW3HJ.mjs → chunk-VEBVAHNM.mjs} +1041 -882
  26. package/dist/lib/browser/chunk-VEBVAHNM.mjs.map +7 -0
  27. package/dist/lib/browser/edge-model-resolver-2HB4PCWH.mjs +24 -0
  28. package/dist/lib/browser/edge-model-resolver-2HB4PCWH.mjs.map +7 -0
  29. package/dist/lib/browser/index.mjs +116 -88
  30. package/dist/lib/browser/index.mjs.map +3 -3
  31. package/dist/lib/browser/intent-resolver-MVOIEJXZ.mjs +81 -0
  32. package/dist/lib/browser/intent-resolver-MVOIEJXZ.mjs.map +7 -0
  33. package/dist/lib/browser/meta.json +1 -1
  34. package/dist/lib/browser/{react-surface-TMF7JJA4.mjs → react-surface-4HXS3YLT.mjs} +52 -45
  35. package/dist/lib/browser/react-surface-4HXS3YLT.mjs.map +7 -0
  36. package/dist/lib/browser/{settings-N4HEXADL.mjs → settings-G2EZXMWT.mjs} +5 -4
  37. package/dist/lib/{node-esm/settings-WQ76EG6O.mjs.map → browser/settings-G2EZXMWT.mjs.map} +1 -1
  38. package/dist/lib/browser/toolkit-IW4FBLLB.mjs +105 -0
  39. package/dist/lib/browser/toolkit-IW4FBLLB.mjs.map +7 -0
  40. package/dist/lib/browser/types/index.mjs +6 -13
  41. package/dist/lib/node-esm/{TemplateContainer-6KRNEMVE.mjs → BlueprintContainer-VH4EE4CM.mjs} +10 -9
  42. package/dist/lib/node-esm/BlueprintContainer-VH4EE4CM.mjs.map +7 -0
  43. package/dist/lib/node-esm/{ChatContainer-VOLG7J6N.mjs → ChatContainer-D5FABDNE.mjs} +36 -17
  44. package/dist/lib/node-esm/ChatContainer-D5FABDNE.mjs.map +7 -0
  45. package/dist/lib/node-esm/{ChatDialog-B2XNUNRM.mjs → ChatDialog-NKWVXHJP.mjs} +22 -10
  46. package/dist/lib/node-esm/ChatDialog-NKWVXHJP.mjs.map +7 -0
  47. package/dist/lib/node-esm/SequenceContainer-EQ5NP2PG.mjs +164 -0
  48. package/dist/lib/node-esm/SequenceContainer-EQ5NP2PG.mjs.map +7 -0
  49. package/dist/lib/node-esm/ai-service-LDD32477.mjs +23 -0
  50. package/dist/lib/node-esm/ai-service-LDD32477.mjs.map +7 -0
  51. package/dist/lib/node-esm/{app-graph-builder-MEQ5CYNI.mjs → app-graph-builder-RMOUJMMG.mjs} +16 -73
  52. package/dist/lib/node-esm/app-graph-builder-RMOUJMMG.mjs.map +7 -0
  53. package/dist/lib/node-esm/blueprint-definition-AEWYMW6I.mjs +147 -0
  54. package/dist/lib/node-esm/blueprint-definition-AEWYMW6I.mjs.map +7 -0
  55. package/dist/lib/node-esm/{chunk-D3HTVK5D.mjs → chunk-3SOC5GOP.mjs} +1041 -882
  56. package/dist/lib/node-esm/chunk-3SOC5GOP.mjs.map +7 -0
  57. package/dist/lib/node-esm/chunk-F7RXCX5Y.mjs +192 -0
  58. package/dist/lib/node-esm/chunk-F7RXCX5Y.mjs.map +7 -0
  59. package/dist/lib/node-esm/{chunk-VESVUAOS.mjs → chunk-GAWXJ7K5.mjs} +32 -30
  60. package/dist/lib/node-esm/chunk-GAWXJ7K5.mjs.map +7 -0
  61. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  62. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  63. package/dist/lib/node-esm/chunk-RD755HN3.mjs +245 -0
  64. package/dist/lib/node-esm/chunk-RD755HN3.mjs.map +7 -0
  65. package/dist/lib/node-esm/{chunk-E6V2RUQ2.mjs → chunk-X6AANUHZ.mjs} +3 -2
  66. package/dist/lib/node-esm/chunk-X6AANUHZ.mjs.map +7 -0
  67. package/dist/lib/node-esm/edge-model-resolver-UDDR2IA6.mjs +25 -0
  68. package/dist/lib/node-esm/edge-model-resolver-UDDR2IA6.mjs.map +7 -0
  69. package/dist/lib/node-esm/index.mjs +116 -88
  70. package/dist/lib/node-esm/index.mjs.map +3 -3
  71. package/dist/lib/node-esm/intent-resolver-DTDNCX3C.mjs +82 -0
  72. package/dist/lib/node-esm/intent-resolver-DTDNCX3C.mjs.map +7 -0
  73. package/dist/lib/node-esm/meta.json +1 -1
  74. package/dist/lib/node-esm/{react-surface-6XL6SWL2.mjs → react-surface-V6JNEZVO.mjs} +52 -45
  75. package/dist/lib/node-esm/react-surface-V6JNEZVO.mjs.map +7 -0
  76. package/dist/lib/node-esm/{settings-WQ76EG6O.mjs → settings-AIP5FOJG.mjs} +5 -4
  77. package/dist/lib/{browser/settings-N4HEXADL.mjs.map → node-esm/settings-AIP5FOJG.mjs.map} +1 -1
  78. package/dist/lib/node-esm/toolkit-2VNUL77B.mjs +106 -0
  79. package/dist/lib/node-esm/toolkit-2VNUL77B.mjs.map +7 -0
  80. package/dist/lib/node-esm/types/index.mjs +6 -13
  81. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/ai-service.d.ts +5 -0
  83. package/dist/types/src/capabilities/ai-service.d.ts.map +1 -0
  84. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  85. package/dist/types/src/capabilities/blueprint-definition.d.ts +3 -0
  86. package/dist/types/src/capabilities/blueprint-definition.d.ts.map +1 -0
  87. package/dist/types/src/capabilities/capabilities.d.ts +8 -3
  88. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  89. package/dist/types/src/capabilities/edge-model-resolver.d.ts +5 -0
  90. package/dist/types/src/capabilities/edge-model-resolver.d.ts.map +1 -0
  91. package/dist/types/src/capabilities/index.d.ts +6 -3
  92. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  93. package/dist/types/src/capabilities/intent-resolver.d.ts +2 -2
  94. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  95. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  96. package/dist/types/src/capabilities/toolkit.d.ts +5 -0
  97. package/dist/types/src/capabilities/toolkit.d.ts.map +1 -0
  98. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  99. package/dist/types/src/components/BlueprintContainer.d.ts +8 -0
  100. package/dist/types/src/components/BlueprintContainer.d.ts.map +1 -0
  101. package/dist/types/src/components/Chat/Chat.d.ts +16 -13
  102. package/dist/types/src/components/Chat/Chat.d.ts.map +1 -1
  103. package/dist/types/src/components/Chat/events.d.ts +30 -0
  104. package/dist/types/src/components/Chat/events.d.ts.map +1 -0
  105. package/dist/types/src/components/Chat/index.d.ts +1 -0
  106. package/dist/types/src/components/Chat/index.d.ts.map +1 -1
  107. package/dist/types/src/components/ChatContainer.d.ts +5 -4
  108. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  109. package/dist/types/src/components/ChatDialog.d.ts.map +1 -1
  110. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts +6 -5
  111. package/dist/types/src/components/ChatPrompt/ChatActions.d.ts.map +1 -1
  112. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts +13 -0
  113. package/dist/types/src/components/ChatPrompt/ChatOptions.d.ts.map +1 -0
  114. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts +11 -0
  115. package/dist/types/src/components/ChatPrompt/ChatPresets.d.ts.map +1 -0
  116. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts +3 -3
  117. package/dist/types/src/components/ChatPrompt/ChatReferences.d.ts.map +1 -1
  118. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts +2 -1
  119. package/dist/types/src/components/ChatPrompt/ChatStatusIndicator.d.ts.map +1 -1
  120. package/dist/types/src/components/ChatPrompt/index.d.ts +2 -2
  121. package/dist/types/src/components/ChatPrompt/index.d.ts.map +1 -1
  122. package/dist/types/src/components/ChatThread/ChatMessage.d.ts +10 -10
  123. package/dist/types/src/components/ChatThread/ChatMessage.d.ts.map +1 -1
  124. package/dist/types/src/components/ChatThread/ChatThread.d.ts +6 -12
  125. package/dist/types/src/components/ChatThread/ChatThread.d.ts.map +1 -1
  126. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +54 -60
  127. package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
  128. package/dist/types/src/components/ChatThread/Link.d.ts +9 -0
  129. package/dist/types/src/components/ChatThread/Link.d.ts.map +1 -0
  130. package/dist/types/src/components/ChatThread/ToolBlock.d.ts +4 -3
  131. package/dist/types/src/components/ChatThread/ToolBlock.d.ts.map +1 -1
  132. package/dist/types/src/components/ChatThread/reducer.d.ts +4 -4
  133. package/dist/types/src/components/ChatThread/reducer.d.ts.map +1 -1
  134. package/dist/types/src/components/PromptSettings.d.ts +2 -2
  135. package/dist/types/src/components/PromptSettings.d.ts.map +1 -1
  136. package/dist/types/src/components/SequenceContainer.d.ts +1 -2
  137. package/dist/types/src/components/SequenceContainer.d.ts.map +1 -1
  138. package/dist/types/src/components/SequenceEditor/SequenceEditor.d.ts.map +1 -1
  139. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts +1 -1
  140. package/dist/types/src/components/SequenceEditor/SequenceEditor.stories.d.ts.map +1 -1
  141. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +4 -3
  142. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  143. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +2 -2
  144. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +5 -4
  146. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  147. package/dist/types/src/components/TemplateEditor/TemplateForm.stories.d.ts.map +1 -1
  148. package/dist/types/src/components/Timeline/Timeline.d.ts +24 -0
  149. package/dist/types/src/components/Timeline/Timeline.d.ts.map +1 -0
  150. package/dist/types/src/components/Timeline/Timeline.stories.d.ts +9 -0
  151. package/dist/types/src/components/Timeline/Timeline.stories.d.ts.map +1 -0
  152. package/dist/types/src/components/Timeline/index.d.ts +2 -0
  153. package/dist/types/src/components/Timeline/index.d.ts.map +1 -0
  154. package/dist/types/src/components/Toolbox/Toolbox.d.ts +6 -9
  155. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  156. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts +1 -2
  157. package/dist/types/src/components/Toolbox/Toolbox.stories.d.ts.map +1 -1
  158. package/dist/types/src/components/index.d.ts +4 -3
  159. package/dist/types/src/components/index.d.ts.map +1 -1
  160. package/dist/types/src/events.d.ts +1 -1
  161. package/dist/types/src/events.d.ts.map +1 -1
  162. package/dist/types/src/functions/analysis.d.ts +5 -0
  163. package/dist/types/src/functions/analysis.d.ts.map +1 -0
  164. package/dist/types/src/functions/index.d.ts +4 -0
  165. package/dist/types/src/functions/index.d.ts.map +1 -0
  166. package/dist/types/src/functions/list.d.ts +10 -0
  167. package/dist/types/src/functions/list.d.ts.map +1 -0
  168. package/dist/types/src/functions/load.d.ts +8 -0
  169. package/dist/types/src/functions/load.d.ts.map +1 -0
  170. package/dist/types/src/hooks/chat-processor.d.ts +34 -44
  171. package/dist/types/src/hooks/chat-processor.d.ts.map +1 -1
  172. package/dist/types/src/hooks/errors.d.ts +4 -0
  173. package/dist/types/src/hooks/errors.d.ts.map +1 -0
  174. package/dist/types/src/hooks/index.d.ts +8 -4
  175. package/dist/types/src/hooks/index.d.ts.map +1 -1
  176. package/dist/types/src/hooks/presets.d.ts +13 -0
  177. package/dist/types/src/hooks/presets.d.ts.map +1 -0
  178. package/dist/types/src/hooks/useBlueprintRegistry.d.ts +21 -0
  179. package/dist/types/src/hooks/useBlueprintRegistry.d.ts.map +1 -0
  180. package/dist/types/src/hooks/useChatProcessor.d.ts +9 -18
  181. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  182. package/dist/types/src/hooks/useChatServices.d.ts +13 -0
  183. package/dist/types/src/hooks/useChatServices.d.ts.map +1 -0
  184. package/dist/types/src/hooks/useOnline.d.ts +3 -0
  185. package/dist/types/src/hooks/useOnline.d.ts.map +1 -0
  186. package/dist/types/src/hooks/usePresets.d.ts +7 -0
  187. package/dist/types/src/hooks/usePresets.d.ts.map +1 -0
  188. package/dist/types/src/hooks/useReferencesProvider.d.ts +7 -0
  189. package/dist/types/src/hooks/useReferencesProvider.d.ts.map +1 -0
  190. package/dist/types/src/hooks/useResolveRef.d.ts +4 -0
  191. package/dist/types/src/hooks/useResolveRef.d.ts.map +1 -0
  192. package/dist/types/src/parser/filter-generator.d.ts.map +1 -1
  193. package/dist/types/src/parser/index.d.ts +1 -1
  194. package/dist/types/src/parser/index.d.ts.map +1 -1
  195. package/dist/types/src/parser/query-parser.d.ts.map +1 -1
  196. package/dist/types/src/stories/Chat.stories.d.ts +87 -18
  197. package/dist/types/src/stories/Chat.stories.d.ts.map +1 -1
  198. package/dist/types/src/stories/components/BlueprintContainer.d.ts +5 -0
  199. package/dist/types/src/stories/components/BlueprintContainer.d.ts.map +1 -0
  200. package/dist/types/src/stories/components/ChatContainer.d.ts +5 -0
  201. package/dist/types/src/stories/components/ChatContainer.d.ts.map +1 -0
  202. package/dist/types/src/stories/components/GraphContainer.d.ts +6 -0
  203. package/dist/types/src/stories/components/GraphContainer.d.ts.map +1 -0
  204. package/dist/types/src/stories/components/LoggingContainer.d.ts +5 -0
  205. package/dist/types/src/stories/components/LoggingContainer.d.ts.map +1 -0
  206. package/dist/types/src/stories/components/SurfaceContainer.d.ts +8 -0
  207. package/dist/types/src/stories/components/SurfaceContainer.d.ts.map +1 -0
  208. package/dist/types/src/stories/components/TasksContainer.d.ts +5 -0
  209. package/dist/types/src/stories/components/TasksContainer.d.ts.map +1 -0
  210. package/dist/types/src/stories/components/index.d.ts +8 -0
  211. package/dist/types/src/stories/components/index.d.ts.map +1 -0
  212. package/dist/types/src/stories/components/types.d.ts +7 -0
  213. package/dist/types/src/stories/components/types.d.ts.map +1 -0
  214. package/dist/types/src/stories/hooks/index.d.ts +3 -0
  215. package/dist/types/src/stories/hooks/index.d.ts.map +1 -0
  216. package/dist/types/src/stories/hooks/useFlush.d.ts +6 -0
  217. package/dist/types/src/stories/hooks/useFlush.d.ts.map +1 -0
  218. package/dist/types/src/stories/hooks/useMatcherExtension.d.ts +3 -0
  219. package/dist/types/src/stories/hooks/useMatcherExtension.d.ts.map +1 -0
  220. package/dist/types/src/stories/testing/data.d.ts +142 -0
  221. package/dist/types/src/stories/testing/data.d.ts.map +1 -0
  222. package/dist/types/src/stories/testing/index.d.ts +3 -0
  223. package/dist/types/src/stories/testing/index.d.ts.map +1 -0
  224. package/dist/types/src/stories/testing/testing.d.ts +26 -0
  225. package/dist/types/src/stories/testing/testing.d.ts.map +1 -0
  226. package/dist/types/src/testing/test-functions.d.ts +5 -2
  227. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  228. package/dist/types/src/testing/test-sequence.d.ts.map +1 -1
  229. package/dist/types/src/tools/function.d.ts.map +1 -1
  230. package/dist/types/src/tools/openapi.d.ts.map +1 -1
  231. package/dist/types/src/translations.d.ts +25 -13
  232. package/dist/types/src/translations.d.ts.map +1 -1
  233. package/dist/types/src/types/Assistant.d.ts +40 -0
  234. package/dist/types/src/types/Assistant.d.ts.map +1 -0
  235. package/dist/types/src/types/AssistantAction.d.ts +90 -0
  236. package/dist/types/src/types/AssistantAction.d.ts.map +1 -0
  237. package/dist/types/src/types/defs.d.ts +2 -0
  238. package/dist/types/src/types/defs.d.ts.map +1 -0
  239. package/dist/types/src/types/index.d.ts +3 -2
  240. package/dist/types/src/types/index.d.ts.map +1 -1
  241. package/dist/types/src/types/service.d.ts +6 -6
  242. package/dist/types/src/types/service.d.ts.map +1 -1
  243. package/dist/types/tsconfig.tsbuildinfo +1 -1
  244. package/package.json +83 -73
  245. package/src/AssistantPlugin.tsx +61 -41
  246. package/src/capabilities/ai-service.ts +28 -0
  247. package/src/capabilities/app-graph-builder.ts +9 -92
  248. package/src/capabilities/blueprint-definition.ts +32 -0
  249. package/src/capabilities/capabilities.ts +11 -3
  250. package/src/capabilities/edge-model-resolver.ts +29 -0
  251. package/src/capabilities/index.ts +6 -3
  252. package/src/capabilities/intent-resolver.ts +39 -11
  253. package/src/capabilities/react-surface.tsx +35 -27
  254. package/src/capabilities/toolkit.ts +106 -0
  255. package/src/components/AssistantSettings/AssistantSettings.tsx +1 -1
  256. package/src/components/BlueprintContainer.tsx +24 -0
  257. package/src/components/Chat/Chat.tsx +148 -95
  258. package/src/components/Chat/events.ts +50 -0
  259. package/src/components/Chat/index.ts +2 -0
  260. package/src/components/ChatContainer.tsx +39 -15
  261. package/src/components/ChatDialog.tsx +10 -7
  262. package/src/components/ChatPrompt/ChatActions.tsx +15 -20
  263. package/src/components/ChatPrompt/ChatOptions.tsx +59 -0
  264. package/src/components/ChatPrompt/ChatPresets.tsx +28 -0
  265. package/src/components/ChatPrompt/ChatReferences.tsx +11 -8
  266. package/src/components/ChatPrompt/ChatStatusIndicator.tsx +17 -4
  267. package/src/components/ChatPrompt/index.ts +2 -3
  268. package/src/components/ChatThread/ChatMessage.tsx +192 -148
  269. package/src/components/ChatThread/ChatThread.stories.tsx +221 -109
  270. package/src/components/ChatThread/ChatThread.tsx +12 -23
  271. package/src/components/ChatThread/Link.tsx +39 -0
  272. package/src/components/ChatThread/ToolBlock.tsx +41 -27
  273. package/src/components/ChatThread/reducer.ts +14 -14
  274. package/src/components/PromptSettings.tsx +41 -43
  275. package/src/components/SequenceContainer.tsx +32 -38
  276. package/src/components/SequenceEditor/SequenceEditor.stories.tsx +3 -2
  277. package/src/components/SequenceEditor/SequenceEditor.tsx +1 -1
  278. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +37 -35
  279. package/src/components/TemplateEditor/TemplateEditor.tsx +39 -23
  280. package/src/components/TemplateEditor/TemplateForm.stories.tsx +23 -16
  281. package/src/components/TemplateEditor/TemplateForm.tsx +50 -55
  282. package/src/components/Timeline/Timeline.stories.tsx +53 -0
  283. package/src/components/Timeline/Timeline.tsx +159 -0
  284. package/src/components/Timeline/index.ts +5 -0
  285. package/src/components/Toolbox/Toolbox.stories.tsx +7 -13
  286. package/src/components/Toolbox/Toolbox.tsx +21 -42
  287. package/src/components/index.ts +2 -5
  288. package/src/events.ts +2 -2
  289. package/src/functions/analysis.ts +20 -0
  290. package/src/functions/index.ts +7 -0
  291. package/src/functions/list.ts +42 -0
  292. package/src/functions/load.ts +43 -0
  293. package/src/hooks/chat-processor.ts +167 -188
  294. package/src/hooks/errors.ts +8 -0
  295. package/src/hooks/index.ts +8 -4
  296. package/src/hooks/presets.ts +53 -0
  297. package/src/hooks/useBlueprintRegistry.ts +79 -0
  298. package/src/hooks/useChatProcessor.ts +81 -0
  299. package/src/hooks/useChatServices.ts +72 -0
  300. package/src/hooks/useOnline.ts +10 -0
  301. package/src/hooks/usePresets.ts +45 -0
  302. package/src/hooks/{useContextProvider.ts → useReferencesProvider.ts} +18 -22
  303. package/src/hooks/useResolveRef.ts +33 -0
  304. package/src/parser/filter-generator.ts +6 -13
  305. package/src/parser/index.ts +1 -1
  306. package/src/parser/query-parser.ts +1 -1
  307. package/src/queue-logger.ts +5 -5
  308. package/src/stories/Chat.stories.tsx +246 -198
  309. package/src/stories/components/BlueprintContainer.tsx +34 -0
  310. package/src/stories/components/ChatContainer.tsx +80 -0
  311. package/src/stories/components/GraphContainer.tsx +118 -0
  312. package/src/stories/components/LoggingContainer.tsx +22 -0
  313. package/src/stories/components/SurfaceContainer.tsx +62 -0
  314. package/src/stories/components/TasksContainer.tsx +51 -0
  315. package/src/stories/components/index.ts +12 -0
  316. package/src/stories/components/types.ts +11 -0
  317. package/src/stories/hooks/index.ts +6 -0
  318. package/src/stories/hooks/useFlush.ts +35 -0
  319. package/src/stories/hooks/useMatcherExtension.ts +45 -0
  320. package/src/stories/testing/data.ts +130 -0
  321. package/src/stories/testing/index.ts +6 -0
  322. package/src/stories/testing/testing.tsx +162 -0
  323. package/src/testing/test-functions.ts +9 -4
  324. package/src/testing/test-sequence.ts +18 -20
  325. package/src/tools/function.ts +4 -1
  326. package/src/tools/openapi.test.ts +10 -8
  327. package/src/tools/openapi.ts +4 -1
  328. package/src/translations.ts +29 -13
  329. package/src/types/Assistant.ts +59 -0
  330. package/src/types/AssistantAction.ts +54 -0
  331. package/src/types/defs.ts +5 -0
  332. package/src/types/index.ts +4 -2
  333. package/dist/lib/browser/ChatContainer-6XNB5NEI.mjs.map +0 -7
  334. package/dist/lib/browser/ChatDialog-IMWPRXTO.mjs.map +0 -7
  335. package/dist/lib/browser/SequenceContainer-6XOYB2RN.mjs +0 -322
  336. package/dist/lib/browser/SequenceContainer-6XOYB2RN.mjs.map +0 -7
  337. package/dist/lib/browser/TemplateContainer-6ZGGH5T4.mjs.map +0 -7
  338. package/dist/lib/browser/ai-client-ML7OQWAO.mjs +0 -39
  339. package/dist/lib/browser/ai-client-ML7OQWAO.mjs.map +0 -7
  340. package/dist/lib/browser/app-graph-builder-UJ5NHRGK.mjs.map +0 -7
  341. package/dist/lib/browser/chunk-44HZKIAW.mjs.map +0 -7
  342. package/dist/lib/browser/chunk-NTBGTFTV.mjs.map +0 -7
  343. package/dist/lib/browser/chunk-OZL4OHTU.mjs +0 -157
  344. package/dist/lib/browser/chunk-OZL4OHTU.mjs.map +0 -7
  345. package/dist/lib/browser/chunk-TQ3QW3HJ.mjs.map +0 -7
  346. package/dist/lib/browser/chunk-TU7UUGWQ.mjs +0 -203
  347. package/dist/lib/browser/chunk-TU7UUGWQ.mjs.map +0 -7
  348. package/dist/lib/browser/chunk-WPZ4UANI.mjs +0 -16
  349. package/dist/lib/browser/chunk-WPZ4UANI.mjs.map +0 -7
  350. package/dist/lib/browser/intent-resolver-LEAPB55Q.mjs +0 -42
  351. package/dist/lib/browser/intent-resolver-LEAPB55Q.mjs.map +0 -7
  352. package/dist/lib/browser/react-surface-TMF7JJA4.mjs.map +0 -7
  353. package/dist/lib/node-esm/ChatContainer-VOLG7J6N.mjs.map +0 -7
  354. package/dist/lib/node-esm/ChatDialog-B2XNUNRM.mjs.map +0 -7
  355. package/dist/lib/node-esm/SequenceContainer-WWG6IMN3.mjs +0 -323
  356. package/dist/lib/node-esm/SequenceContainer-WWG6IMN3.mjs.map +0 -7
  357. package/dist/lib/node-esm/TemplateContainer-6KRNEMVE.mjs.map +0 -7
  358. package/dist/lib/node-esm/ai-client-2FQ434CT.mjs +0 -40
  359. package/dist/lib/node-esm/ai-client-2FQ434CT.mjs.map +0 -7
  360. package/dist/lib/node-esm/app-graph-builder-MEQ5CYNI.mjs.map +0 -7
  361. package/dist/lib/node-esm/chunk-D3HTVK5D.mjs.map +0 -7
  362. package/dist/lib/node-esm/chunk-E6V2RUQ2.mjs.map +0 -7
  363. package/dist/lib/node-esm/chunk-HVMVHP4R.mjs +0 -158
  364. package/dist/lib/node-esm/chunk-HVMVHP4R.mjs.map +0 -7
  365. package/dist/lib/node-esm/chunk-HXKRKIN2.mjs +0 -18
  366. package/dist/lib/node-esm/chunk-HXKRKIN2.mjs.map +0 -7
  367. package/dist/lib/node-esm/chunk-VESVUAOS.mjs.map +0 -7
  368. package/dist/lib/node-esm/chunk-YYUVTTVK.mjs +0 -204
  369. package/dist/lib/node-esm/chunk-YYUVTTVK.mjs.map +0 -7
  370. package/dist/lib/node-esm/intent-resolver-4ULF3F7U.mjs +0 -43
  371. package/dist/lib/node-esm/intent-resolver-4ULF3F7U.mjs.map +0 -7
  372. package/dist/lib/node-esm/react-surface-6XL6SWL2.mjs.map +0 -7
  373. package/dist/types/src/capabilities/ai-client.d.ts +0 -5
  374. package/dist/types/src/capabilities/ai-client.d.ts.map +0 -1
  375. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts +0 -9
  376. package/dist/types/src/components/ChatPrompt/ChatOptionsMenu.d.ts.map +0 -1
  377. package/dist/types/src/components/ChatPrompt/events.d.ts +0 -17
  378. package/dist/types/src/components/ChatPrompt/events.d.ts.map +0 -1
  379. package/dist/types/src/components/TemplateContainer.d.ts +0 -9
  380. package/dist/types/src/components/TemplateContainer.d.ts.map +0 -1
  381. package/dist/types/src/hooks/chat-processor.test.d.ts +0 -2
  382. package/dist/types/src/hooks/chat-processor.test.d.ts.map +0 -1
  383. package/dist/types/src/hooks/useBlueprints.d.ts +0 -4
  384. package/dist/types/src/hooks/useBlueprints.d.ts.map +0 -1
  385. package/dist/types/src/hooks/useContextProvider.d.ts +0 -23
  386. package/dist/types/src/hooks/useContextProvider.d.ts.map +0 -1
  387. package/dist/types/src/hooks/useServiceContainer.d.ts +0 -8
  388. package/dist/types/src/hooks/useServiceContainer.d.ts.map +0 -1
  389. package/dist/types/src/hooks/useTextInputEvents.d.ts +0 -13
  390. package/dist/types/src/hooks/useTextInputEvents.d.ts.map +0 -1
  391. package/dist/types/src/types/schema.d.ts +0 -71
  392. package/dist/types/src/types/schema.d.ts.map +0 -1
  393. package/dist/types/src/types/template.d.ts +0 -56
  394. package/dist/types/src/types/template.d.ts.map +0 -1
  395. package/src/capabilities/ai-client.ts +0 -39
  396. package/src/components/ChatPrompt/ChatOptionsMenu.tsx +0 -52
  397. package/src/components/ChatPrompt/events.ts +0 -12
  398. package/src/components/TemplateContainer.tsx +0 -25
  399. package/src/hooks/chat-processor.test.ts +0 -15
  400. package/src/hooks/useBlueprints.ts +0 -31
  401. package/src/hooks/useChatProcessor.tsx +0 -142
  402. package/src/hooks/useServiceContainer.ts +0 -42
  403. package/src/hooks/useTextInputEvents.ts +0 -49
  404. package/src/types/schema.ts +0 -86
  405. package/src/types/template.ts +0 -66
@@ -0,0 +1,79 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useSignalEffect } from '@preact/signals-react';
6
+ import { useCallback, useMemo, useState } from 'react';
7
+
8
+ import { Capabilities, useCapabilities } from '@dxos/app-framework';
9
+ import { type AiContextBinder } from '@dxos/assistant';
10
+ import { Blueprint } from '@dxos/blueprints';
11
+ import { type Space } from '@dxos/client/echo';
12
+ import { Filter, Obj, Ref } from '@dxos/echo';
13
+ import { isNonNullable } from '@dxos/util';
14
+
15
+ /**
16
+ * Provide a registry of blueprints from plugins.
17
+ */
18
+ // TODO(burdon): Reconcile with eventual public registry.
19
+ export const useBlueprintRegistry = () => {
20
+ const blueprints = useCapabilities(Capabilities.BlueprintDefinition);
21
+ return useMemo(() => new Blueprint.Registry(blueprints), [blueprints]);
22
+ };
23
+
24
+ /**
25
+ * Create reactive map of active blueprints (by key).
26
+ */
27
+ export const useBlueprints = ({ context }: { context?: AiContextBinder }) => {
28
+ const [active, setActive] = useState<Map<string, Blueprint.Blueprint>>(new Map());
29
+ useSignalEffect(() => {
30
+ const refs = [...(context?.blueprints.value ?? [])];
31
+ const t = setTimeout(async () => {
32
+ const blueprints = (await Ref.Array.loadAll(refs)).filter(isNonNullable);
33
+ setActive(new Map(blueprints.map((blueprint) => [blueprint.key, blueprint])));
34
+ });
35
+
36
+ return () => clearTimeout(t);
37
+ });
38
+
39
+ return active;
40
+ };
41
+
42
+ // TODO(burdon): Context should manage ephemeral state of bindings until prompt is issued?
43
+ export const useBlueprintHandlers = ({
44
+ space,
45
+ context,
46
+ blueprintRegistry,
47
+ }: {
48
+ space: Space;
49
+ context?: AiContextBinder;
50
+ blueprintRegistry?: Blueprint.Registry;
51
+ }) => {
52
+ const onUpdateBlueprint = useCallback(
53
+ async (key: string, checked: boolean) => {
54
+ if (!context || !blueprintRegistry) {
55
+ return;
56
+ }
57
+
58
+ // Find existing cloned blueprint.
59
+ const { objects } = await space.db.query(Filter.type(Blueprint.Blueprint)).run();
60
+ let storedBlueprint = objects.find((blueprint) => blueprint.key === key);
61
+ if (checked) {
62
+ if (!storedBlueprint) {
63
+ const blueprint = blueprintRegistry.getByKey(key);
64
+ if (!blueprint) {
65
+ return;
66
+ }
67
+ // NOTE: Possible race condition with other peers.
68
+ storedBlueprint = space.db.add(Obj.clone(blueprint));
69
+ }
70
+ await context.bind({ blueprints: [Ref.make(storedBlueprint)] });
71
+ } else if (storedBlueprint) {
72
+ await context.unbind({ blueprints: [Ref.make(storedBlueprint)] });
73
+ }
74
+ },
75
+ [space, context, blueprintRegistry],
76
+ );
77
+
78
+ return { onUpdateBlueprint };
79
+ };
@@ -0,0 +1,81 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { RegistryContext } from '@effect-rx/rx-react';
6
+ import { type Layer } from 'effect';
7
+ import { useContext, useMemo } from 'react';
8
+
9
+ import { useIntentDispatcher } from '@dxos/app-framework';
10
+ import { AiConversation } from '@dxos/assistant';
11
+ import { type Blueprint } from '@dxos/blueprints';
12
+ import { log } from '@dxos/log';
13
+ import { type Queue, type Space, fullyQualifiedId } from '@dxos/react-client/echo';
14
+
15
+ import { AiChatProcessor, type AiChatServices, type AiServicePreset } from '../hooks';
16
+ import { type Assistant } from '../types';
17
+
18
+ export type UseChatProcessorProps = {
19
+ space?: Space;
20
+ chat?: Assistant.Chat;
21
+ preset?: AiServicePreset;
22
+ services?: Layer.Layer<AiChatServices>;
23
+ blueprintRegistry?: Blueprint.Registry;
24
+ settings?: Assistant.Settings;
25
+ };
26
+
27
+ /**
28
+ * Configure and create AiChatProcessor.
29
+ */
30
+ export const useChatProcessor = ({
31
+ space,
32
+ chat,
33
+ preset,
34
+ services,
35
+ blueprintRegistry,
36
+ settings,
37
+ }: UseChatProcessorProps): AiChatProcessor | undefined => {
38
+ const observableRegistry = useContext(RegistryContext);
39
+ const { dispatchPromise: dispatch } = useIntentDispatcher();
40
+
41
+ // Tools and context.
42
+ const chatId = useMemo(() => (chat ? fullyQualifiedId(chat) : undefined), [chat]);
43
+ const extensions = useMemo(() => ({ space, dispatch, pivotId: chatId }), [dispatch, space, chatId]);
44
+
45
+ const conversation = useMemo(() => {
46
+ if (!chat?.queue.target) {
47
+ return;
48
+ }
49
+
50
+ return new AiConversation({ queue: chat.queue.target as Queue<any> });
51
+ }, [chat?.queue.target]);
52
+
53
+ // Create processor.
54
+ // TODO(burdon): Updated on each query update above; should just update current processor?
55
+ const processor = useMemo(() => {
56
+ if (!services || !conversation) {
57
+ return undefined;
58
+ }
59
+
60
+ log('creating processor', {
61
+ preset,
62
+ model: preset?.model,
63
+ settings,
64
+ });
65
+
66
+ return new AiChatProcessor(services, conversation, {
67
+ extensions,
68
+ blueprintRegistry,
69
+ observableRegistry,
70
+ model: preset?.model,
71
+ });
72
+ }, [services, conversation, blueprintRegistry, extensions, preset]);
73
+
74
+ return processor;
75
+ };
76
+
77
+ // TODO(dmaretskyi): Extract.
78
+ export const Stable = Object.freeze({
79
+ array: [] as readonly never[],
80
+ object: {} as {},
81
+ });
@@ -0,0 +1,72 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type AiTool, AiToolkit } from '@effect/ai';
6
+ import { Layer } from 'effect';
7
+ import { useMemo } from 'react';
8
+
9
+ import { type AiService, type ToolExecutionService, type ToolResolverService } from '@dxos/ai';
10
+ import { Capabilities, useCapabilities } from '@dxos/app-framework';
11
+ import { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from '@dxos/assistant';
12
+ import { type Space } from '@dxos/client/echo';
13
+ import {
14
+ ComputeEventLogger,
15
+ CredentialsService,
16
+ DatabaseService,
17
+ LocalFunctionExecutionService,
18
+ QueueService,
19
+ RemoteFunctionExecutionService,
20
+ TracingService,
21
+ } from '@dxos/functions';
22
+
23
+ import { AssistantCapabilities } from '../capabilities';
24
+
25
+ // TODO(burdon): Deconstruct into separate layers?
26
+ export type AiChatServices =
27
+ | AiService.AiService
28
+ | CredentialsService
29
+ | DatabaseService
30
+ | QueueService
31
+ | RemoteFunctionExecutionService
32
+ | ToolResolverService
33
+ | ToolExecutionService
34
+ | TracingService;
35
+
36
+ export type UseChatServicesProps = {
37
+ space?: Space;
38
+ };
39
+
40
+ /**
41
+ * Construct service layer.
42
+ */
43
+ export const useChatServices = ({ space }: UseChatServicesProps): Layer.Layer<AiChatServices> | undefined => {
44
+ const serviceLayer = useCapabilities(AssistantCapabilities.AiServiceLayer).at(0) ?? Layer.die('AiService not found');
45
+ const functions = useCapabilities(Capabilities.Functions);
46
+ const toolkits = useCapabilities(Capabilities.Toolkit);
47
+ const handlers = useCapabilities(Capabilities.ToolkitHandler);
48
+
49
+ return useMemo(() => {
50
+ const allFunctions = functions.flat();
51
+ // TODO(wittjosiah): Don't cast.
52
+ const toolkit = AiToolkit.merge(...toolkits) as AiToolkit.Any as AiToolkit.AiToolkit<AiTool.Any>;
53
+ const handlersLayer = Layer.mergeAll(Layer.empty, ...handlers);
54
+ return Layer.mergeAll(
55
+ serviceLayer,
56
+ makeToolResolverFromFunctions(allFunctions, toolkit),
57
+ makeToolExecutionServiceFromFunctions(allFunctions, toolkit, handlersLayer),
58
+ CredentialsService.layerFromDatabase(),
59
+ ComputeEventLogger.layerFromTracing,
60
+ ).pipe(
61
+ Layer.provideMerge(
62
+ Layer.mergeAll(
63
+ space ? DatabaseService.layer(space.db) : DatabaseService.notAvailable,
64
+ space ? QueueService.layer(space.queues) : QueueService.notAvailable,
65
+ TracingService.layerNoop,
66
+ LocalFunctionExecutionService.layer,
67
+ RemoteFunctionExecutionService.mockLayer,
68
+ ),
69
+ ),
70
+ );
71
+ }, [space, functions, toolkits, handlers]);
72
+ };
@@ -0,0 +1,10 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Dispatch, type SetStateAction, useState } from 'react';
6
+
7
+ export const useOnline = (): [boolean, Dispatch<SetStateAction<boolean>>] => {
8
+ const [online, setOnline] = useState(true);
9
+ return [online, setOnline];
10
+ };
@@ -0,0 +1,45 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useCallback, useEffect, useMemo, useState } from 'react';
6
+
7
+ import { type ChatPromptProps } from '../components';
8
+
9
+ import { type AiServicePreset, AiServicePresets } from './presets';
10
+
11
+ export type UsePresets = {
12
+ preset: AiServicePreset | undefined;
13
+ } & Pick<ChatPromptProps, 'presets' | 'onChangePreset'>;
14
+
15
+ export const usePresets = (online: boolean): UsePresets => {
16
+ // TODO(burdon): Memo preset for provider.
17
+ const [preset, setPreset] = useState<AiServicePreset>();
18
+ const presets = useMemo(
19
+ () => AiServicePresets.filter((preset) => online === (preset.provider === 'dxos-remote')),
20
+ [online],
21
+ );
22
+ const presetOptions = useMemo(
23
+ () => presets.map(({ id, model, label }) => ({ id, label: label ?? model })),
24
+ [presets],
25
+ );
26
+ useEffect(() => {
27
+ setPreset(presets[0]);
28
+ }, [presets]);
29
+
30
+ const handleChangePreset = useCallback<NonNullable<ChatPromptProps['onChangePreset']>>(
31
+ (id) => {
32
+ const preset = presets.find((preset) => preset.id === id);
33
+ if (preset) {
34
+ setPreset(preset);
35
+ }
36
+ },
37
+ [presets],
38
+ );
39
+
40
+ return {
41
+ preset: preset,
42
+ presets: presetOptions,
43
+ onChangePreset: handleChangePreset,
44
+ };
45
+ };
@@ -6,33 +6,29 @@ import { useMemo } from 'react';
6
6
 
7
7
  import { Capabilities, useCapabilities } from '@dxos/app-framework';
8
8
  import { type Space } from '@dxos/client/echo';
9
- import { Filter, Obj, type Type } from '@dxos/echo';
9
+ import { Filter, Obj } from '@dxos/echo';
10
+ import { type ReferencesProvider } from '@dxos/react-ui-chat';
10
11
 
11
12
  /**
12
- * @deprecated
13
+ * Resolve references to objects in the space.
13
14
  */
14
- export type ContextProvider = {
15
- query: (params: { query: string }) => Promise<Array<{ uri: string; label: string }>>;
16
- resolveMetadata: (params: { uri: string }) => Promise<{ uri: string; label: string }>;
17
- };
15
+ export const useReferencesProvider = (space?: Space): ReferencesProvider | undefined => {
16
+ const blueprints = useCapabilities(Capabilities.BlueprintDefinition);
18
17
 
19
- /**
20
- * @deprecated
21
- */
22
- export const useContextProvider = (space?: Space): ContextProvider | undefined => {
23
- const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
24
-
25
- return useMemo<ContextProvider | undefined>((): ContextProvider | undefined => {
18
+ return useMemo<ReferencesProvider | undefined>((): ReferencesProvider | undefined => {
26
19
  if (!space) {
27
20
  return undefined;
28
21
  }
29
22
 
30
23
  return {
31
- query: async ({ query }) => {
32
- const artifactSchemas = artifactDefinitions.map((artifact) => artifact.schema);
33
- const { objects } = await space.db
34
- .query(Filter.or(...artifactSchemas.map((schema) => Filter.type(schema as Type.Schema))))
35
- .run();
24
+ getReferences: async ({ query }) => {
25
+ // TODO(burdon): Previously we filtered by types declared by the artifact definitions.
26
+ // const schemas = blueprints.map((blueprint) => blueprint.schema).flat();
27
+ // const { objects } = await space.db
28
+ // .query(Filter.or(...schemas.map((schema) => Filter.type(schema as Type.Schema))))
29
+ // .run();
30
+
31
+ const { objects } = await space.db.query(Filter.everything()).run();
36
32
 
37
33
  return (
38
34
  objects
@@ -45,17 +41,17 @@ export const useContextProvider = (space?: Space): ContextProvider | undefined =
45
41
  // TODO(dmaretskyi): `Type.getDXN` (at the point of writing) didn't work here as it was schema-only.
46
42
  .filter((object) => !!Obj.getDXN(object as Obj.Any))
47
43
  .map((object) => ({
48
- uri: Obj.getDXN(object as any)!.toString(),
44
+ uri: Obj.getDXN(object as any).toString(),
49
45
  label: Obj.getLabel(object as any) ?? '',
50
46
  }))
51
47
  );
52
48
  },
53
- resolveMetadata: async ({ uri }) => {
49
+ resolveReference: async ({ uri }) => {
54
50
  const object = await space.db.query(Filter.ids(uri)).first();
55
51
  return { uri, label: Obj.getLabel(object) ?? '' };
56
52
  },
57
- };
58
- }, [space, artifactDefinitions]);
53
+ } satisfies ReferencesProvider;
54
+ }, [space, blueprints]);
59
55
  };
60
56
 
61
57
  const stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { useMemo, useSyncExternalStore } from 'react';
6
+
7
+ import { type Space } from '@dxos/client/echo';
8
+ import { type Ref } from '@dxos/echo';
9
+
10
+ // TODO(burdon): Factor out.
11
+ export const useResolvedRef = <T>(space: Space, ref: Ref.Ref<T>): T | undefined => {
12
+ const { subscribe, getSnapshot } = useMemo(() => {
13
+ const resolver = space.db.graph.createRefResolver({});
14
+ let currentCallback: (() => void) | undefined = undefined;
15
+
16
+ return {
17
+ subscribe: (cb: () => void) => {
18
+ currentCallback = cb;
19
+ return () => {
20
+ if (currentCallback === cb) {
21
+ currentCallback = undefined;
22
+ }
23
+ };
24
+ },
25
+ getSnapshot: () =>
26
+ resolver?.resolveSync(ref.dxn, true, () => {
27
+ currentCallback?.();
28
+ }) as T | undefined,
29
+ };
30
+ }, [space, ref.dxn.toString()]);
31
+
32
+ return useSyncExternalStore<T | undefined>(subscribe, getSnapshot);
33
+ };
@@ -4,14 +4,7 @@
4
4
 
5
5
  import { Filter } from '@dxos/echo';
6
6
 
7
- import {
8
- type BinaryExpression,
9
- type Expression,
10
- type Identifier,
11
- type Literal,
12
- type RelationalOperator,
13
- type UnaryExpression,
14
- } from './types';
7
+ import { type Expression, type Identifier, type Literal, type RelationalOperator } from './types';
15
8
 
16
9
  const relationalOperators: Record<RelationalOperator, (value: any) => Filter<any>> = {
17
10
  EQ: Filter.eq,
@@ -26,7 +19,7 @@ const specialPredicates: Record<string, (value: string) => Filter<any>> = {
26
19
  export const createFilter = (ast: Expression): Filter<any> => {
27
20
  switch (ast.type) {
28
21
  case 'binary': {
29
- const { operator, left, right } = ast as BinaryExpression;
22
+ const { operator, left, right } = ast;
30
23
 
31
24
  // Handle logical operators.
32
25
  if (operator === 'AND') {
@@ -44,7 +37,7 @@ export const createFilter = (ast: Expression): Filter<any> => {
44
37
  }
45
38
 
46
39
  // Handle relational operators
47
- const filterFn = relationalOperators[operator as RelationalOperator];
40
+ const filterFn = relationalOperators[operator];
48
41
  if (filterFn) {
49
42
  return filterFn((right as Literal).value);
50
43
  }
@@ -53,7 +46,7 @@ export const createFilter = (ast: Expression): Filter<any> => {
53
46
  }
54
47
 
55
48
  case 'unary': {
56
- const { operator, argument } = ast as UnaryExpression;
49
+ const { operator, argument } = ast;
57
50
  if (operator === 'NOT') {
58
51
  return Filter.not(createFilter(argument));
59
52
  }
@@ -61,12 +54,12 @@ export const createFilter = (ast: Expression): Filter<any> => {
61
54
  }
62
55
 
63
56
  case 'identifier': {
64
- const { name } = ast as Identifier;
57
+ const { name } = ast;
65
58
  return Filter._props({ [name]: true });
66
59
  }
67
60
 
68
61
  case 'literal': {
69
- const { value } = ast as Literal;
62
+ const { value } = ast;
70
63
  // Handle special '*' value for empty input.
71
64
  if (value === '*') {
72
65
  return Filter.everything();
@@ -4,4 +4,4 @@
4
4
 
5
5
  export * from './filter-generator';
6
6
  export * from './query-parser';
7
- export * from './types';
7
+ export type * from './types';
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { invariant } from '@dxos/invariant';
6
6
 
7
- import { type Expression, type BinaryOperator, type RelationalOperator } from './types';
7
+ import { type BinaryOperator, type Expression, type RelationalOperator } from './types';
8
8
 
9
9
  // TODO(burdon): Move to echo-schema?
10
10
 
@@ -2,16 +2,16 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { getSpace, Ref, type Queue, type Space } from '@dxos/client/echo';
5
+ import { type Queue, Ref, type Space, getSpace } from '@dxos/client/echo';
6
6
  import { type Sequence, type SequenceEvent, type SequenceLogger } from '@dxos/conductor';
7
7
  import { DXN, Key, Obj } from '@dxos/echo';
8
8
  import {
9
9
  InvocationOutcome,
10
10
  InvocationTraceEndEvent,
11
+ type InvocationTraceEvent,
11
12
  InvocationTraceEventType,
12
13
  InvocationTraceStartEvent,
13
14
  TraceEvent,
14
- type InvocationTraceEvent,
15
15
  } from '@dxos/functions';
16
16
  import { invariant } from '@dxos/invariant';
17
17
  import { QueueSubspaceTags } from '@dxos/keys';
@@ -62,7 +62,7 @@ export class QueueLogger implements SequenceLogger {
62
62
  Obj.make(TraceEvent, {
63
63
  outcome: event.type,
64
64
  truncated: false,
65
- ingestionTimestampMs: Date.now(),
65
+ ingestionTimestamp: Date.now(),
66
66
  logs: [
67
67
  {
68
68
  timestampMs: Date.now(),
@@ -80,7 +80,7 @@ export class QueueLogger implements SequenceLogger {
80
80
  Obj.make(TraceEvent, {
81
81
  outcome: event.type,
82
82
  truncated: false,
83
- ingestionTimestampMs: Date.now(),
83
+ ingestionTimestamp: Date.now(),
84
84
  logs: [
85
85
  {
86
86
  timestampMs: Date.now(),
@@ -98,7 +98,7 @@ export class QueueLogger implements SequenceLogger {
98
98
  Obj.make(TraceEvent, {
99
99
  outcome: event.type,
100
100
  truncated: false,
101
- ingestionTimestampMs: Date.now(),
101
+ ingestionTimestamp: Date.now(),
102
102
  logs: [
103
103
  {
104
104
  timestampMs: Date.now(),