@dxos/plugin-assistant 0.8.2-main.f11618f → 0.8.2-staging.42af850

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 (330) hide show
  1. package/dist/lib/browser/AssistantDialog-K6POM23O.mjs +46 -0
  2. package/dist/lib/browser/AssistantDialog-K6POM23O.mjs.map +7 -0
  3. package/dist/lib/browser/ChatContainer-QTO4LE2C.mjs +39 -0
  4. package/dist/lib/{node-esm/ChatContainer-XPNXNPSW.mjs.map → browser/ChatContainer-QTO4LE2C.mjs.map} +1 -1
  5. package/dist/lib/browser/TemplateContainer-AKUYL4AV.mjs +28 -0
  6. package/dist/lib/{node-esm/TemplateContainer-3LEBT5ZC.mjs.map → browser/TemplateContainer-AKUYL4AV.mjs.map} +1 -1
  7. package/dist/lib/browser/{ai-client-OK5SMYJC.mjs → ai-client-COXVUC6V.mjs} +6 -6
  8. package/dist/lib/browser/ai-client-COXVUC6V.mjs.map +7 -0
  9. package/dist/lib/browser/app-graph-builder-YH4EGNBC.mjs +206 -0
  10. package/dist/lib/browser/app-graph-builder-YH4EGNBC.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-TXJWGWJ7.mjs → chunk-3F44MBHU.mjs} +3 -3
  12. package/dist/lib/browser/chunk-3F44MBHU.mjs.map +7 -0
  13. package/dist/lib/browser/chunk-IHEBFO5O.mjs +205 -0
  14. package/dist/lib/browser/chunk-IHEBFO5O.mjs.map +7 -0
  15. package/dist/lib/browser/chunk-JQFUME3B.mjs +87 -0
  16. package/dist/lib/{node-esm/chunk-PBZA7XJR.mjs.map → browser/chunk-JQFUME3B.mjs.map} +1 -1
  17. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs +96 -0
  18. package/dist/lib/browser/chunk-Q6UZ4F3H.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-7CAHKTZQ.mjs → chunk-QTW7KVDO.mjs} +1665 -1547
  20. package/dist/lib/browser/chunk-QTW7KVDO.mjs.map +7 -0
  21. package/dist/lib/browser/chunk-USJBRB3H.mjs +155 -0
  22. package/dist/lib/browser/chunk-USJBRB3H.mjs.map +7 -0
  23. package/dist/lib/browser/{chunk-3HCI5FIL.mjs → chunk-XOZ7YMO3.mjs} +3 -3
  24. package/dist/lib/browser/{chunk-3HCI5FIL.mjs.map → chunk-XOZ7YMO3.mjs.map} +1 -1
  25. package/dist/lib/browser/index.mjs +24 -10
  26. package/dist/lib/browser/index.mjs.map +3 -3
  27. package/dist/lib/browser/{intent-resolver-W6XREK5F.mjs → intent-resolver-63EAHENI.mjs} +7 -11
  28. package/dist/lib/browser/intent-resolver-63EAHENI.mjs.map +7 -0
  29. package/dist/lib/browser/meta.json +1 -1
  30. package/dist/lib/browser/react-surface-XCV6NR75.mjs +131 -0
  31. package/dist/lib/browser/react-surface-XCV6NR75.mjs.map +7 -0
  32. package/dist/lib/browser/{settings-LAJZQI4H.mjs → settings-SHNQ4XXP.mjs} +3 -3
  33. package/dist/lib/browser/types/index.mjs +4 -2
  34. package/dist/lib/node/AssistantDialog-FDATKYE5.cjs +72 -0
  35. package/dist/lib/node/AssistantDialog-FDATKYE5.cjs.map +7 -0
  36. package/dist/lib/node/{ChatContainer-U6AVMAHY.cjs → ChatContainer-5CLHJOIQ.cjs} +25 -19
  37. package/dist/lib/node/{ChatContainer-U6AVMAHY.cjs.map → ChatContainer-5CLHJOIQ.cjs.map} +1 -1
  38. package/dist/lib/node/{TemplateContainer-EQXKHWTF.cjs → TemplateContainer-CTG2MB4W.cjs} +18 -12
  39. package/dist/lib/node/{TemplateContainer-EQXKHWTF.cjs.map → TemplateContainer-CTG2MB4W.cjs.map} +1 -1
  40. package/dist/lib/node/{ai-client-3EVTLXTT.cjs → ai-client-R2CGEYZW.cjs} +13 -13
  41. package/dist/lib/node/ai-client-R2CGEYZW.cjs.map +7 -0
  42. package/dist/lib/node/app-graph-builder-PSHIOW3Q.cjs +216 -0
  43. package/dist/lib/node/app-graph-builder-PSHIOW3Q.cjs.map +7 -0
  44. package/dist/lib/node/{chunk-XI2ARIEO.cjs → chunk-4EEWTDQK.cjs} +45 -39
  45. package/dist/lib/node/{chunk-XI2ARIEO.cjs.map → chunk-4EEWTDQK.cjs.map} +1 -1
  46. package/dist/lib/node/chunk-FLJWJ35M.cjs +181 -0
  47. package/dist/lib/node/chunk-FLJWJ35M.cjs.map +7 -0
  48. package/dist/lib/node/{chunk-CWHFK36A.cjs → chunk-H4A42LNR.cjs} +1154 -1030
  49. package/dist/lib/node/chunk-H4A42LNR.cjs.map +7 -0
  50. package/dist/lib/node/chunk-HRNIUYVQ.cjs +128 -0
  51. package/dist/lib/node/chunk-HRNIUYVQ.cjs.map +7 -0
  52. package/dist/lib/node/{chunk-Q5XWEMHB.cjs → chunk-P74TWGMG.cjs} +6 -6
  53. package/dist/lib/node/{chunk-Q5XWEMHB.cjs.map → chunk-P74TWGMG.cjs.map} +1 -1
  54. package/dist/lib/node/chunk-RXPA2C2A.cjs +230 -0
  55. package/dist/lib/node/chunk-RXPA2C2A.cjs.map +7 -0
  56. package/dist/lib/node/{chunk-GBUNQ257.cjs → chunk-TS3H5OSX.cjs} +7 -7
  57. package/dist/lib/node/chunk-TS3H5OSX.cjs.map +7 -0
  58. package/dist/lib/node/index.cjs +72 -59
  59. package/dist/lib/node/index.cjs.map +3 -3
  60. package/dist/lib/node/{intent-resolver-MUJMV7II.cjs → intent-resolver-66F7WLW6.cjs} +13 -17
  61. package/dist/lib/node/intent-resolver-66F7WLW6.cjs.map +7 -0
  62. package/dist/lib/node/meta.json +1 -1
  63. package/dist/lib/node/react-surface-TASAPRPQ.cjs +145 -0
  64. package/dist/lib/node/react-surface-TASAPRPQ.cjs.map +7 -0
  65. package/dist/lib/node/{settings-NPXTE6ND.cjs → settings-ERKLO6IO.cjs} +8 -8
  66. package/dist/lib/node/types/index.cjs +16 -14
  67. package/dist/lib/node/types/index.cjs.map +2 -2
  68. package/dist/lib/node-esm/AssistantDialog-PIMYK774.mjs +47 -0
  69. package/dist/lib/node-esm/AssistantDialog-PIMYK774.mjs.map +7 -0
  70. package/dist/lib/node-esm/ChatContainer-QTC5NYE2.mjs +40 -0
  71. package/dist/lib/{browser/ChatContainer-GAYN3FEF.mjs.map → node-esm/ChatContainer-QTC5NYE2.mjs.map} +1 -1
  72. package/dist/lib/node-esm/TemplateContainer-IVDQ4XQG.mjs +29 -0
  73. package/dist/lib/{browser/TemplateContainer-WKU5XFSO.mjs.map → node-esm/TemplateContainer-IVDQ4XQG.mjs.map} +1 -1
  74. package/dist/lib/node-esm/{ai-client-LYCBXZI7.mjs → ai-client-I5LXHMOZ.mjs} +6 -6
  75. package/dist/lib/node-esm/ai-client-I5LXHMOZ.mjs.map +7 -0
  76. package/dist/lib/node-esm/app-graph-builder-Z3GMMJMD.mjs +207 -0
  77. package/dist/lib/node-esm/app-graph-builder-Z3GMMJMD.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-ECRK6TUQ.mjs → chunk-BB2TAT4P.mjs} +3 -3
  79. package/dist/lib/node-esm/{chunk-ECRK6TUQ.mjs.map → chunk-BB2TAT4P.mjs.map} +1 -1
  80. package/dist/lib/node-esm/chunk-CDAILLCU.mjs +98 -0
  81. package/dist/lib/node-esm/chunk-CDAILLCU.mjs.map +7 -0
  82. package/dist/lib/node-esm/{chunk-6JK5HEUQ.mjs → chunk-HLPGKJ7N.mjs} +3 -3
  83. package/dist/lib/node-esm/chunk-HLPGKJ7N.mjs.map +7 -0
  84. package/dist/lib/node-esm/{chunk-PBZA7XJR.mjs → chunk-OYN6HLXZ.mjs} +42 -36
  85. package/dist/lib/{browser/chunk-NFUHCW2J.mjs.map → node-esm/chunk-OYN6HLXZ.mjs.map} +1 -1
  86. package/dist/lib/node-esm/chunk-QU626JMR.mjs +156 -0
  87. package/dist/lib/node-esm/chunk-QU626JMR.mjs.map +7 -0
  88. package/dist/lib/node-esm/{chunk-XFUXN5QU.mjs → chunk-SI5LOQEO.mjs} +1665 -1547
  89. package/dist/lib/node-esm/chunk-SI5LOQEO.mjs.map +7 -0
  90. package/dist/lib/node-esm/chunk-ZKBACPIW.mjs +206 -0
  91. package/dist/lib/node-esm/chunk-ZKBACPIW.mjs.map +7 -0
  92. package/dist/lib/node-esm/index.mjs +24 -10
  93. package/dist/lib/node-esm/index.mjs.map +3 -3
  94. package/dist/lib/node-esm/{intent-resolver-DZY2O2DG.mjs → intent-resolver-X3PWH7KM.mjs} +7 -11
  95. package/dist/lib/node-esm/intent-resolver-X3PWH7KM.mjs.map +7 -0
  96. package/dist/lib/node-esm/meta.json +1 -1
  97. package/dist/lib/node-esm/react-surface-QMIQCXUM.mjs +132 -0
  98. package/dist/lib/node-esm/react-surface-QMIQCXUM.mjs.map +7 -0
  99. package/dist/lib/node-esm/{settings-K3JDH2I5.mjs → settings-IVQRZUCU.mjs} +3 -3
  100. package/dist/lib/node-esm/types/index.mjs +4 -2
  101. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  102. package/dist/types/src/capabilities/ai-client.d.ts +3 -3
  103. package/dist/types/src/capabilities/ai-client.d.ts.map +1 -1
  104. package/dist/types/src/capabilities/app-graph-builder.d.ts +2 -179
  105. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  106. package/dist/types/src/capabilities/capabilities.d.ts +1 -1
  107. package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
  108. package/dist/types/src/capabilities/index.d.ts +2 -178
  109. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  110. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  111. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  112. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts +3 -1
  113. package/dist/types/src/components/AmbientDialog/AmbientDialog.d.ts.map +1 -1
  114. package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
  115. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts +8 -0
  116. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts.map +1 -0
  117. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts +8 -0
  118. package/dist/types/src/components/BlueprintEditor/BlueprintEditor.stories.d.ts.map +1 -0
  119. package/dist/types/src/components/BlueprintEditor/index.d.ts +2 -0
  120. package/dist/types/src/components/BlueprintEditor/index.d.ts.map +1 -0
  121. package/dist/types/src/components/Prompt/Prompt.d.ts +5 -2
  122. package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -1
  123. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +6 -3
  124. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -1
  125. package/dist/types/src/components/Prompt/PromptBar.d.ts +9 -4
  126. package/dist/types/src/components/Prompt/PromptBar.d.ts.map +1 -1
  127. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts +9 -0
  128. package/dist/types/src/components/Prompt/PromptBar.stories.d.ts.map +1 -0
  129. package/dist/types/src/components/Prompt/autocomplete.d.ts +5 -1
  130. package/dist/types/src/components/Prompt/autocomplete.d.ts.map +1 -1
  131. package/dist/types/src/components/Prompt/references.d.ts.map +1 -1
  132. package/dist/types/src/components/PromptSettings.d.ts.map +1 -1
  133. package/dist/types/src/components/TemplateContainer.d.ts.map +1 -1
  134. package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
  135. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  136. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +2 -2
  137. package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
  138. package/dist/types/src/components/Thread/Thread.d.ts +2 -2
  139. package/dist/types/src/components/Thread/Thread.d.ts.map +1 -1
  140. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +1 -1
  141. package/dist/types/src/components/Thread/ThreadContainer.d.ts +1 -1
  142. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
  143. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +2 -2
  144. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
  145. package/dist/types/src/components/Thread/ThreadMessage.d.ts +4 -2
  146. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
  147. package/dist/types/src/components/Thread/ToolInvocations.d.ts +1 -1
  148. package/dist/types/src/components/Thread/ToolInvocations.d.ts.map +1 -1
  149. package/dist/types/src/components/Thread/reducer.d.ts +1 -1
  150. package/dist/types/src/components/Thread/reducer.d.ts.map +1 -1
  151. package/dist/types/src/components/Toolbox/Toolbox.d.ts +3 -2
  152. package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
  153. package/dist/types/src/components/index.d.ts +2 -0
  154. package/dist/types/src/components/index.d.ts.map +1 -1
  155. package/dist/types/src/experimental/transcription/index.d.ts +1 -0
  156. package/dist/types/src/experimental/transcription/index.d.ts.map +1 -0
  157. package/dist/types/src/hooks/index.d.ts +0 -1
  158. package/dist/types/src/hooks/index.d.ts.map +1 -1
  159. package/dist/types/src/hooks/processor.d.ts +6 -5
  160. package/dist/types/src/hooks/processor.d.ts.map +1 -1
  161. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  162. package/dist/types/src/hooks/useContextProvider.d.ts +1 -1
  163. package/dist/types/src/hooks/useContextProvider.d.ts.map +1 -1
  164. package/dist/types/src/hooks/useMessageQueue.d.ts +11 -7
  165. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -1
  166. package/dist/types/src/hooks/useServices.d.ts.map +1 -1
  167. package/dist/types/src/hooks/useTextInputEvents.d.ts.map +1 -1
  168. package/dist/types/src/parser/filter-generator.d.ts +4 -0
  169. package/dist/types/src/parser/filter-generator.d.ts.map +1 -0
  170. package/dist/types/src/parser/filter-generator.test.d.ts +2 -0
  171. package/dist/types/src/parser/filter-generator.test.d.ts.map +1 -0
  172. package/dist/types/src/parser/index.d.ts +4 -0
  173. package/dist/types/src/parser/index.d.ts.map +1 -0
  174. package/dist/types/src/parser/query-parser.d.ts +15 -0
  175. package/dist/types/src/parser/query-parser.d.ts.map +1 -0
  176. package/dist/types/src/parser/query-parser.test.d.ts +2 -0
  177. package/dist/types/src/parser/query-parser.test.d.ts.map +1 -0
  178. package/dist/types/src/parser/types.d.ts +24 -0
  179. package/dist/types/src/parser/types.d.ts.map +1 -0
  180. package/dist/types/src/stories/Prompt.stories.d.ts +8 -0
  181. package/dist/types/src/stories/Prompt.stories.d.ts.map +1 -0
  182. package/dist/types/src/stories/Query.stories.d.ts +19 -0
  183. package/dist/types/src/stories/Query.stories.d.ts.map +1 -0
  184. package/dist/types/src/stories/Research.stories.d.ts +15 -0
  185. package/dist/types/src/stories/Research.stories.d.ts.map +1 -0
  186. package/dist/types/src/stories/test-data.d.ts +3 -0
  187. package/dist/types/src/stories/test-data.d.ts.map +1 -0
  188. package/dist/types/src/stories/testing.d.ts +12 -0
  189. package/dist/types/src/stories/testing.d.ts.map +1 -0
  190. package/dist/types/src/testing/blueprint.d.ts +7 -0
  191. package/dist/types/src/testing/blueprint.d.ts.map +1 -0
  192. package/dist/types/src/testing/index.d.ts +1 -0
  193. package/dist/types/src/testing/index.d.ts.map +1 -1
  194. package/dist/types/src/testing/test-functions.d.ts +1 -1
  195. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  196. package/dist/types/src/tools/function.d.ts +4 -4
  197. package/dist/types/src/tools/function.d.ts.map +1 -1
  198. package/dist/types/src/tools/openapi.d.ts +3 -3
  199. package/dist/types/src/tools/openapi.d.ts.map +1 -1
  200. package/dist/types/src/translations.d.ts +3 -0
  201. package/dist/types/src/translations.d.ts.map +1 -1
  202. package/dist/types/src/types/chat.d.ts +18 -8
  203. package/dist/types/src/types/chat.d.ts.map +1 -1
  204. package/dist/types/src/types/service.d.ts +96 -95
  205. package/dist/types/src/types/service.d.ts.map +1 -1
  206. package/dist/types/src/types/template.d.ts +52 -52
  207. package/dist/types/src/types/template.d.ts.map +1 -1
  208. package/dist/types/src/types/types.d.ts +24 -21
  209. package/dist/types/src/types/types.d.ts.map +1 -1
  210. package/dist/types/tsconfig.tsbuildinfo +1 -1
  211. package/package.json +79 -61
  212. package/src/AssistantPlugin.tsx +5 -4
  213. package/src/capabilities/ai-client.ts +5 -5
  214. package/src/capabilities/app-graph-builder.ts +179 -109
  215. package/src/capabilities/capabilities.ts +1 -1
  216. package/src/capabilities/intent-resolver.ts +4 -6
  217. package/src/capabilities/react-surface.tsx +58 -13
  218. package/src/components/AmbientDialog/AmbientDialog.stories.tsx +2 -2
  219. package/src/components/AmbientDialog/AmbientDialog.tsx +27 -13
  220. package/src/components/AssistantDialog.tsx +1 -1
  221. package/src/components/AssistantSettings/AssistantSettings.tsx +1 -1
  222. package/src/components/BlueprintEditor/BlueprintEditor.stories.tsx +32 -0
  223. package/src/components/BlueprintEditor/BlueprintEditor.tsx +41 -0
  224. package/src/components/BlueprintEditor/index.ts +5 -0
  225. package/src/components/Prompt/Prompt.stories.tsx +59 -52
  226. package/src/components/Prompt/Prompt.tsx +24 -10
  227. package/src/components/Prompt/PromptBar.stories.tsx +68 -0
  228. package/src/components/Prompt/PromptBar.tsx +82 -88
  229. package/src/components/Prompt/autocomplete.ts +14 -8
  230. package/src/components/Prompt/references.ts +3 -3
  231. package/src/components/PromptSettings.tsx +2 -2
  232. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +2 -2
  233. package/src/components/TemplateEditor/TemplateForm.stories.tsx +1 -1
  234. package/src/components/TemplateEditor/TemplateForm.tsx +2 -2
  235. package/src/components/Thread/Thread.stories.tsx +14 -17
  236. package/src/components/Thread/Thread.tsx +2 -2
  237. package/src/components/Thread/ThreadContainer.stories.tsx +79 -49
  238. package/src/components/Thread/ThreadContainer.tsx +8 -9
  239. package/src/components/Thread/ThreadMessage.tsx +44 -9
  240. package/src/components/Thread/ToolInvocations.tsx +9 -7
  241. package/src/components/Thread/reducer.ts +1 -1
  242. package/src/components/Toolbox/Toolbox.stories.tsx +3 -3
  243. package/src/components/Toolbox/Toolbox.tsx +5 -4
  244. package/src/components/index.ts +2 -0
  245. package/src/experimental/transcription/index.ts +3 -0
  246. package/src/hooks/index.ts +0 -1
  247. package/src/hooks/processor.ts +65 -27
  248. package/src/hooks/useChatProcessor.tsx +9 -9
  249. package/src/hooks/useContextProvider.ts +21 -17
  250. package/src/hooks/useMessageQueue.ts +5 -5
  251. package/src/meta.ts +2 -2
  252. package/src/parser/filter-generator.test.ts +32 -0
  253. package/src/parser/filter-generator.ts +81 -0
  254. package/src/parser/index.ts +7 -0
  255. package/src/parser/query-parser.test.ts +139 -0
  256. package/src/parser/query-parser.ts +199 -0
  257. package/src/parser/types.ts +34 -0
  258. package/src/shims.d.ts +8 -0
  259. package/src/stories/Prompt.stories.tsx +59 -0
  260. package/src/stories/Query.stories.tsx +448 -0
  261. package/src/stories/Research.stories.tsx +495 -0
  262. package/src/stories/test-data.ts +128 -0
  263. package/src/stories/testing.ts +64 -0
  264. package/src/testing/blueprint.ts +47 -0
  265. package/src/testing/index.ts +1 -0
  266. package/src/testing/test-functions.ts +1 -1
  267. package/src/tools/function.ts +11 -12
  268. package/src/tools/openapi.test.ts +18 -19
  269. package/src/tools/openapi.ts +24 -17
  270. package/src/translations.ts +4 -2
  271. package/src/types/chat.ts +27 -4
  272. package/src/types/service.ts +39 -37
  273. package/src/types/template.ts +27 -25
  274. package/src/types/types.ts +20 -18
  275. package/dist/lib/browser/AssistantDialog-I47GUXWR.mjs +0 -117
  276. package/dist/lib/browser/AssistantDialog-I47GUXWR.mjs.map +0 -7
  277. package/dist/lib/browser/ChatContainer-GAYN3FEF.mjs +0 -33
  278. package/dist/lib/browser/TemplateContainer-WKU5XFSO.mjs +0 -22
  279. package/dist/lib/browser/ai-client-OK5SMYJC.mjs.map +0 -7
  280. package/dist/lib/browser/app-graph-builder-ZXKGE3H5.mjs +0 -179
  281. package/dist/lib/browser/app-graph-builder-ZXKGE3H5.mjs.map +0 -7
  282. package/dist/lib/browser/chunk-7CAHKTZQ.mjs.map +0 -7
  283. package/dist/lib/browser/chunk-BGMQ2YYP.mjs +0 -143
  284. package/dist/lib/browser/chunk-BGMQ2YYP.mjs.map +0 -7
  285. package/dist/lib/browser/chunk-E7BN4QKP.mjs +0 -190
  286. package/dist/lib/browser/chunk-E7BN4QKP.mjs.map +0 -7
  287. package/dist/lib/browser/chunk-NFUHCW2J.mjs +0 -81
  288. package/dist/lib/browser/chunk-TXJWGWJ7.mjs.map +0 -7
  289. package/dist/lib/browser/intent-resolver-W6XREK5F.mjs.map +0 -7
  290. package/dist/lib/browser/react-surface-QMI5KG4H.mjs +0 -90
  291. package/dist/lib/browser/react-surface-QMI5KG4H.mjs.map +0 -7
  292. package/dist/lib/node/AssistantDialog-SDS2TE5L.cjs +0 -141
  293. package/dist/lib/node/AssistantDialog-SDS2TE5L.cjs.map +0 -7
  294. package/dist/lib/node/ai-client-3EVTLXTT.cjs.map +0 -7
  295. package/dist/lib/node/app-graph-builder-TXHPXIIC.cjs +0 -190
  296. package/dist/lib/node/app-graph-builder-TXHPXIIC.cjs.map +0 -7
  297. package/dist/lib/node/chunk-5UELRDHQ.cjs +0 -214
  298. package/dist/lib/node/chunk-5UELRDHQ.cjs.map +0 -7
  299. package/dist/lib/node/chunk-CWHFK36A.cjs.map +0 -7
  300. package/dist/lib/node/chunk-GBUNQ257.cjs.map +0 -7
  301. package/dist/lib/node/chunk-XBJO453B.cjs +0 -169
  302. package/dist/lib/node/chunk-XBJO453B.cjs.map +0 -7
  303. package/dist/lib/node/intent-resolver-MUJMV7II.cjs.map +0 -7
  304. package/dist/lib/node/react-surface-SAJF4XBB.cjs +0 -106
  305. package/dist/lib/node/react-surface-SAJF4XBB.cjs.map +0 -7
  306. package/dist/lib/node-esm/AssistantDialog-KGA5HBFO.mjs +0 -118
  307. package/dist/lib/node-esm/AssistantDialog-KGA5HBFO.mjs.map +0 -7
  308. package/dist/lib/node-esm/ChatContainer-XPNXNPSW.mjs +0 -34
  309. package/dist/lib/node-esm/TemplateContainer-3LEBT5ZC.mjs +0 -23
  310. package/dist/lib/node-esm/ai-client-LYCBXZI7.mjs.map +0 -7
  311. package/dist/lib/node-esm/app-graph-builder-SV4WC2E2.mjs +0 -180
  312. package/dist/lib/node-esm/app-graph-builder-SV4WC2E2.mjs.map +0 -7
  313. package/dist/lib/node-esm/chunk-6JK5HEUQ.mjs.map +0 -7
  314. package/dist/lib/node-esm/chunk-ECYNZYEG.mjs +0 -191
  315. package/dist/lib/node-esm/chunk-ECYNZYEG.mjs.map +0 -7
  316. package/dist/lib/node-esm/chunk-R7Q3OHWG.mjs +0 -144
  317. package/dist/lib/node-esm/chunk-R7Q3OHWG.mjs.map +0 -7
  318. package/dist/lib/node-esm/chunk-XFUXN5QU.mjs.map +0 -7
  319. package/dist/lib/node-esm/intent-resolver-DZY2O2DG.mjs.map +0 -7
  320. package/dist/lib/node-esm/react-surface-R43NHNMC.mjs +0 -91
  321. package/dist/lib/node-esm/react-surface-R43NHNMC.mjs.map +0 -7
  322. package/dist/types/src/hooks/invocation-handler.d.ts +0 -5
  323. package/dist/types/src/hooks/invocation-handler.d.ts.map +0 -1
  324. package/dist/types/src/hooks/useLocalTriggerManager.d.ts +0 -3
  325. package/dist/types/src/hooks/useLocalTriggerManager.d.ts.map +0 -1
  326. package/src/hooks/invocation-handler.ts +0 -107
  327. package/src/hooks/useLocalTriggerManager.ts +0 -82
  328. /package/dist/lib/browser/{settings-LAJZQI4H.mjs.map → settings-SHNQ4XXP.mjs.map} +0 -0
  329. /package/dist/lib/node/{settings-NPXTE6ND.cjs.map → settings-ERKLO6IO.cjs.map} +0 -0
  330. /package/dist/lib/node-esm/{settings-K3JDH2I5.mjs.map → settings-IVQRZUCU.mjs.map} +0 -0
@@ -4,12 +4,21 @@
4
4
 
5
5
  import { type Signal, batch, computed, signal } from '@preact/signals-core';
6
6
 
7
+ import {
8
+ DEFAULT_EDGE_MODEL,
9
+ type ExecutableTool,
10
+ type AIServiceClient,
11
+ type GenerateRequest,
12
+ type Message,
13
+ type MessageContentBlock,
14
+ type ToolUseContentBlock,
15
+ } from '@dxos/ai';
7
16
  import { type PromiseIntentDispatcher } from '@dxos/app-framework';
8
- import { type ArtifactDefinition, type Message, type MessageContentBlock, type Tool } from '@dxos/artifact';
9
- import { type AIServiceClient, AISession, DEFAULT_EDGE_MODEL, type GenerateRequest } from '@dxos/assistant';
17
+ import { type ArtifactDefinition } from '@dxos/artifact';
18
+ import { AISession, type ArtifactDiffResolver } from '@dxos/assistant';
10
19
  import { invariant } from '@dxos/invariant';
11
20
  import { log } from '@dxos/log';
12
- import { getVersion, type Space } from '@dxos/react-client/echo';
21
+ import { Filter, getVersion, type Space } from '@dxos/react-client/echo';
13
22
 
14
23
  // TODO(burdon): Factor out.
15
24
  declare global {
@@ -78,7 +87,7 @@ export class ChatProcessor {
78
87
 
79
88
  constructor(
80
89
  private readonly _ai: AIServiceClient,
81
- private _tools?: Tool[],
90
+ private _tools?: ExecutableTool[],
82
91
  private _artifacts?: ArtifactDefinition[],
83
92
  private readonly _extensions?: ToolContextExtensions,
84
93
  private readonly _options: ChatProcessorOptions = defaultOptions,
@@ -91,7 +100,7 @@ export class ChatProcessor {
91
100
  /**
92
101
  * Update tools.
93
102
  */
94
- setTools(tools: Tool[]) {
103
+ setTools(tools: ExecutableTool[]): void {
95
104
  this._tools = tools;
96
105
  }
97
106
 
@@ -120,6 +129,33 @@ export class ChatProcessor {
120
129
  this._pending.value = [...this._pending.value, message];
121
130
  });
122
131
 
132
+ this._session.toolStatusReport.on(({ message, status }) => {
133
+ const msg = this._pending.peek().find((m) => m.id === message.id);
134
+ const toolUse = msg?.content.find((block) => block.type === 'tool_use');
135
+ if (!toolUse) {
136
+ return;
137
+ }
138
+
139
+ const block = msg?.content.find(
140
+ (block): block is ToolUseContentBlock => block.type === 'tool_use' && block.id === toolUse.id,
141
+ );
142
+ if (block) {
143
+ this._pending.value = this._pending.value.map((m) => {
144
+ if (m.id === message.id) {
145
+ return {
146
+ ...m,
147
+ content: m.content.map((b) =>
148
+ b.type === 'tool_use' && b.id === toolUse.id ? { ...b, currentStatus: status } : b,
149
+ ),
150
+ };
151
+ }
152
+ return m;
153
+ });
154
+ } else {
155
+ log.warn('no block for status report');
156
+ }
157
+ });
158
+
123
159
  try {
124
160
  const messages = await this._session.run({
125
161
  client: this._ai,
@@ -130,28 +166,7 @@ export class ChatProcessor {
130
166
  prompt: message,
131
167
  systemPrompt: this._options.systemPrompt,
132
168
  extensions: this._extensions,
133
- artifactDiffResolver: async (artifacts) => {
134
- const space = this._extensions?.space;
135
- if (!space) {
136
- return new Map();
137
- }
138
- const versions = new Map();
139
- await Promise.all(
140
- artifacts.map(async (artifact) => {
141
- const {
142
- objects: [object],
143
- } = await space.db.query({ id: artifact.id }).run();
144
- if (!object) {
145
- return;
146
- }
147
- versions.set(artifact.id, {
148
- version: getVersion(object),
149
- diff: `Current state: ${JSON.stringify(object)}`,
150
- });
151
- }),
152
- );
153
- return versions;
154
- },
169
+ artifactDiffResolver: this._artifactDiffResolver,
155
170
  generationOptions: {
156
171
  model: this._options.model,
157
172
  },
@@ -192,6 +207,29 @@ export class ChatProcessor {
192
207
 
193
208
  return messages;
194
209
  }
210
+
211
+ private _artifactDiffResolver: ArtifactDiffResolver = async (artifacts) => {
212
+ const space = this._extensions?.space;
213
+ if (!space) {
214
+ return new Map();
215
+ }
216
+ const versions = new Map();
217
+ await Promise.all(
218
+ artifacts.map(async (artifact) => {
219
+ const {
220
+ objects: [object],
221
+ } = await space.db.query(Filter.ids(artifact.id)).run();
222
+ if (!object) {
223
+ return;
224
+ }
225
+ versions.set(artifact.id, {
226
+ version: getVersion(object),
227
+ diff: `Current state: ${JSON.stringify(object)}`,
228
+ });
229
+ }),
230
+ );
231
+ return versions;
232
+ };
195
233
  }
196
234
 
197
235
  // TODO(wittjosiah): Move to ai-service-client.
@@ -4,10 +4,10 @@
4
4
 
5
5
  import { useEffect, useMemo, useState } from 'react';
6
6
 
7
+ import { DEFAULT_EDGE_MODEL, DEFAULT_OLLAMA_MODEL, type ExecutableTool } from '@dxos/ai';
7
8
  import { Capabilities, useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework';
8
- import { type AssociatedArtifact, createSystemPrompt, type Tool } from '@dxos/artifact';
9
- import { DEFAULT_EDGE_MODEL, DEFAULT_OLLAMA_MODEL } from '@dxos/assistant';
10
- import { FunctionType } from '@dxos/functions/types';
9
+ import { type AssociatedArtifact, createSystemPrompt } from '@dxos/artifact';
10
+ import { FunctionType } from '@dxos/functions';
11
11
  import { log } from '@dxos/log';
12
12
  import { useConfig } from '@dxos/react-client';
13
13
  import { Filter, fullyQualifiedId, type Space, useQuery } from '@dxos/react-client/echo';
@@ -15,7 +15,7 @@ import { isNonNullable } from '@dxos/util';
15
15
 
16
16
  import { AssistantCapabilities } from '../capabilities';
17
17
  import { ChatProcessor, type ChatProcessorOptions } from '../hooks';
18
- import { covertFunctionToTool, createToolsFromService } from '../tools';
18
+ import { convertFunctionToTool, createToolsFromService } from '../tools';
19
19
  import { type AIChatType, type AssistantSettingsProps, ServiceType } from '../types';
20
20
 
21
21
  type UseChatProcessorProps = {
@@ -43,8 +43,8 @@ export const useChatProcessor = ({
43
43
  const { dispatchPromise: dispatch } = useIntentDispatcher();
44
44
 
45
45
  // Services.
46
- const services = useQuery(space, Filter.schema(ServiceType));
47
- const [serviceTools, setServiceTools] = useState<Tool[]>([]);
46
+ const services = useQuery(space, Filter.type(ServiceType));
47
+ const [serviceTools, setServiceTools] = useState<ExecutableTool[]>([]);
48
48
  useEffect(() => {
49
49
  log('creating service tools...');
50
50
  queueMicrotask(async () => {
@@ -55,15 +55,15 @@ export const useChatProcessor = ({
55
55
 
56
56
  // Tools and context.
57
57
  const config = useConfig();
58
- const functions = useQuery(space, Filter.schema(FunctionType));
58
+ const functions = useQuery(space, Filter.type(FunctionType));
59
59
  const chatId = useMemo(() => (chat ? fullyQualifiedId(chat) : undefined), [chat]);
60
60
  const [tools, extensions] = useMemo(() => {
61
61
  log('creating tools...');
62
- const tools = [
62
+ const tools: ExecutableTool[] = [
63
63
  ...globalTools.flat(),
64
64
  ...serviceTools,
65
65
  ...functions
66
- .map((fn) => covertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))
66
+ .map((fn) => convertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))
67
67
  .filter(isNonNullable),
68
68
  ];
69
69
  const extensions = { space, dispatch, pivotId: chatId, part };
@@ -2,13 +2,14 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import type { Schema } from 'effect';
5
6
  import { useMemo } from 'react';
6
7
 
7
8
  import { Capabilities, useCapabilities } from '@dxos/app-framework';
8
- import type { Space } from '@dxos/client/echo';
9
- import { getDXN, getLabel, getSchema } from '@dxos/echo-schema';
9
+ import { Filter, type Space } from '@dxos/client/echo';
10
+ import { Obj } from '@dxos/echo';
11
+ import { type BaseEchoObject, getDXN, getLabel } from '@dxos/echo-schema';
10
12
  import { log } from '@dxos/log';
11
- import { Filter } from '@dxos/react-client/echo';
12
13
 
13
14
  export type ContextProvider = {
14
15
  query: (params: { query: string }) => Promise<Array<{ uri: string; label: string }>>;
@@ -29,25 +30,28 @@ export const useContextProvider = (space?: Space): ContextProvider | undefined =
29
30
  query: async ({ query }) => {
30
31
  const artifactSchemas = artifactDefinitions.map((artifact) => artifact.schema);
31
32
  const { objects } = await space.db
32
- .query(Filter.or(...artifactSchemas.map((schema) => Filter.schema(schema))))
33
+ .query(Filter.or(...artifactSchemas.map((schema) => Filter.type(schema as Schema.Schema<BaseEchoObject>))))
33
34
  .run();
34
- return objects
35
- .map((object) => {
36
- log.info('object', { object, label: getLabel(getSchema(object)!, object) });
37
- return object;
38
- })
39
- .filter((object) => stringMatch(query, getLabel(getSchema(object)!, object) ?? ''))
40
- .filter((object) => !!getDXN(object))
41
- .map((object) => ({
42
- uri: getDXN(object)!.toString(),
43
- label: getLabel(getSchema(object)!, object) ?? '',
44
- }));
35
+ return (
36
+ objects
37
+ .map((object) => {
38
+ log.info('object', { object, label: getLabel(Obj.getSchema(object)!, object) });
39
+ return object;
40
+ })
41
+ .filter((object) => stringMatch(query, getLabel(Obj.getSchema(object)!, object) ?? ''))
42
+ // TODO(dmaretskyi): `Type.getDXN` (at the point of writing) didn't work here as it was schema-only.
43
+ .filter((object) => !!getDXN(object))
44
+ .map((object) => ({
45
+ uri: getDXN(object as any)!.toString(),
46
+ label: getLabel(Obj.getSchema(object)!, object) ?? '',
47
+ }))
48
+ );
45
49
  },
46
50
  resolveMetadata: async ({ uri }) => {
47
- const object = await space.db.query({ id: uri }).first();
51
+ const object = await space.db.query(Filter.ids(uri)).first();
48
52
  return {
49
53
  uri,
50
- label: getLabel(getSchema(object)!, object) ?? '',
54
+ label: getLabel(Obj.getSchema(object)!, object) ?? '',
51
55
  };
52
56
  },
53
57
  };
@@ -4,8 +4,8 @@
4
4
 
5
5
  import { useMemo } from 'react';
6
6
 
7
- import { type Message } from '@dxos/artifact';
8
- import { DXN, QueueSubspaceTags } from '@dxos/keys';
7
+ import { type Message } from '@dxos/ai';
8
+ import { createQueueDxn } from '@dxos/echo-schema';
9
9
  import { getSpace, useQueue } from '@dxos/react-client/echo';
10
10
 
11
11
  import { type AIChatType } from '../types';
@@ -13,9 +13,9 @@ import { type AIChatType } from '../types';
13
13
  export const useMessageQueue = (chat?: AIChatType) => {
14
14
  const space = getSpace(chat);
15
15
  const queueDxn = useMemo(() => {
16
- const dxn = space && chat?.assistantChatQueue.dxn;
17
- return dxn ? new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, space.id, dxn.parts.at(-1)!]) : undefined;
18
- }, [space, chat?.assistantChatQueue.dxn]);
16
+ const dxn = space && chat?.queue.dxn;
17
+ return dxn ? createQueueDxn(space.id, dxn.parts.at(-1)) : undefined;
18
+ }, [space, chat?.queue.dxn]);
19
19
 
20
20
  return useQueue<Message>(queueDxn);
21
21
  };
package/src/meta.ts CHANGED
@@ -13,6 +13,6 @@ export const meta: PluginMeta = {
13
13
  name: 'Assistant',
14
14
  description: 'The Assistant tab allows you to chat with your spaces inside of Composer.',
15
15
  icon: 'ph--atom--regular',
16
- source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-assistant',
17
- tags: ['experimental'],
16
+ source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/plugin-assistant',
17
+ tags: ['labs'],
18
18
  };
@@ -0,0 +1,32 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, test } from 'vitest';
6
+
7
+ import { Filter } from '@dxos/echo-schema';
8
+
9
+ import { createFilter } from './filter-generator';
10
+ import { QueryParser } from './query-parser';
11
+
12
+ describe('FilterGenerator', () => {
13
+ test('simple queries', ({ expect }) => {
14
+ const parser = new QueryParser('type:example.com/type/Person');
15
+ const ast = parser.parse();
16
+ expect(ast).toEqual({
17
+ type: 'binary',
18
+ operator: 'EQ',
19
+ left: {
20
+ type: 'identifier',
21
+ name: 'type',
22
+ },
23
+ right: {
24
+ type: 'literal',
25
+ value: 'example.com/type/Person',
26
+ },
27
+ });
28
+
29
+ const filter = createFilter(ast);
30
+ expect(filter).toEqual(Filter.typename('example.com/type/Person'));
31
+ });
32
+ });
@@ -0,0 +1,81 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Filter } from '@dxos/echo-schema';
6
+
7
+ import {
8
+ type BinaryExpression,
9
+ type Expression,
10
+ type Identifier,
11
+ type Literal,
12
+ type RelationalOperator,
13
+ type UnaryExpression,
14
+ } from './types';
15
+
16
+ const relationalOperators: Record<RelationalOperator, (value: any) => Filter<any>> = {
17
+ EQ: Filter.eq,
18
+ LT: Filter.lt,
19
+ GT: Filter.gt,
20
+ };
21
+
22
+ const specialPredicates: Record<string, (value: string) => Filter<any>> = {
23
+ ['type' as const]: Filter.typename,
24
+ };
25
+
26
+ export const createFilter = (ast: Expression): Filter<any> => {
27
+ switch (ast.type) {
28
+ case 'binary': {
29
+ const { operator, left, right } = ast as BinaryExpression;
30
+
31
+ // Handle logical operators.
32
+ if (operator === 'AND') {
33
+ return Filter.and(createFilter(left), createFilter(right));
34
+ }
35
+ if (operator === 'OR') {
36
+ return Filter.or(createFilter(left), createFilter(right));
37
+ }
38
+
39
+ // Handle special predicates (e.g., "type:Person")
40
+ const predicateName = (left as Identifier).name;
41
+ const specialFilter = specialPredicates[predicateName];
42
+ if (specialFilter) {
43
+ return specialFilter((right as Literal).value);
44
+ }
45
+
46
+ // Handle relational operators
47
+ const filterFn = relationalOperators[operator as RelationalOperator];
48
+ if (filterFn) {
49
+ return filterFn((right as Literal).value);
50
+ }
51
+
52
+ throw new Error(`Unsupported operator: ${operator}`);
53
+ }
54
+
55
+ case 'unary': {
56
+ const { operator, argument } = ast as UnaryExpression;
57
+ if (operator === 'NOT') {
58
+ return Filter.not(createFilter(argument));
59
+ }
60
+ throw new Error(`Unsupported unary operator: ${operator}`);
61
+ }
62
+
63
+ case 'identifier': {
64
+ const { name } = ast as Identifier;
65
+ return Filter._props({ [name]: true });
66
+ }
67
+
68
+ case 'literal': {
69
+ const { value } = ast as Literal;
70
+ // Handle special '*' value for empty input.
71
+ if (value === '*') {
72
+ return Filter.everything();
73
+ }
74
+
75
+ return Filter.eq(value);
76
+ }
77
+
78
+ default:
79
+ throw new Error(`Unsupported expression type: ${(ast as any).type}`);
80
+ }
81
+ };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './filter-generator';
6
+ export * from './query-parser';
7
+ export * from './types';
@@ -0,0 +1,139 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, test } from 'vitest';
6
+
7
+ import { QueryParser } from './query-parser';
8
+
9
+ describe('QueryParser', () => {
10
+ test('empty', ({ expect }) => {
11
+ const parser = new QueryParser('');
12
+ expect(parser.parse()).toEqual({
13
+ type: 'literal',
14
+ value: '*',
15
+ });
16
+ });
17
+
18
+ test('invalid queries', ({ expect }) => {
19
+ const cases = [
20
+ //
21
+ '!',
22
+ 'X:',
23
+ ':Y',
24
+ 'X;Y',
25
+ 'x==100',
26
+ ];
27
+
28
+ for (const query of cases) {
29
+ const parser = new QueryParser(query);
30
+ expect(() => parser.parse()).toThrow();
31
+ }
32
+ });
33
+
34
+ test('valid queries', ({ expect }) => {
35
+ const cases = [
36
+ //
37
+ '',
38
+ 'type:Person',
39
+ '$title = "foo"',
40
+ '(type:Person OR type:Organization) AND $title = "DXOS" AND $ts < TODAY',
41
+ ];
42
+
43
+ for (const query of cases) {
44
+ const parser = new QueryParser(query);
45
+ expect(parser.parse()).to.exist;
46
+ }
47
+ });
48
+
49
+ test('simple queries', ({ expect }) => {
50
+ const cases = [
51
+ {
52
+ query: 'type:Person',
53
+ ast: {
54
+ type: 'binary',
55
+ operator: 'EQ',
56
+ left: { type: 'identifier', name: 'type' },
57
+ right: { type: 'literal', value: 'Person' },
58
+ },
59
+ },
60
+ {
61
+ query: '$title = "DXOS"',
62
+ ast: {
63
+ type: 'binary',
64
+ operator: 'EQ',
65
+ left: { type: 'identifier', name: '$title' },
66
+ right: { type: 'literal', value: 'DXOS' },
67
+ },
68
+ },
69
+ {
70
+ query: '(type:Person OR type:Organization) AND $title = "DXOS" AND $ts < TODAY',
71
+ ast: {
72
+ left: {
73
+ left: {
74
+ left: {
75
+ left: {
76
+ name: 'type',
77
+ type: 'identifier',
78
+ },
79
+ operator: 'EQ',
80
+ right: {
81
+ type: 'literal',
82
+ value: 'Person',
83
+ },
84
+ type: 'binary',
85
+ },
86
+ operator: 'OR',
87
+ right: {
88
+ left: {
89
+ name: 'type',
90
+ type: 'identifier',
91
+ },
92
+ operator: 'EQ',
93
+ right: {
94
+ type: 'literal',
95
+ value: 'Organization',
96
+ },
97
+ type: 'binary',
98
+ },
99
+ type: 'binary',
100
+ },
101
+ operator: 'AND',
102
+ right: {
103
+ left: {
104
+ name: '$title',
105
+ type: 'identifier',
106
+ },
107
+ operator: 'EQ',
108
+ right: {
109
+ type: 'literal',
110
+ value: 'DXOS',
111
+ },
112
+ type: 'binary',
113
+ },
114
+ type: 'binary',
115
+ },
116
+ operator: 'AND',
117
+ right: {
118
+ left: {
119
+ name: '$ts',
120
+ type: 'identifier',
121
+ },
122
+ operator: 'LT',
123
+ right: {
124
+ type: 'literal',
125
+ value: 'TODAY',
126
+ },
127
+ type: 'binary',
128
+ },
129
+ type: 'binary',
130
+ },
131
+ },
132
+ ];
133
+
134
+ for (const { query, ast } of cases) {
135
+ const parser = new QueryParser(query);
136
+ expect(parser.parse()).toEqual(ast);
137
+ }
138
+ });
139
+ });