@dxos/plugin-assistant 0.8.1-staging.391c573 → 0.8.1-staging.5be625a

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 (207) hide show
  1. package/dist/lib/browser/{AssistantDialog-CM33SOCT.mjs → AssistantDialog-EIUUSXDS.mjs} +11 -10
  2. package/dist/lib/browser/AssistantDialog-EIUUSXDS.mjs.map +7 -0
  3. package/dist/lib/browser/{ChatContainer-VW73VNUY.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-4DIOTGOG.mjs → app-graph-builder-DTCUWBKB.mjs} +57 -6
  9. package/dist/lib/browser/app-graph-builder-DTCUWBKB.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-M2SADJVS.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-WVME6K4X.mjs → chunk-KGIACFAX.mjs} +333 -205
  16. package/dist/lib/browser/chunk-KGIACFAX.mjs.map +7 -0
  17. package/dist/lib/browser/{chunk-NTLTGYYS.mjs → chunk-SVUCJXGN.mjs} +2 -2
  18. package/dist/lib/browser/chunk-SVUCJXGN.mjs.map +7 -0
  19. package/dist/lib/browser/{chunk-FPXC3LKK.mjs → chunk-X6ALDUA5.mjs} +25 -3
  20. package/dist/lib/browser/{chunk-FPXC3LKK.mjs.map → chunk-X6ALDUA5.mjs.map} +3 -3
  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-FQRN6747.mjs → intent-resolver-U57FXP3I.mjs} +6 -3
  24. package/dist/lib/browser/{intent-resolver-FQRN6747.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-ZT6EQ7FJ.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-VVQUGG56.mjs → settings-VAW6UWFL.mjs} +3 -3
  29. package/dist/lib/browser/types/index.mjs +6 -2
  30. package/dist/lib/node/{AssistantDialog-5PVOCPE2.cjs → AssistantDialog-GT7R7MKH.cjs} +17 -16
  31. package/dist/lib/node/AssistantDialog-GT7R7MKH.cjs.map +7 -0
  32. package/dist/lib/node/{ChatContainer-I45I3ICI.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-6CY35ZIR.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-7O4U4RXH.cjs → app-graph-builder-3P6WSON2.cjs} +63 -13
  38. package/dist/lib/node/app-graph-builder-3P6WSON2.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-HFOUAFOW.cjs → chunk-G2HY3UJ4.cjs} +40 -18
  40. package/dist/lib/node/chunk-G2HY3UJ4.cjs.map +7 -0
  41. package/dist/lib/node/{chunk-JWUHUQ56.cjs → chunk-JAB6KLPP.cjs} +334 -210
  42. package/dist/lib/node/chunk-JAB6KLPP.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-34WE2FD2.cjs → chunk-KLSNCP34.cjs} +31 -7
  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-3WXG6WA6.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-Z37RNNMC.cjs → intent-resolver-YIFAMM3B.cjs} +13 -10
  53. package/dist/lib/node/{intent-resolver-Z37RNNMC.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-KFXP3GGK.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-TJHHVI6B.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-Q2ZBOHOV.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-5ULBF3GW.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-SX3SREXF.mjs → app-graph-builder-PMAQLTTN.mjs} +57 -6
  68. package/dist/lib/node-esm/app-graph-builder-PMAQLTTN.mjs.map +7 -0
  69. package/dist/lib/node-esm/{chunk-ICQN3TDS.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-LELXJPGJ.mjs → chunk-NMMRHHAR.mjs} +25 -3
  75. package/dist/lib/node-esm/{chunk-LELXJPGJ.mjs.map → chunk-NMMRHHAR.mjs.map} +3 -3
  76. package/dist/lib/node-esm/{chunk-ASMI7PQ2.mjs → chunk-PK5JCOYB.mjs} +333 -205
  77. package/dist/lib/node-esm/chunk-PK5JCOYB.mjs.map +7 -0
  78. package/dist/lib/node-esm/{chunk-2OUUYMBT.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-LOTXWV4J.mjs → intent-resolver-SQ4HLL5L.mjs} +6 -3
  83. package/dist/lib/node-esm/{intent-resolver-LOTXWV4J.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-NZNNP2QI.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-BVWR244C.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 -1
  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 +2 -1
  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 +4 -3
  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.map +1 -1
  102. package/dist/types/src/components/Prompt/Prompt.d.ts +3 -0
  103. package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -1
  104. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +1 -0
  105. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -1
  106. package/dist/types/src/components/Prompt/PromptBar.d.ts +2 -2
  107. package/dist/types/src/components/Prompt/PromptBar.d.ts.map +1 -1
  108. package/dist/types/src/components/Prompt/references.d.ts +30 -0
  109. package/dist/types/src/components/Prompt/references.d.ts.map +1 -0
  110. package/dist/types/src/components/TemplateContainer.d.ts.map +1 -1
  111. package/dist/types/src/components/Thread/Thread.d.ts +11 -1
  112. package/dist/types/src/components/Thread/Thread.d.ts.map +1 -1
  113. package/dist/types/src/components/Thread/ThreadContainer.d.ts +1 -0
  114. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
  115. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
  116. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
  117. package/dist/types/src/hooks/email.d.ts.map +1 -1
  118. package/dist/types/src/hooks/index.d.ts +1 -0
  119. package/dist/types/src/hooks/index.d.ts.map +1 -1
  120. package/dist/types/src/hooks/processor.d.ts +7 -15
  121. package/dist/types/src/hooks/processor.d.ts.map +1 -1
  122. package/dist/types/src/hooks/useChatProcessor.d.ts +9 -2
  123. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  124. package/dist/types/src/hooks/useContextProvider.d.ts +17 -0
  125. package/dist/types/src/hooks/useContextProvider.d.ts.map +1 -0
  126. package/dist/types/src/hooks/useMessageQueue.d.ts +4 -4
  127. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -1
  128. package/dist/types/src/meta.d.ts +2 -8
  129. package/dist/types/src/meta.d.ts.map +1 -1
  130. package/dist/types/src/testing/test-functions.d.ts.map +1 -1
  131. package/dist/types/src/translations.d.ts +23 -12
  132. package/dist/types/src/translations.d.ts.map +1 -1
  133. package/dist/types/src/types/template.d.ts +36 -0
  134. package/dist/types/src/types/template.d.ts.map +1 -1
  135. package/dist/types/src/types/types.d.ts +3 -1
  136. package/dist/types/src/types/types.d.ts.map +1 -1
  137. package/package.json +56 -55
  138. package/src/AssistantPlugin.tsx +11 -4
  139. package/src/capabilities/ai-client.ts +23 -5
  140. package/src/capabilities/app-graph-builder.ts +48 -2
  141. package/src/capabilities/capabilities.ts +3 -1
  142. package/src/capabilities/intent-resolver.ts +1 -1
  143. package/src/capabilities/react-surface.tsx +3 -2
  144. package/src/components/AmbientDialog/AmbientDialog.tsx +11 -11
  145. package/src/components/AssistantDialog.tsx +7 -1
  146. package/src/components/AssistantSettings/AssistantSettings.tsx +39 -5
  147. package/src/components/Prompt/Prompt.stories.tsx +34 -0
  148. package/src/components/Prompt/Prompt.tsx +28 -18
  149. package/src/components/Prompt/PromptBar.tsx +3 -1
  150. package/src/components/Prompt/references.ts +180 -0
  151. package/src/components/TemplateContainer.tsx +79 -4
  152. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +1 -1
  153. package/src/components/TemplateEditor/TemplateForm.stories.tsx +1 -1
  154. package/src/components/Thread/Thread.tsx +21 -0
  155. package/src/components/Thread/ThreadContainer.stories.tsx +5 -10
  156. package/src/components/Thread/ThreadContainer.tsx +7 -4
  157. package/src/components/Thread/ThreadMessage.tsx +17 -9
  158. package/src/hooks/email.ts +3 -3
  159. package/src/hooks/index.ts +1 -0
  160. package/src/hooks/processor.ts +57 -116
  161. package/src/hooks/useChatProcessor.tsx +24 -16
  162. package/src/hooks/useContextProvider.ts +55 -0
  163. package/src/hooks/useMessageQueue.ts +2 -4
  164. package/src/meta.ts +2 -2
  165. package/src/testing/test-functions.ts +2 -2
  166. package/src/translations.ts +10 -5
  167. package/src/types/template.ts +22 -0
  168. package/src/types/types.ts +3 -1
  169. package/dist/lib/browser/AssistantDialog-CM33SOCT.mjs.map +0 -7
  170. package/dist/lib/browser/TemplateContainer-B7MQNUPY.mjs +0 -23
  171. package/dist/lib/browser/TemplateContainer-B7MQNUPY.mjs.map +0 -7
  172. package/dist/lib/browser/ai-client-HZPB7E6M.mjs +0 -22
  173. package/dist/lib/browser/ai-client-HZPB7E6M.mjs.map +0 -7
  174. package/dist/lib/browser/app-graph-builder-4DIOTGOG.mjs.map +0 -7
  175. package/dist/lib/browser/chunk-M2SADJVS.mjs.map +0 -7
  176. package/dist/lib/browser/chunk-NTLTGYYS.mjs.map +0 -7
  177. package/dist/lib/browser/chunk-WVME6K4X.mjs.map +0 -7
  178. package/dist/lib/browser/react-surface-ZT6EQ7FJ.mjs.map +0 -7
  179. package/dist/lib/node/AssistantDialog-5PVOCPE2.cjs.map +0 -7
  180. package/dist/lib/node/TemplateContainer-R4BZZP3E.cjs +0 -53
  181. package/dist/lib/node/TemplateContainer-R4BZZP3E.cjs.map +0 -7
  182. package/dist/lib/node/ai-client-6CY35ZIR.cjs.map +0 -7
  183. package/dist/lib/node/app-graph-builder-7O4U4RXH.cjs.map +0 -7
  184. package/dist/lib/node/chunk-34WE2FD2.cjs.map +0 -7
  185. package/dist/lib/node/chunk-3WXG6WA6.cjs.map +0 -7
  186. package/dist/lib/node/chunk-HFOUAFOW.cjs.map +0 -7
  187. package/dist/lib/node/chunk-JWUHUQ56.cjs.map +0 -7
  188. package/dist/lib/node/react-surface-KFXP3GGK.cjs.map +0 -7
  189. package/dist/lib/node-esm/AssistantDialog-Q2ZBOHOV.mjs.map +0 -7
  190. package/dist/lib/node-esm/TemplateContainer-WSHTZBB5.mjs +0 -24
  191. package/dist/lib/node-esm/TemplateContainer-WSHTZBB5.mjs.map +0 -7
  192. package/dist/lib/node-esm/ai-client-GSA67EIB.mjs +0 -23
  193. package/dist/lib/node-esm/ai-client-GSA67EIB.mjs.map +0 -7
  194. package/dist/lib/node-esm/app-graph-builder-SX3SREXF.mjs.map +0 -7
  195. package/dist/lib/node-esm/chunk-2OUUYMBT.mjs.map +0 -7
  196. package/dist/lib/node-esm/chunk-ASMI7PQ2.mjs.map +0 -7
  197. package/dist/lib/node-esm/chunk-ICQN3TDS.mjs.map +0 -7
  198. package/dist/lib/node-esm/react-surface-NZNNP2QI.mjs.map +0 -7
  199. /package/dist/lib/browser/{ChatContainer-VW73VNUY.mjs.map → ChatContainer-NHHA6CSP.mjs.map} +0 -0
  200. /package/dist/lib/browser/{chunk-EUMPBC4T.mjs.map → chunk-6FTPLBSC.mjs.map} +0 -0
  201. /package/dist/lib/browser/{settings-VVQUGG56.mjs.map → settings-VAW6UWFL.mjs.map} +0 -0
  202. /package/dist/lib/node/{ChatContainer-I45I3ICI.cjs.map → ChatContainer-JUZOEZZ7.cjs.map} +0 -0
  203. /package/dist/lib/node/{chunk-NV4TQQSU.cjs.map → chunk-N3SW6DJ6.cjs.map} +0 -0
  204. /package/dist/lib/node/{settings-TJHHVI6B.cjs.map → settings-2FEYGLYU.cjs.map} +0 -0
  205. /package/dist/lib/node-esm/{ChatContainer-5ULBF3GW.mjs.map → ChatContainer-ZNN5CMVL.mjs.map} +0 -0
  206. /package/dist/lib/node-esm/{chunk-LBQGJE5T.mjs.map → chunk-J63VQFQO.mjs.map} +0 -0
  207. /package/dist/lib/node-esm/{settings-BVWR244C.mjs.map → settings-VHR5KT4J.mjs.map} +0 -0
@@ -1,14 +1,14 @@
1
1
  import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
2
  import {
3
3
  AssistantCapabilities
4
- } from "./chunk-ICQN3TDS.mjs";
4
+ } from "./chunk-2CIYX3SD.mjs";
5
5
  import {
6
6
  ServiceType,
7
7
  categoryIcons
8
- } from "./chunk-LELXJPGJ.mjs";
8
+ } from "./chunk-NMMRHHAR.mjs";
9
9
  import {
10
10
  ASSISTANT_PLUGIN
11
- } from "./chunk-7SV6X6XU.mjs";
11
+ } from "./chunk-N6BVC2C2.mjs";
12
12
 
13
13
  // packages/plugins/experimental/plugin-assistant/src/components/Toolbox/Toolbox.tsx
14
14
  import React, { useState, useEffect, Fragment } from "react";
@@ -551,7 +551,7 @@ import { keyToFallback } from "@dxos/util";
551
551
  // packages/plugins/experimental/plugin-assistant/src/components/Thread/ThreadMessage.tsx
552
552
  import React3 from "react";
553
553
  import { invariant as invariant2 } from "@dxos/invariant";
554
- import { Button, ButtonGroup, Icon, IconButton } from "@dxos/react-ui";
554
+ import { Button, Icon, IconButton } from "@dxos/react-ui";
555
555
  import { MarkdownViewer, ToggleContainer as NativeToggleContainer } from "@dxos/react-ui-components";
556
556
  import { Json as Json2 } from "@dxos/react-ui-syntax-highlighter";
557
557
  import { mx as mx2 } from "@dxos/react-ui-theme";
@@ -682,7 +682,7 @@ var ToolContainer = ({ classNames, items }) => {
682
682
  // packages/plugins/experimental/plugin-assistant/src/components/Thread/ThreadMessage.tsx
683
683
  var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-assistant/src/components/Thread/ThreadMessage.tsx";
684
684
  var panelClassNames = "flex flex-col w-full px-2 bg-groupSurface rounded-md";
685
- var userClassNames = "bg-[--user-fill]";
685
+ var userClassNames = "bg-[--user-fill] text-inverse";
686
686
  var ToggleContainer2 = (props) => {
687
687
  return /* @__PURE__ */ React3.createElement(NativeToggleContainer, {
688
688
  ...props,
@@ -707,7 +707,7 @@ var ThreadMessage = ({ classNames, space, message, tools, onPrompt }) => {
707
707
  const { role, content = [] } = message;
708
708
  if (isToolMessage(message)) {
709
709
  return /* @__PURE__ */ React3.createElement(MessageContainer, {
710
- classNames
710
+ classNames: mx2(classNames, "animate-[fadeIn_0.5s]")
711
711
  }, /* @__PURE__ */ React3.createElement(ToolBlock, {
712
712
  space,
713
713
  classNames: panelClassNames,
@@ -722,7 +722,7 @@ var ThreadMessage = ({ classNames, space, message, tools, onPrompt }) => {
722
722
  const Component = components[block.type] ?? components.default;
723
723
  return /* @__PURE__ */ React3.createElement(MessageContainer, {
724
724
  key: idx,
725
- classNames,
725
+ classNames: mx2(classNames, "animate-[fadeIn_0.5s]"),
726
726
  user: block.type === "text" && role === "user"
727
727
  }, /* @__PURE__ */ React3.createElement(Component, {
728
728
  space,
@@ -738,7 +738,7 @@ var components = {
738
738
  ["text"]: ({ block }) => {
739
739
  invariant2(block.type === "text", void 0, {
740
740
  F: __dxlog_file5,
741
- L: 86,
741
+ L: 90,
742
742
  S: void 0,
743
743
  A: [
744
744
  "block.type === 'text'",
@@ -748,6 +748,7 @@ var components = {
748
748
  const title = block.disposition ? titles[block.disposition] : void 0;
749
749
  if (!title) {
750
750
  return /* @__PURE__ */ React3.createElement(MarkdownViewer, {
751
+ classNames: "[&>p]:animate-[fadeIn_0.5s]",
751
752
  content: block.text
752
753
  });
753
754
  }
@@ -774,7 +775,7 @@ var components = {
774
775
  ["json"]: ({ space, block, onPrompt }) => {
775
776
  invariant2(block.type === "json", void 0, {
776
777
  F: __dxlog_file5,
777
- L: 124,
778
+ L: 128,
778
779
  S: void 0,
779
780
  A: [
780
781
  "block.type === 'json'",
@@ -801,7 +802,10 @@ var components = {
801
802
  }
802
803
  case "select": {
803
804
  const { options = [] } = safeParseJson(block.json ?? "{}") ?? {};
804
- return /* @__PURE__ */ React3.createElement(ButtonGroup, null, options.map((option) => /* @__PURE__ */ React3.createElement(Button, {
805
+ return /* @__PURE__ */ React3.createElement("div", {
806
+ className: "flex flex-wrap gap-1"
807
+ }, options.map((option, idx) => /* @__PURE__ */ React3.createElement(Button, {
808
+ classNames: "animate-[fadeIn_0.5s] rounded-2xl text-sm",
805
809
  key: option,
806
810
  onClick: () => onPrompt?.(option)
807
811
  }, option)));
@@ -890,9 +894,10 @@ var messageReducer = ({ current, messages }, message) => {
890
894
  };
891
895
 
892
896
  // packages/plugins/experimental/plugin-assistant/src/components/Prompt/Prompt.tsx
897
+ import { Prec as Prec2 } from "@codemirror/state";
893
898
  import React4, { forwardRef, useImperativeHandle } from "react";
894
899
  import { useThemeContext } from "@dxos/react-ui";
895
- import { createBasicExtensions, createThemeExtensions, keymap as keymap2, useTextEditor } from "@dxos/react-ui-editor";
900
+ import { createBasicExtensions, createThemeExtensions, keymap as keymap3, useTextEditor } from "@dxos/react-ui-editor";
896
901
  import { mx as mx3 } from "@dxos/react-ui-theme";
897
902
 
898
903
  // packages/plugins/experimental/plugin-assistant/src/components/Prompt/autocomplete.ts
@@ -1049,10 +1054,127 @@ var InlineSuggestionWidget = class extends WidgetType {
1049
1054
  }
1050
1055
  };
1051
1056
 
1057
+ // packages/plugins/experimental/plugin-assistant/src/components/Prompt/references.ts
1058
+ import { autocompletion, completionKeymap } from "@codemirror/autocomplete";
1059
+ import { RangeSet } from "@codemirror/state";
1060
+ import { Decoration as Decoration2, EditorView as EditorView2, keymap as keymap2, ViewPlugin as ViewPlugin2, WidgetType as WidgetType2 } from "@codemirror/view";
1061
+ import { Mutex } from "@dxos/async";
1062
+ var promptReferences = ({ provider, debug = false, triggerCharacter = "@" }) => {
1063
+ if (triggerCharacter.length !== 1) {
1064
+ throw new Error("triggerCharacter must be a single character");
1065
+ }
1066
+ const decorationField = ViewPlugin2.fromClass(class ReferenceView {
1067
+ constructor(view) {
1068
+ this._mutex = new Mutex();
1069
+ this.decorations = Decoration2.set([]);
1070
+ queueMicrotask(async () => {
1071
+ const guard = await this._mutex.acquire();
1072
+ try {
1073
+ this.decorations = await this._computeDecorations(view);
1074
+ } finally {
1075
+ guard.release();
1076
+ }
1077
+ });
1078
+ }
1079
+ update(update) {
1080
+ if (update.docChanged) {
1081
+ queueMicrotask(async () => {
1082
+ const guard = await this._mutex.acquire();
1083
+ try {
1084
+ this.decorations = await this._computeDecorations(update.view);
1085
+ } finally {
1086
+ guard.release();
1087
+ }
1088
+ });
1089
+ }
1090
+ }
1091
+ async _computeDecorations(view) {
1092
+ const text = view.state.doc.toString();
1093
+ const references = text.matchAll(new RegExp(`${triggerCharacter}[a-zA-Z0-9@:]+\\s`, "g"));
1094
+ const decorations = [];
1095
+ for (const match of references) {
1096
+ const reference = match[0];
1097
+ const uri = reference.slice(1, -1);
1098
+ const data = await provider.resolveReference({
1099
+ uri
1100
+ });
1101
+ if (data) {
1102
+ decorations.push(Decoration2.replace({
1103
+ widget: new ReferenceWidget(data)
1104
+ }).range(match.index, match.index + reference.length));
1105
+ }
1106
+ }
1107
+ return Decoration2.set(decorations);
1108
+ }
1109
+ }, {
1110
+ decorations: (v) => v.decorations,
1111
+ provide: (plugin) => [
1112
+ EditorView2.atomicRanges.of((view) => view.plugin(decorationField)?.decorations ?? RangeSet.empty)
1113
+ ]
1114
+ });
1115
+ return [
1116
+ decorationField,
1117
+ EditorView2.theme({
1118
+ ".cm-reference-pill": {
1119
+ borderRadius: "0.25rem",
1120
+ borderWidth: "1px",
1121
+ marginRight: "0.25rem",
1122
+ marginLeft: "0.25rem"
1123
+ }
1124
+ }),
1125
+ autocompletion({
1126
+ activateOnTyping: true,
1127
+ override: [
1128
+ async (context) => {
1129
+ const match = context.matchBefore(new RegExp(`${triggerCharacter}[a-zA-Z0-9]+`));
1130
+ if (!match || match?.to === match?.from) {
1131
+ return null;
1132
+ }
1133
+ const query = match.text.slice(1);
1134
+ const references = await provider.getReferences({
1135
+ query
1136
+ });
1137
+ return {
1138
+ from: match.from,
1139
+ filter: false,
1140
+ options: references.map((reference) => ({
1141
+ label: reference.label,
1142
+ apply: `${triggerCharacter}${reference.uri} `
1143
+ }))
1144
+ };
1145
+ }
1146
+ ],
1147
+ closeOnBlur: !debug,
1148
+ tooltipClass: () => "shadow rounded",
1149
+ aboveCursor: true
1150
+ }),
1151
+ keymap2.of(completionKeymap)
1152
+ ];
1153
+ };
1154
+ var ReferenceWidget = class extends WidgetType2 {
1155
+ constructor(data) {
1156
+ super();
1157
+ this.data = data;
1158
+ }
1159
+ toDOM() {
1160
+ const span = document.createElement("span");
1161
+ span.textContent = `@ ${this.data.label}`;
1162
+ span.className = "cm-reference-pill";
1163
+ return span;
1164
+ }
1165
+ eq(other) {
1166
+ return other.data.uri === this.data.uri;
1167
+ }
1168
+ ignoreEvent() {
1169
+ return true;
1170
+ }
1171
+ };
1172
+
1052
1173
  // packages/plugins/experimental/plugin-assistant/src/components/Prompt/Prompt.tsx
1053
- var Prompt = /* @__PURE__ */ forwardRef(({ classNames, autoFocus, lineWrapping = false, placeholder, onSubmit, onSuggest, onOpenChange }, forwardRef2) => {
1174
+ var Prompt = /* @__PURE__ */ forwardRef(({ classNames, autoFocus, lineWrapping = false, placeholder, onSubmit, onSuggest, onOpenChange, references }, forwardRef2) => {
1054
1175
  const { themeMode } = useThemeContext();
1055
1176
  const { parentRef, view } = useTextEditor({
1177
+ debug: true,
1056
1178
  autoFocus,
1057
1179
  extensions: [
1058
1180
  createBasicExtensions({
@@ -1063,13 +1185,16 @@ var Prompt = /* @__PURE__ */ forwardRef(({ classNames, autoFocus, lineWrapping =
1063
1185
  createThemeExtensions({
1064
1186
  themeMode
1065
1187
  }),
1188
+ references ? promptReferences({
1189
+ provider: references
1190
+ }) : [],
1066
1191
  createAutocompleteExtension({
1067
1192
  onSubmit,
1068
1193
  onSuggest
1069
1194
  }),
1070
- keymap2.of([
1195
+ Prec2.highest(keymap3.of([
1071
1196
  {
1072
- key: "Alt-ArrowUp",
1197
+ key: "cmd-ArrowUp",
1073
1198
  preventDefault: true,
1074
1199
  run: (view2) => {
1075
1200
  onOpenChange?.(true);
@@ -1077,14 +1202,14 @@ var Prompt = /* @__PURE__ */ forwardRef(({ classNames, autoFocus, lineWrapping =
1077
1202
  }
1078
1203
  },
1079
1204
  {
1080
- key: "Alt-ArrowDown",
1205
+ key: "cmd-ArrowDown",
1081
1206
  preventDefault: true,
1082
1207
  run: (view2) => {
1083
1208
  onOpenChange?.(false);
1084
1209
  return true;
1085
1210
  }
1086
1211
  }
1087
- ])
1212
+ ]))
1088
1213
  ]
1089
1214
  }, [
1090
1215
  themeMode,
@@ -1116,7 +1241,7 @@ var Prompt = /* @__PURE__ */ forwardRef(({ classNames, autoFocus, lineWrapping =
1116
1241
  ]);
1117
1242
  return /* @__PURE__ */ React4.createElement("div", {
1118
1243
  ref: parentRef,
1119
- className: mx3("w-full overflow-hidden", classNames)
1244
+ className: mx3("w-full", classNames)
1120
1245
  });
1121
1246
  });
1122
1247
 
@@ -1126,7 +1251,7 @@ import { useVoiceInput } from "@dxos/plugin-transcription";
1126
1251
  import { Icon as Icon2, IconButton as IconButton2, Tooltip, useTranslation } from "@dxos/react-ui";
1127
1252
  import { Spinner } from "@dxos/react-ui-sfx";
1128
1253
  import { errorText, mx as mx4 } from "@dxos/react-ui-theme";
1129
- var PromptBar = ({ classNames, placeholder, processing, error, microphone, onCancel, ...props }) => {
1254
+ var PromptBar = ({ classNames, placeholder, processing, error, microphone, onCancel, references, ...props }) => {
1130
1255
  const { t } = useTranslation(ASSISTANT_PLUGIN);
1131
1256
  const promptRef = useRef2(null);
1132
1257
  const [active, setActive] = useState3(false);
@@ -1157,6 +1282,7 @@ var PromptBar = ({ classNames, placeholder, processing, error, microphone, onCan
1157
1282
  classNames: "pbs-2",
1158
1283
  lineWrapping: true,
1159
1284
  placeholder: placeholder ?? t("prompt placeholder"),
1285
+ references,
1160
1286
  ...props
1161
1287
  }), (onCancel || microphone) && /* @__PURE__ */ React5.createElement("div", {
1162
1288
  className: "flex w-[--rail-action] h-[--rail-action] items-center justify-center"
@@ -1184,7 +1310,7 @@ var PromptBar = ({ classNames, placeholder, processing, error, microphone, onCan
1184
1310
  };
1185
1311
 
1186
1312
  // packages/plugins/experimental/plugin-assistant/src/components/Thread/Thread.tsx
1187
- var Thread = ({ classNames, space, messages, collapse = true, transcription, processing, error, onSubmit, onCancel, onOpenChange, ...props }) => {
1313
+ var Thread = ({ classNames, space, messages, collapse = true, transcription, processing, error, onSubmit, onCancel, onOpenChange, contextProvider, ...props }) => {
1188
1314
  const scroller = useRef3(null);
1189
1315
  const identity = useIdentity();
1190
1316
  const fallbackValue = keyToFallback(identity.identityKey);
@@ -1210,6 +1336,21 @@ var Thread = ({ classNames, space, messages, collapse = true, transcription, pro
1210
1336
  messages,
1211
1337
  collapse
1212
1338
  ]);
1339
+ const references = useMemo2(() => {
1340
+ if (!contextProvider) {
1341
+ return void 0;
1342
+ }
1343
+ return {
1344
+ getReferences: async ({ query }) => contextProvider.query({
1345
+ query
1346
+ }),
1347
+ resolveReference: async ({ uri }) => contextProvider.resolveMetadata({
1348
+ uri
1349
+ })
1350
+ };
1351
+ }, [
1352
+ contextProvider
1353
+ ]);
1213
1354
  return /* @__PURE__ */ React6.createElement("div", {
1214
1355
  role: "none",
1215
1356
  className: mx5("flex flex-col grow overflow-hidden", classNames)
@@ -1234,38 +1375,36 @@ var Thread = ({ classNames, space, messages, collapse = true, transcription, pro
1234
1375
  error,
1235
1376
  onSubmit: handleSubmit,
1236
1377
  onCancel,
1237
- onOpenChange
1378
+ onOpenChange,
1379
+ references
1238
1380
  }));
1239
1381
  };
1240
1382
 
1241
1383
  // packages/plugins/experimental/plugin-assistant/src/components/Thread/ThreadContainer.tsx
1242
1384
  import React7, { useCallback as useCallback3 } from "react";
1243
1385
  import { invariant as invariant6 } from "@dxos/invariant";
1244
- import { log as log9 } from "@dxos/log";
1386
+ import { log as log10 } from "@dxos/log";
1245
1387
  import { getSpace as getSpace2 } from "@dxos/react-client/echo";
1246
1388
 
1247
1389
  // packages/plugins/experimental/plugin-assistant/src/hooks/processor.ts
1248
1390
  import { batch, computed, signal } from "@preact/signals-core";
1249
- import { Message } from "@dxos/artifact";
1250
- import { isToolUse, runTools, MixedStreamParser, DEFAULT_LLM_MODEL } from "@dxos/assistant";
1251
- import { createStatic } from "@dxos/echo-schema";
1391
+ import { AISession, DEFAULT_EDGE_MODEL } from "@dxos/assistant";
1252
1392
  import { invariant as invariant3 } from "@dxos/invariant";
1253
1393
  import { log as log5 } from "@dxos/log";
1254
1394
  var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-assistant/src/hooks/processor.ts";
1255
1395
  var defaultOptions = {
1256
- model: DEFAULT_LLM_MODEL,
1396
+ model: DEFAULT_EDGE_MODEL,
1257
1397
  systemPrompt: "you are a helpful assistant"
1258
1398
  };
1259
1399
  var ChatProcessor = class {
1260
- constructor(_ai, _tools, _extensions, _options = defaultOptions) {
1400
+ constructor(_ai, _tools, _artifacts, _extensions, _options = defaultOptions) {
1261
1401
  this._ai = _ai;
1262
1402
  this._tools = _tools;
1403
+ this._artifacts = _artifacts;
1263
1404
  this._extensions = _extensions;
1264
1405
  this._options = _options;
1265
- this._parser = new MixedStreamParser();
1266
1406
  this._pending = signal([]);
1267
1407
  this._block = signal(void 0);
1268
- this._history = [];
1269
1408
  this.streaming = computed(() => this._block.value !== void 0);
1270
1409
  this.error = signal(void 0);
1271
1410
  this.messages = computed(() => {
@@ -1276,7 +1415,7 @@ var ChatProcessor = class {
1276
1415
  const current = messages.pop();
1277
1416
  invariant3(current, void 0, {
1278
1417
  F: __dxlog_file6,
1279
- L: 85,
1418
+ L: 70,
1280
1419
  S: this,
1281
1420
  A: [
1282
1421
  "current",
@@ -1295,20 +1434,6 @@ var ChatProcessor = class {
1295
1434
  }
1296
1435
  return messages;
1297
1436
  });
1298
- this._parser.message.on((message) => {
1299
- batch(() => {
1300
- this._pending.value = [
1301
- ...this._pending.value,
1302
- message
1303
- ];
1304
- this._block.value = void 0;
1305
- });
1306
- });
1307
- this._parser.update.on((block) => {
1308
- batch(() => {
1309
- this._block.value = block;
1310
- });
1311
- });
1312
1437
  }
1313
1438
  get tools() {
1314
1439
  return this._tools;
@@ -1323,23 +1448,70 @@ var ChatProcessor = class {
1323
1448
  * Make GPT request.
1324
1449
  */
1325
1450
  async request(message, options = {}) {
1326
- batch(() => {
1327
- this._history = options.history ?? [];
1451
+ this._session = new AISession({
1452
+ operationModel: "immediate"
1453
+ });
1454
+ this._session.message.on((message2) => {
1455
+ batch(() => {
1456
+ this._pending.value = [
1457
+ ...this._pending.value,
1458
+ message2
1459
+ ];
1460
+ this._block.value = void 0;
1461
+ });
1462
+ });
1463
+ this._session.update.on((block) => {
1464
+ batch(() => {
1465
+ this._block.value = block;
1466
+ });
1467
+ });
1468
+ this._session.userMessage.on((message2) => {
1328
1469
  this._pending.value = [
1329
- createStatic(Message, {
1330
- role: "user",
1331
- content: [
1332
- {
1333
- type: "text",
1334
- text: message
1335
- }
1336
- ]
1337
- })
1470
+ ...this._pending.value,
1471
+ message2
1338
1472
  ];
1339
- this._block.value = void 0;
1340
1473
  });
1341
- await this._request();
1342
- options.onComplete?.(this._pending.value);
1474
+ try {
1475
+ const messages = await this._session.run({
1476
+ client: this._ai,
1477
+ history: options.history ?? [],
1478
+ artifacts: this._artifacts ?? [],
1479
+ tools: this._tools ?? [],
1480
+ prompt: message,
1481
+ extensions: this._extensions,
1482
+ generationOptions: {
1483
+ model: this._options.model,
1484
+ systemPrompt: this._options.systemPrompt
1485
+ }
1486
+ });
1487
+ log5.info("completed", {
1488
+ messages
1489
+ }, {
1490
+ F: __dxlog_file6,
1491
+ L: 137,
1492
+ S: this,
1493
+ C: (f, a) => f(...a)
1494
+ });
1495
+ options.onComplete?.(this._pending.value);
1496
+ } catch (err) {
1497
+ log5.catch(err, void 0, {
1498
+ F: __dxlog_file6,
1499
+ L: 141,
1500
+ S: this,
1501
+ C: (f, a) => f(...a)
1502
+ });
1503
+ if (err instanceof Error && err.message.includes("Overloaded")) {
1504
+ this.error.value = new AIServiceOverloadedError("AI service overloaded", {
1505
+ cause: err
1506
+ });
1507
+ } else {
1508
+ this.error.value = new Error("AI service error", {
1509
+ cause: err
1510
+ });
1511
+ }
1512
+ } finally {
1513
+ this._session = void 0;
1514
+ }
1343
1515
  return this._reset();
1344
1516
  }
1345
1517
  /**
@@ -1349,125 +1521,23 @@ var ChatProcessor = class {
1349
1521
  async cancel() {
1350
1522
  log5.info("cancelling...", void 0, {
1351
1523
  F: __dxlog_file6,
1352
- L: 152,
1524
+ L: 159,
1353
1525
  S: this,
1354
1526
  C: (f, a) => f(...a)
1355
1527
  });
1356
- this._stream?.abort();
1528
+ this._session?.abort();
1357
1529
  return this._reset();
1358
1530
  }
1359
1531
  async _reset() {
1360
1532
  const messages = this._pending.value;
1361
1533
  batch(() => {
1362
- this._history = [];
1363
1534
  this._pending.value = [];
1364
1535
  this._block.value = void 0;
1365
1536
  });
1366
1537
  return messages;
1367
1538
  }
1368
- /**
1369
- * Generate a response from the AI service.
1370
- * Iterates over tool requests.
1371
- */
1372
- async _request() {
1373
- try {
1374
- let more = false;
1375
- do {
1376
- log5("request", {
1377
- pending: this._pending.value.length,
1378
- history: this._history.length,
1379
- tools: this._tools?.map((tool) => tool.name)
1380
- }, {
1381
- F: __dxlog_file6,
1382
- L: 176,
1383
- S: this,
1384
- C: (f, a) => f(...a)
1385
- });
1386
- this._stream = await this._ai.exec({
1387
- ...this._options,
1388
- // TODO(burdon): Rename messages or separate history/message.
1389
- history: [
1390
- ...this._history,
1391
- ...this._pending.value
1392
- ],
1393
- tools: this._tools
1394
- });
1395
- await this._parser.parse(this._stream);
1396
- await this._stream.complete();
1397
- log5("response", {
1398
- pending: this._pending.value
1399
- }, {
1400
- F: __dxlog_file6,
1401
- L: 195,
1402
- S: this,
1403
- C: (f, a) => f(...a)
1404
- });
1405
- more = false;
1406
- const message = this._pending.value.at(-1);
1407
- invariant3(message, void 0, {
1408
- F: __dxlog_file6,
1409
- L: 200,
1410
- S: this,
1411
- A: [
1412
- "message",
1413
- ""
1414
- ]
1415
- });
1416
- if (isToolUse(message)) {
1417
- log5("tool request...", void 0, {
1418
- F: __dxlog_file6,
1419
- L: 202,
1420
- S: this,
1421
- C: (f, a) => f(...a)
1422
- });
1423
- const response = await runTools({
1424
- message: this._pending.value.at(-1),
1425
- tools: this._tools ?? [],
1426
- extensions: this._extensions
1427
- });
1428
- log5("tool response", {
1429
- response
1430
- }, {
1431
- F: __dxlog_file6,
1432
- L: 209,
1433
- S: this,
1434
- C: (f, a) => f(...a)
1435
- });
1436
- switch (response.type) {
1437
- case "continue": {
1438
- this._pending.value = [
1439
- ...this._pending.value,
1440
- response.message
1441
- ];
1442
- more = true;
1443
- break;
1444
- }
1445
- }
1446
- }
1447
- } while (more);
1448
- this.error.value = void 0;
1449
- } catch (err) {
1450
- log5.catch(err, void 0, {
1451
- F: __dxlog_file6,
1452
- L: 222,
1453
- S: this,
1454
- C: (f, a) => f(...a)
1455
- });
1456
- if (err instanceof Error && err.message.includes("Overloaded")) {
1457
- this.error.value = new AIServiecOverloadedError("AI service overloaded", {
1458
- cause: err
1459
- });
1460
- } else {
1461
- this.error.value = new Error("AI service error", {
1462
- cause: err
1463
- });
1464
- }
1465
- } finally {
1466
- this._stream = void 0;
1467
- }
1468
- }
1469
1539
  };
1470
- var AIServiecOverloadedError = class extends Error {
1540
+ var AIServiceOverloadedError = class extends Error {
1471
1541
  constructor() {
1472
1542
  super(...arguments);
1473
1543
  this.code = "AI_SERVICE_OVERLOADED";
@@ -1478,24 +1548,24 @@ var AIServiecOverloadedError = class extends Error {
1478
1548
  import { useEffect as useEffect3, useMemo as useMemo3, useState as useState4 } from "react";
1479
1549
  import { Capabilities as Capabilities2, useCapabilities as useCapabilities2, useCapability, useIntentDispatcher } from "@dxos/app-framework";
1480
1550
  import { createSystemPrompt } from "@dxos/artifact";
1481
- import { DEFAULT_LLM_MODEL as DEFAULT_LLM_MODEL2 } from "@dxos/assistant";
1551
+ import { DEFAULT_EDGE_MODEL as DEFAULT_EDGE_MODEL2, DEFAULT_OLLAMA_MODEL } from "@dxos/assistant";
1482
1552
  import { FunctionType as FunctionType2 } from "@dxos/functions/types";
1483
1553
  import { log as log6 } from "@dxos/log";
1484
1554
  import { useConfig } from "@dxos/react-client";
1485
- import { Filter as Filter2, useQuery as useQuery2 } from "@dxos/react-client/echo";
1555
+ import { Filter as Filter2, fullyQualifiedId, useQuery as useQuery2 } from "@dxos/react-client/echo";
1486
1556
  import { isNonNullable as isNonNullable2 } from "@dxos/util";
1487
1557
 
1488
1558
  // packages/plugins/experimental/plugin-assistant/src/capabilities/index.ts
1489
1559
  import { lazy } from "@dxos/app-framework";
1490
- var AiClient = lazy(() => import("./ai-client-GSA67EIB.mjs"));
1491
- var AppGraphBuilder = lazy(() => import("./app-graph-builder-SX3SREXF.mjs"));
1492
- var IntentResolver = lazy(() => import("./intent-resolver-LOTXWV4J.mjs"));
1493
- var ReactSurface = lazy(() => import("./react-surface-NZNNP2QI.mjs"));
1494
- var AssistantSettings = lazy(() => import("./settings-BVWR244C.mjs"));
1560
+ var AiClient = lazy(() => import("./ai-client-XYZ5N7CR.mjs"));
1561
+ var AppGraphBuilder = lazy(() => import("./app-graph-builder-PMAQLTTN.mjs"));
1562
+ var IntentResolver = lazy(() => import("./intent-resolver-SQ4HLL5L.mjs"));
1563
+ var ReactSurface = lazy(() => import("./react-surface-424JZTZ4.mjs"));
1564
+ var AssistantSettings = lazy(() => import("./settings-VHR5KT4J.mjs"));
1495
1565
 
1496
1566
  // packages/plugins/experimental/plugin-assistant/src/hooks/useChatProcessor.tsx
1497
1567
  var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-assistant/src/hooks/useChatProcessor.tsx";
1498
- var useChatProcessor = (space, settings) => {
1568
+ var useChatProcessor = ({ chat, space, settings, part = "deck" }) => {
1499
1569
  const aiClient = useCapability(AssistantCapabilities.AiClient);
1500
1570
  const globalTools = useCapabilities2(Capabilities2.Tools);
1501
1571
  const artifactDefinitions = useCapabilities2(Capabilities2.ArtifactDefinition);
@@ -1505,7 +1575,7 @@ var useChatProcessor = (space, settings) => {
1505
1575
  useEffect3(() => {
1506
1576
  log6("creating service tools...", void 0, {
1507
1577
  F: __dxlog_file7,
1508
- L: 34,
1578
+ L: 41,
1509
1579
  S: void 0,
1510
1580
  C: (f, a) => f(...a)
1511
1581
  });
@@ -1518,22 +1588,26 @@ var useChatProcessor = (space, settings) => {
1518
1588
  ]);
1519
1589
  const config = useConfig();
1520
1590
  const functions = useQuery2(space, Filter2.schema(FunctionType2));
1591
+ const chatId = useMemo3(() => chat ? fullyQualifiedId(chat) : void 0, [
1592
+ chat
1593
+ ]);
1521
1594
  const [tools, extensions] = useMemo3(() => {
1522
1595
  log6("creating tools...", void 0, {
1523
1596
  F: __dxlog_file7,
1524
- L: 45,
1597
+ L: 53,
1525
1598
  S: void 0,
1526
1599
  C: (f, a) => f(...a)
1527
1600
  });
1528
1601
  const tools2 = [
1529
1602
  ...globalTools.flat(),
1530
- ...artifactDefinitions.flatMap((definition) => definition.tools),
1531
1603
  ...serviceTools,
1532
1604
  ...functions.map((fn) => covertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? "", space?.id)).filter(isNonNullable2)
1533
1605
  ];
1534
1606
  const extensions2 = {
1535
1607
  space,
1536
- dispatch
1608
+ dispatch,
1609
+ pivotId: chatId,
1610
+ part
1537
1611
  };
1538
1612
  return [
1539
1613
  tools2,
@@ -1542,8 +1616,8 @@ var useChatProcessor = (space, settings) => {
1542
1616
  }, [
1543
1617
  dispatch,
1544
1618
  globalTools,
1545
- artifactDefinitions,
1546
1619
  space,
1620
+ chatId,
1547
1621
  serviceTools,
1548
1622
  functions
1549
1623
  ]);
@@ -1552,34 +1626,33 @@ var useChatProcessor = (space, settings) => {
1552
1626
  }), [
1553
1627
  artifactDefinitions
1554
1628
  ]);
1629
+ const model = settings?.llmProvider === "ollama" ? settings?.ollamaModel ?? DEFAULT_OLLAMA_MODEL : settings?.edgeModel ?? DEFAULT_EDGE_MODEL2;
1555
1630
  const processor = useMemo3(() => {
1556
1631
  log6("creating processor...", {
1557
1632
  settings
1558
1633
  }, {
1559
1634
  F: __dxlog_file7,
1560
- L: 70,
1635
+ L: 83,
1561
1636
  S: void 0,
1562
1637
  C: (f, a) => f(...a)
1563
1638
  });
1564
- return new ChatProcessor(aiClient, tools, extensions, {
1565
- // TODO(burdon): Remove defualt (let backend decide if not specified).
1566
- model: settings?.llmModel ?? DEFAULT_LLM_MODEL2,
1567
- // TOOD(burdon): Query.
1639
+ return new ChatProcessor(aiClient.value, tools, artifactDefinitions, extensions, {
1640
+ model,
1568
1641
  systemPrompt
1569
1642
  });
1570
1643
  }, [
1571
- aiClient,
1644
+ aiClient.value,
1572
1645
  tools,
1573
1646
  extensions,
1574
- systemPrompt,
1575
- settings?.llmModel
1647
+ model,
1648
+ systemPrompt
1576
1649
  ]);
1577
1650
  return processor;
1578
1651
  };
1579
1652
 
1580
1653
  // packages/plugins/experimental/plugin-assistant/src/hooks/useLocalTriggerManager.ts
1581
1654
  import { useEffect as useEffect4, useState as useState5 } from "react";
1582
- import { Mutex } from "@dxos/async";
1655
+ import { Mutex as Mutex2 } from "@dxos/async";
1583
1656
  import { Context } from "@dxos/context";
1584
1657
  import { createSubscriptionTrigger } from "@dxos/functions";
1585
1658
  import { FunctionTrigger } from "@dxos/functions/types";
@@ -1597,13 +1670,12 @@ import { DXN, LOCAL_SPACE_TAG } from "@dxos/keys";
1597
1670
  import { log as log7 } from "@dxos/log";
1598
1671
 
1599
1672
  // packages/plugins/experimental/plugin-assistant/src/hooks/useLocalTriggerManager.ts
1600
- var registerTriggersMutex = new Mutex();
1673
+ var registerTriggersMutex = new Mutex2();
1601
1674
 
1602
1675
  // packages/plugins/experimental/plugin-assistant/src/hooks/useMessageQueue.ts
1603
1676
  import { useMemo as useMemo4 } from "react";
1604
1677
  import { DXN as DXN2, QueueSubspaceTags } from "@dxos/keys";
1605
- import { getSpace } from "@dxos/react-client/echo";
1606
- import { useEdgeClient, useQueue } from "@dxos/react-edge-client";
1678
+ import { getSpace, useQueue } from "@dxos/react-client/echo";
1607
1679
  var useMessageQueue = (chat) => {
1608
1680
  const space = getSpace(chat);
1609
1681
  const queueDxn = useMemo4(() => {
@@ -1617,8 +1689,7 @@ var useMessageQueue = (chat) => {
1617
1689
  space,
1618
1690
  chat?.queue.dxn
1619
1691
  ]);
1620
- const edgeClient = useEdgeClient();
1621
- return useQueue(edgeClient, queueDxn);
1692
+ return useQueue(queueDxn);
1622
1693
  };
1623
1694
 
1624
1695
  // packages/plugins/experimental/plugin-assistant/src/hooks/useServices.ts
@@ -1626,10 +1697,10 @@ import { useEffect as useEffect5, useMemo as useMemo5, useState as useState6 } f
1626
1697
 
1627
1698
  // packages/plugins/experimental/plugin-assistant/src/testing/test-functions.ts
1628
1699
  import { createSystemPrompt as createSystemPrompt2 } from "@dxos/artifact";
1629
- import { DEFAULT_LLM_MODEL as DEFAULT_LLM_MODEL3 } from "@dxos/assistant";
1700
+ import { DEFAULT_EDGE_MODEL as DEFAULT_EDGE_MODEL3 } from "@dxos/assistant";
1630
1701
 
1631
1702
  // packages/plugins/experimental/plugin-assistant/src/testing/test-services.ts
1632
- import { createStatic as createStatic2 } from "@dxos/echo-schema";
1703
+ import { createStatic } from "@dxos/echo-schema";
1633
1704
  var MockServiceRegistry = class {
1634
1705
  async queryServices(query) {
1635
1706
  return TEST_SERVICES;
@@ -1651,7 +1722,7 @@ var VISUAL_CROSSING_CREDENTIALS = {
1651
1722
  }
1652
1723
  };
1653
1724
  var TEST_SERVICES = [
1654
- createStatic2(ServiceType, {
1725
+ createStatic(ServiceType, {
1655
1726
  serviceId: "amadeus.com/service/FlightSearch",
1656
1727
  name: "Amadeus Flight Search",
1657
1728
  description: "Search for local and international flights.",
@@ -1664,7 +1735,7 @@ var TEST_SERVICES = [
1664
1735
  }
1665
1736
  ]
1666
1737
  }),
1667
- createStatic2(ServiceType, {
1738
+ createStatic(ServiceType, {
1668
1739
  serviceId: "amadeus.com/service/HotelSearch",
1669
1740
  name: "Amadeus Hotel Search",
1670
1741
  description: "Search for local and international hotels.",
@@ -1677,7 +1748,7 @@ var TEST_SERVICES = [
1677
1748
  }
1678
1749
  ]
1679
1750
  }),
1680
- createStatic2(ServiceType, {
1751
+ createStatic(ServiceType, {
1681
1752
  serviceId: "visualcrossing.com/service/Weather",
1682
1753
  name: "Visual Crossing Weather",
1683
1754
  description: "Search for global weather forecasts.",
@@ -1691,7 +1762,7 @@ var TEST_SERVICES = [
1691
1762
  ]
1692
1763
  }),
1693
1764
  // TODO(burdon): Needs auth.
1694
- createStatic2(ServiceType, {
1765
+ createStatic(ServiceType, {
1695
1766
  serviceId: "abstractapi.com/service/GeoLocation",
1696
1767
  name: "Abstract GeoLocation",
1697
1768
  description: "Get the location of any IP address.",
@@ -1708,7 +1779,7 @@ var TEST_SERVICES = [
1708
1779
  //
1709
1780
  ...Array.from({
1710
1781
  length: 20
1711
- }, (_, i) => createStatic2(ServiceType, {
1782
+ }, (_, i) => createStatic(ServiceType, {
1712
1783
  serviceId: `example.com/service/test-${i}`,
1713
1784
  name: `Test ${i}`,
1714
1785
  description: `Test ${i}`,
@@ -1742,11 +1813,67 @@ var useServices = (space, query) => {
1742
1813
  // packages/plugins/experimental/plugin-assistant/src/hooks/useTextInputEvents.ts
1743
1814
  import { useState as useState7, useCallback as useCallback2 } from "react";
1744
1815
 
1816
+ // packages/plugins/experimental/plugin-assistant/src/hooks/useContextProvider.ts
1817
+ import { useMemo as useMemo6 } from "react";
1818
+ import { Capabilities as Capabilities3, useCapabilities as useCapabilities3 } from "@dxos/app-framework";
1819
+ import { getDXN, getLabel, getSchema } from "@dxos/echo-schema";
1820
+ import { log as log9 } from "@dxos/log";
1821
+ import { Filter as Filter4 } from "@dxos/react-client/echo";
1822
+ var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-assistant/src/hooks/useContextProvider.ts";
1823
+ var stringMatch = (query, label) => label.toLowerCase().startsWith(query.toLowerCase());
1824
+ var useContextProvider = (space) => {
1825
+ const artifactDefinitions = useCapabilities3(Capabilities3.ArtifactDefinition);
1826
+ return useMemo6(() => {
1827
+ if (!space) {
1828
+ return void 0;
1829
+ }
1830
+ return {
1831
+ query: async ({ query }) => {
1832
+ const artifactSchemas = artifactDefinitions.map((artifact) => artifact.schema);
1833
+ const { objects } = await space.db.query(Filter4.or(...artifactSchemas.map((schema) => Filter4.schema(schema)))).run();
1834
+ return objects.map((object) => {
1835
+ log9.info("object", {
1836
+ object,
1837
+ label: getLabel(getSchema(object), object)
1838
+ }, {
1839
+ F: __dxlog_file8,
1840
+ L: 36,
1841
+ S: void 0,
1842
+ C: (f, a) => f(...a)
1843
+ });
1844
+ return object;
1845
+ }).filter((object) => stringMatch(query, getLabel(getSchema(object), object) ?? "")).filter((object) => !!getDXN(object)).map((object) => ({
1846
+ uri: getDXN(object).toString(),
1847
+ label: getLabel(getSchema(object), object) ?? ""
1848
+ }));
1849
+ },
1850
+ resolveMetadata: async ({ uri }) => {
1851
+ const object = await space.db.query({
1852
+ id: uri
1853
+ }).first();
1854
+ return {
1855
+ uri,
1856
+ label: getLabel(getSchema(object), object) ?? ""
1857
+ };
1858
+ }
1859
+ };
1860
+ }, [
1861
+ space,
1862
+ artifactDefinitions
1863
+ ]);
1864
+ };
1865
+
1745
1866
  // packages/plugins/experimental/plugin-assistant/src/components/Thread/ThreadContainer.tsx
1746
- var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-assistant/src/components/Thread/ThreadContainer.tsx";
1747
- var ThreadContainer = ({ classNames, chat, settings, onOpenChange, ...props }) => {
1867
+ var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-assistant/src/components/Thread/ThreadContainer.tsx";
1868
+ var ThreadContainer = ({ classNames, chat, settings, part, onOpenChange, ...props }) => {
1748
1869
  const space = getSpace2(chat);
1749
- const processor = useChatProcessor(space, settings);
1870
+ const contextProvider = useContextProvider(space);
1871
+ const processor = useChatProcessor({
1872
+ chat,
1873
+ space,
1874
+ settings,
1875
+ part
1876
+ });
1750
1877
  const messageQueue = useMessageQueue(chat);
1751
1878
  const messages = [
1752
1879
  ...messageQueue?.items ?? [],
@@ -1754,9 +1881,9 @@ var ThreadContainer = ({ classNames, chat, settings, onOpenChange, ...props }) =
1754
1881
  ];
1755
1882
  const handleSubmit = useCallback3((text) => {
1756
1883
  if (processor.streaming.value) {
1757
- log9.warn("ignoring submit; still processing.", void 0, {
1758
- F: __dxlog_file8,
1759
- L: 39,
1884
+ log10.warn("ignoring submit; still processing.", void 0, {
1885
+ F: __dxlog_file9,
1886
+ L: 41,
1760
1887
  S: void 0,
1761
1888
  C: (f, a) => f(...a)
1762
1889
  });
@@ -1764,8 +1891,8 @@ var ThreadContainer = ({ classNames, chat, settings, onOpenChange, ...props }) =
1764
1891
  }
1765
1892
  onOpenChange?.(true);
1766
1893
  invariant6(messageQueue, void 0, {
1767
- F: __dxlog_file8,
1768
- L: 45,
1894
+ F: __dxlog_file9,
1895
+ L: 47,
1769
1896
  S: void 0,
1770
1897
  A: [
1771
1898
  "messageQueue",
@@ -1802,6 +1929,7 @@ var ThreadContainer = ({ classNames, chat, settings, onOpenChange, ...props }) =
1802
1929
  onCancel: handleCancel,
1803
1930
  onPrompt: handleSubmit,
1804
1931
  onOpenChange,
1932
+ contextProvider,
1805
1933
  ...props
1806
1934
  });
1807
1935
  };
@@ -1818,4 +1946,4 @@ export {
1818
1946
  Thread,
1819
1947
  ThreadContainer
1820
1948
  };
1821
- //# sourceMappingURL=chunk-ASMI7PQ2.mjs.map
1949
+ //# sourceMappingURL=chunk-PK5JCOYB.mjs.map