@dxos/plugin-automation 0.7.5-labs.5f04cf6 → 0.7.5-labs.8a82073

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 (289) hide show
  1. package/dist/lib/browser/AutomationPanel-CL2TWZT5.mjs +8 -0
  2. package/dist/lib/browser/AutomationPanel-CL2TWZT5.mjs.map +7 -0
  3. package/dist/lib/browser/ChatContainer-EJ3IWL7Y.mjs +12 -0
  4. package/dist/lib/browser/ChatContainer-EJ3IWL7Y.mjs.map +7 -0
  5. package/dist/lib/browser/{ai-client-6CRYUC6D.mjs → ai-client-UJLNYP7B.mjs} +4 -4
  6. package/dist/lib/browser/{ai-client-6CRYUC6D.mjs.map → ai-client-UJLNYP7B.mjs.map} +3 -3
  7. package/dist/lib/browser/{app-graph-builder-IJTTULDP.mjs → app-graph-builder-3H5TCRG4.mjs} +33 -2
  8. package/dist/lib/browser/{app-graph-builder-IJTTULDP.mjs.map → app-graph-builder-3H5TCRG4.mjs.map} +3 -3
  9. package/dist/lib/browser/chunk-43WRHV2L.mjs +150 -0
  10. package/dist/lib/browser/chunk-43WRHV2L.mjs.map +7 -0
  11. package/dist/lib/browser/{chunk-EKJVAFT2.mjs → chunk-4M74P6YW.mjs} +66 -8
  12. package/dist/lib/browser/{chunk-EKJVAFT2.mjs.map → chunk-4M74P6YW.mjs.map} +4 -4
  13. package/dist/lib/browser/chunk-6KJRL5KV.mjs +243 -0
  14. package/dist/lib/browser/chunk-6KJRL5KV.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-HZ4TA7HY.mjs → chunk-BQHXJZ4K.mjs} +2 -2
  16. package/dist/lib/browser/{chunk-HKX3D3ZP.mjs → chunk-DQ7ZSYJJ.mjs} +2 -2
  17. package/dist/lib/browser/{chunk-HKX3D3ZP.mjs.map → chunk-DQ7ZSYJJ.mjs.map} +2 -2
  18. package/dist/lib/browser/chunk-N4SSCQ7P.mjs +1602 -0
  19. package/dist/lib/browser/chunk-N4SSCQ7P.mjs.map +7 -0
  20. package/dist/lib/browser/index.mjs +52 -45
  21. package/dist/lib/browser/index.mjs.map +3 -3
  22. package/dist/lib/browser/intent-resolver-5YVZJFS3.mjs +29 -0
  23. package/dist/lib/browser/intent-resolver-5YVZJFS3.mjs.map +7 -0
  24. package/dist/lib/browser/meta.json +1 -1
  25. package/dist/lib/browser/{react-surface-IGMBLSV7.mjs → react-surface-RRTZFTKR.mjs} +24 -23
  26. package/dist/lib/browser/react-surface-RRTZFTKR.mjs.map +7 -0
  27. package/dist/lib/browser/types/index.mjs +10 -4
  28. package/dist/lib/node/AutomationPanel-BCEY3YXO.cjs +26 -0
  29. package/dist/lib/node/AutomationPanel-BCEY3YXO.cjs.map +7 -0
  30. package/dist/lib/node/ChatContainer-QUWFEBTI.cjs +33 -0
  31. package/dist/lib/node/ChatContainer-QUWFEBTI.cjs.map +7 -0
  32. package/dist/lib/node/{ai-client-A3RRU55B.cjs → ai-client-AOB6TLNW.cjs} +8 -8
  33. package/dist/lib/node/{ai-client-A3RRU55B.cjs.map → ai-client-AOB6TLNW.cjs.map} +3 -3
  34. package/dist/lib/node/{app-graph-builder-MF5M4QRS.cjs → app-graph-builder-CDEQJEHY.cjs} +43 -12
  35. package/dist/lib/node/{app-graph-builder-MF5M4QRS.cjs.map → app-graph-builder-CDEQJEHY.cjs.map} +3 -3
  36. package/dist/lib/node/{chunk-ZS5RZ7RM.cjs → chunk-AWZVJZ2I.cjs} +6 -6
  37. package/dist/lib/node/chunk-DKGNORZK.cjs +1586 -0
  38. package/dist/lib/node/chunk-DKGNORZK.cjs.map +7 -0
  39. package/dist/lib/node/{chunk-BUQOZA4N.cjs → chunk-H3RSMGJG.cjs} +87 -11
  40. package/dist/lib/node/chunk-H3RSMGJG.cjs.map +7 -0
  41. package/dist/lib/node/{AutomationPanel-RXJDVLCF.cjs → chunk-IPCNJYQL.cjs} +123 -9
  42. package/dist/lib/node/chunk-IPCNJYQL.cjs.map +7 -0
  43. package/dist/lib/node/{chunk-VEGLN4YN.cjs → chunk-LC6KNDPQ.cjs} +78 -26
  44. package/dist/lib/node/chunk-LC6KNDPQ.cjs.map +7 -0
  45. package/dist/lib/node/{chunk-5VF5JKUN.cjs → chunk-TQEDPRY5.cjs} +5 -5
  46. package/dist/lib/node/{chunk-5VF5JKUN.cjs.map → chunk-TQEDPRY5.cjs.map} +2 -2
  47. package/dist/lib/node/index.cjs +96 -88
  48. package/dist/lib/node/index.cjs.map +3 -3
  49. package/dist/lib/node/{intent-resolver-TBHYXBDI.cjs → intent-resolver-MJFZT5IU.cjs} +20 -15
  50. package/dist/lib/node/intent-resolver-MJFZT5IU.cjs.map +7 -0
  51. package/dist/lib/node/meta.json +1 -1
  52. package/dist/lib/node/{react-surface-BVUZMKYS.cjs → react-surface-BVZ63QP4.cjs} +25 -24
  53. package/dist/lib/node/react-surface-BVZ63QP4.cjs.map +7 -0
  54. package/dist/lib/node/types/index.cjs +15 -9
  55. package/dist/lib/node/types/index.cjs.map +2 -2
  56. package/dist/lib/node-esm/AutomationPanel-YTIZ74RI.mjs +9 -0
  57. package/dist/lib/node-esm/AutomationPanel-YTIZ74RI.mjs.map +7 -0
  58. package/dist/lib/node-esm/ChatContainer-QSMDZRDU.mjs +13 -0
  59. package/dist/lib/node-esm/ChatContainer-QSMDZRDU.mjs.map +7 -0
  60. package/dist/lib/node-esm/{ai-client-2GBZRHBA.mjs → ai-client-RUCCJ7JZ.mjs} +4 -4
  61. package/dist/lib/node-esm/{ai-client-2GBZRHBA.mjs.map → ai-client-RUCCJ7JZ.mjs.map} +3 -3
  62. package/dist/lib/node-esm/{app-graph-builder-5N7OK23B.mjs → app-graph-builder-GR3URVNX.mjs} +33 -2
  63. package/dist/lib/node-esm/{app-graph-builder-5N7OK23B.mjs.map → app-graph-builder-GR3URVNX.mjs.map} +3 -3
  64. package/dist/lib/node-esm/chunk-7JO77AAS.mjs +151 -0
  65. package/dist/lib/node-esm/chunk-7JO77AAS.mjs.map +7 -0
  66. package/dist/lib/node-esm/{chunk-5QUXIXNB.mjs → chunk-CQPQXIJP.mjs} +66 -8
  67. package/dist/lib/node-esm/{chunk-5QUXIXNB.mjs.map → chunk-CQPQXIJP.mjs.map} +4 -4
  68. package/dist/lib/node-esm/chunk-CZXU4CFK.mjs +244 -0
  69. package/dist/lib/node-esm/chunk-CZXU4CFK.mjs.map +7 -0
  70. package/dist/lib/node-esm/chunk-D7RARVTS.mjs +1603 -0
  71. package/dist/lib/node-esm/chunk-D7RARVTS.mjs.map +7 -0
  72. package/dist/lib/node-esm/{chunk-X3LPRWIL.mjs → chunk-JFHI22MF.mjs} +2 -2
  73. package/dist/lib/node-esm/{chunk-X3LPRWIL.mjs.map → chunk-JFHI22MF.mjs.map} +2 -2
  74. package/dist/lib/node-esm/{chunk-ISYLEDVU.mjs → chunk-LSSWQIQD.mjs} +2 -2
  75. package/dist/lib/node-esm/index.mjs +52 -45
  76. package/dist/lib/node-esm/index.mjs.map +3 -3
  77. package/dist/lib/node-esm/intent-resolver-FCKNRTKQ.mjs +30 -0
  78. package/dist/lib/node-esm/intent-resolver-FCKNRTKQ.mjs.map +7 -0
  79. package/dist/lib/node-esm/meta.json +1 -1
  80. package/dist/lib/node-esm/{react-surface-77S6XJOM.mjs → react-surface-Y5LQHUQN.mjs} +24 -23
  81. package/dist/lib/node-esm/react-surface-Y5LQHUQN.mjs.map +7 -0
  82. package/dist/lib/node-esm/types/index.mjs +10 -4
  83. package/dist/types/src/AutomationPlugin.d.ts.map +1 -1
  84. package/dist/types/src/artifacts.stories.d.ts +10 -24
  85. package/dist/types/src/artifacts.stories.d.ts.map +1 -1
  86. package/dist/types/src/capabilities/app-graph-builder.d.ts +22 -22
  87. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  88. package/dist/types/src/capabilities/index.d.ts +27 -27
  89. package/dist/types/src/capabilities/index.d.ts.map +1 -1
  90. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  91. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  92. package/dist/types/src/components/Box/StatusLine.d.ts +11 -0
  93. package/dist/types/src/components/Box/StatusLine.d.ts.map +1 -0
  94. package/dist/types/src/components/Box/StatusLine.stories.d.ts +9 -0
  95. package/dist/types/src/components/Box/StatusLine.stories.d.ts.map +1 -0
  96. package/dist/types/src/components/Box/Tabbed.d.ts +15 -0
  97. package/dist/types/src/components/Box/Tabbed.d.ts.map +1 -0
  98. package/dist/types/src/components/Box/Tabbed.stories.d.ts +8 -0
  99. package/dist/types/src/components/Box/Tabbed.stories.d.ts.map +1 -0
  100. package/dist/types/src/components/Box/ToggleContainer.d.ts +13 -0
  101. package/dist/types/src/components/Box/ToggleContainer.d.ts.map +1 -0
  102. package/dist/types/src/components/Box/ToggleContainer.stories.d.ts +9 -0
  103. package/dist/types/src/components/Box/ToggleContainer.stories.d.ts.map +1 -0
  104. package/dist/types/src/components/Box/index.d.ts +4 -0
  105. package/dist/types/src/components/Box/index.d.ts.map +1 -0
  106. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts +7 -0
  107. package/dist/types/src/components/ChatContainer/ChatContainer.d.ts.map +1 -0
  108. package/dist/types/src/components/ChatContainer/index.d.ts +4 -0
  109. package/dist/types/src/components/ChatContainer/index.d.ts.map +1 -0
  110. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.d.ts +14 -0
  111. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.d.ts.map +1 -0
  112. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.stories.d.ts +8 -0
  113. package/dist/types/src/components/MarkdownViewer/MarkdownViewer.stories.d.ts.map +1 -0
  114. package/dist/types/src/components/MarkdownViewer/index.d.ts +2 -0
  115. package/dist/types/src/components/MarkdownViewer/index.d.ts.map +1 -0
  116. package/dist/types/src/components/Prompt/Prompt.d.ts +7 -0
  117. package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -0
  118. package/dist/types/src/components/Prompt/Prompt.stories.d.ts +8 -0
  119. package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -0
  120. package/dist/types/src/components/Prompt/index.d.ts +2 -0
  121. package/dist/types/src/components/Prompt/index.d.ts.map +1 -0
  122. package/dist/types/src/components/Prompt/prompt-autocomplete.d.ts +20 -0
  123. package/dist/types/src/components/Prompt/prompt-autocomplete.d.ts.map +1 -0
  124. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts +6 -0
  125. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.d.ts.map +1 -0
  126. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts +8 -0
  127. package/dist/types/src/components/ServiceRegistry/ServiceRegistry.stories.d.ts.map +1 -0
  128. package/dist/types/src/components/ServiceRegistry/index.d.ts +2 -0
  129. package/dist/types/src/components/ServiceRegistry/index.d.ts.map +1 -0
  130. package/dist/types/src/components/Thread/Thread.d.ts +6 -9
  131. package/dist/types/src/components/Thread/Thread.d.ts.map +1 -1
  132. package/dist/types/src/components/Thread/Thread.stories.d.ts +3 -4
  133. package/dist/types/src/components/Thread/Thread.stories.d.ts.map +1 -1
  134. package/dist/types/src/components/Thread/ThreadMessage.d.ts +12 -0
  135. package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -0
  136. package/dist/types/src/components/TriggerEditor/TriggerEditor.d.ts.map +1 -1
  137. package/dist/types/src/components/index.d.ts +5 -2
  138. package/dist/types/src/components/index.d.ts.map +1 -1
  139. package/dist/types/src/hooks/index.d.ts +3 -0
  140. package/dist/types/src/hooks/index.d.ts.map +1 -1
  141. package/dist/types/src/hooks/processor.d.ts +39 -15
  142. package/dist/types/src/hooks/processor.d.ts.map +1 -1
  143. package/dist/types/src/hooks/useChatProcessor.d.ts +7 -0
  144. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -0
  145. package/dist/types/src/hooks/useMessageQueue.d.ts +41 -0
  146. package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -0
  147. package/dist/types/src/hooks/useServices.d.ts +7 -0
  148. package/dist/types/src/hooks/useServices.d.ts.map +1 -0
  149. package/dist/types/src/meta.d.ts.map +1 -1
  150. package/dist/types/src/testing/index.d.ts +2 -1
  151. package/dist/types/src/testing/index.d.ts.map +1 -1
  152. package/dist/types/src/testing/{testing.d.ts → test-functions.d.ts} +1 -1
  153. package/dist/types/src/testing/test-functions.d.ts.map +1 -0
  154. package/dist/types/src/testing/test-services.d.ts +5 -0
  155. package/dist/types/src/testing/test-services.d.ts.map +1 -0
  156. package/dist/types/src/tools/function.d.ts +5 -0
  157. package/dist/types/src/tools/function.d.ts.map +1 -0
  158. package/dist/types/src/tools/index.d.ts +3 -0
  159. package/dist/types/src/tools/index.d.ts.map +1 -0
  160. package/dist/types/src/tools/openapi.d.ts +10 -0
  161. package/dist/types/src/tools/openapi.d.ts.map +1 -0
  162. package/dist/types/src/tools/openapi.test.d.ts +2 -0
  163. package/dist/types/src/tools/openapi.test.d.ts.map +1 -0
  164. package/dist/types/src/translations.d.ts +12 -6
  165. package/dist/types/src/translations.d.ts.map +1 -1
  166. package/dist/types/src/types/index.d.ts +1 -0
  167. package/dist/types/src/types/index.d.ts.map +1 -1
  168. package/dist/types/src/types/registry.d.ts +10 -0
  169. package/dist/types/src/types/registry.d.ts.map +1 -0
  170. package/dist/types/src/types/schema.d.ts +156 -7
  171. package/dist/types/src/types/schema.d.ts.map +1 -1
  172. package/dist/types/src/types/types.d.ts +2 -2
  173. package/dist/types/src/types/types.d.ts.map +1 -1
  174. package/dist/types/tsconfig.tsbuildinfo +1 -1
  175. package/package.json +56 -49
  176. package/src/AutomationPlugin.tsx +18 -26
  177. package/src/artifacts.stories.tsx +126 -65
  178. package/src/capabilities/ai-client.ts +1 -1
  179. package/src/capabilities/app-graph-builder.ts +31 -2
  180. package/src/capabilities/intent-resolver.ts +14 -9
  181. package/src/capabilities/react-surface.tsx +14 -12
  182. package/src/components/Box/StatusLine.stories.tsx +52 -0
  183. package/src/components/Box/StatusLine.tsx +76 -0
  184. package/src/components/Box/Tabbed.stories.tsx +51 -0
  185. package/src/components/Box/Tabbed.tsx +89 -0
  186. package/src/components/Box/ToggleContainer.stories.tsx +110 -0
  187. package/src/components/Box/ToggleContainer.tsx +108 -0
  188. package/src/components/Box/index.ts +7 -0
  189. package/src/components/ChatContainer/ChatContainer.tsx +52 -0
  190. package/src/components/ChatContainer/index.ts +8 -0
  191. package/src/components/MarkdownViewer/MarkdownViewer.stories.tsx +56 -0
  192. package/src/components/MarkdownViewer/MarkdownViewer.tsx +79 -0
  193. package/src/components/MarkdownViewer/index.ts +5 -0
  194. package/src/components/Prompt/Prompt.stories.tsx +50 -0
  195. package/src/components/Prompt/Prompt.tsx +36 -0
  196. package/src/components/Prompt/index.ts +5 -0
  197. package/src/components/Prompt/prompt-autocomplete.ts +200 -0
  198. package/src/components/PromptEditor/PromptEditor.stories.tsx +3 -3
  199. package/src/components/ServiceRegistry/ServiceRegistry.stories.tsx +49 -0
  200. package/src/components/ServiceRegistry/ServiceRegistry.tsx +75 -0
  201. package/src/components/ServiceRegistry/index.ts +5 -0
  202. package/src/components/Thread/Thread.stories.tsx +152 -97
  203. package/src/components/Thread/Thread.tsx +115 -108
  204. package/src/components/Thread/ThreadMessage.tsx +225 -0
  205. package/src/components/TriggerEditor/TriggerEditor.tsx +8 -5
  206. package/src/components/index.ts +4 -1
  207. package/src/hooks/index.ts +4 -0
  208. package/src/hooks/processor.ts +114 -65
  209. package/src/hooks/useChatProcessor.tsx +86 -0
  210. package/src/hooks/useMessageQueue.ts +23 -0
  211. package/src/hooks/useServices.ts +28 -0
  212. package/src/meta.ts +2 -1
  213. package/src/testing/index.ts +2 -1
  214. package/src/testing/test-services.ts +131 -0
  215. package/src/tools/function.ts +47 -0
  216. package/src/tools/index.ts +6 -0
  217. package/src/tools/openapi.test.ts +227 -0
  218. package/src/tools/openapi.ts +331 -0
  219. package/src/translations.ts +9 -6
  220. package/src/types/index.ts +1 -0
  221. package/src/types/registry.ts +26 -0
  222. package/src/types/schema.ts +90 -3
  223. package/src/types/types.ts +2 -2
  224. package/dist/lib/browser/AssistantPanel-KO6DZBTU.mjs +0 -340
  225. package/dist/lib/browser/AssistantPanel-KO6DZBTU.mjs.map +0 -7
  226. package/dist/lib/browser/AutomationPanel-BMLM533Z.mjs +0 -131
  227. package/dist/lib/browser/AutomationPanel-BMLM533Z.mjs.map +0 -7
  228. package/dist/lib/browser/ChatContainer-SIAJFRFF.mjs +0 -300
  229. package/dist/lib/browser/ChatContainer-SIAJFRFF.mjs.map +0 -7
  230. package/dist/lib/browser/chunk-C3VRGDR6.mjs +0 -75
  231. package/dist/lib/browser/chunk-C3VRGDR6.mjs.map +0 -7
  232. package/dist/lib/browser/chunk-JSNPW6JF.mjs +0 -14
  233. package/dist/lib/browser/chunk-JSNPW6JF.mjs.map +0 -7
  234. package/dist/lib/browser/chunk-KPSDH6XZ.mjs +0 -118
  235. package/dist/lib/browser/chunk-KPSDH6XZ.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-YZF3SDZL.mjs +0 -139
  237. package/dist/lib/browser/chunk-YZF3SDZL.mjs.map +0 -7
  238. package/dist/lib/browser/intent-resolver-AHDQ3KQP.mjs +0 -24
  239. package/dist/lib/browser/intent-resolver-AHDQ3KQP.mjs.map +0 -7
  240. package/dist/lib/browser/react-surface-IGMBLSV7.mjs.map +0 -7
  241. package/dist/lib/node/AssistantPanel-PPFS2HKK.cjs +0 -360
  242. package/dist/lib/node/AssistantPanel-PPFS2HKK.cjs.map +0 -7
  243. package/dist/lib/node/AutomationPanel-RXJDVLCF.cjs.map +0 -7
  244. package/dist/lib/node/ChatContainer-GS2SC5OG.cjs +0 -318
  245. package/dist/lib/node/ChatContainer-GS2SC5OG.cjs.map +0 -7
  246. package/dist/lib/node/chunk-BUQOZA4N.cjs.map +0 -7
  247. package/dist/lib/node/chunk-DNLBVFR7.cjs +0 -147
  248. package/dist/lib/node/chunk-DNLBVFR7.cjs.map +0 -7
  249. package/dist/lib/node/chunk-TWDGP26W.cjs +0 -172
  250. package/dist/lib/node/chunk-TWDGP26W.cjs.map +0 -7
  251. package/dist/lib/node/chunk-VEGLN4YN.cjs.map +0 -7
  252. package/dist/lib/node/chunk-Z2YFE5SJ.cjs +0 -49
  253. package/dist/lib/node/chunk-Z2YFE5SJ.cjs.map +0 -7
  254. package/dist/lib/node/intent-resolver-TBHYXBDI.cjs.map +0 -7
  255. package/dist/lib/node/react-surface-BVUZMKYS.cjs.map +0 -7
  256. package/dist/lib/node-esm/AssistantPanel-XSSKKCJY.mjs +0 -341
  257. package/dist/lib/node-esm/AssistantPanel-XSSKKCJY.mjs.map +0 -7
  258. package/dist/lib/node-esm/AutomationPanel-GQZZ4UBI.mjs +0 -132
  259. package/dist/lib/node-esm/AutomationPanel-GQZZ4UBI.mjs.map +0 -7
  260. package/dist/lib/node-esm/ChatContainer-57ILGC3R.mjs +0 -301
  261. package/dist/lib/node-esm/ChatContainer-57ILGC3R.mjs.map +0 -7
  262. package/dist/lib/node-esm/chunk-ICHNUP5M.mjs +0 -119
  263. package/dist/lib/node-esm/chunk-ICHNUP5M.mjs.map +0 -7
  264. package/dist/lib/node-esm/chunk-JCYVS5GG.mjs +0 -76
  265. package/dist/lib/node-esm/chunk-JCYVS5GG.mjs.map +0 -7
  266. package/dist/lib/node-esm/chunk-L2B6VGMG.mjs +0 -16
  267. package/dist/lib/node-esm/chunk-L2B6VGMG.mjs.map +0 -7
  268. package/dist/lib/node-esm/chunk-U7HXYMPZ.mjs +0 -141
  269. package/dist/lib/node-esm/chunk-U7HXYMPZ.mjs.map +0 -7
  270. package/dist/lib/node-esm/intent-resolver-DPJJHFGK.mjs +0 -25
  271. package/dist/lib/node-esm/intent-resolver-DPJJHFGK.mjs.map +0 -7
  272. package/dist/lib/node-esm/react-surface-77S6XJOM.mjs.map +0 -7
  273. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts +0 -8
  274. package/dist/types/src/components/AssistantPanel/AssistantPanel.d.ts.map +0 -1
  275. package/dist/types/src/components/AssistantPanel/index.d.ts +0 -3
  276. package/dist/types/src/components/AssistantPanel/index.d.ts.map +0 -1
  277. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts +0 -6
  278. package/dist/types/src/components/AssistantPanel/system-instructions.d.ts.map +0 -1
  279. package/dist/types/src/components/ChatContainer.d.ts +0 -8
  280. package/dist/types/src/components/ChatContainer.d.ts.map +0 -1
  281. package/dist/types/src/testing/testing.d.ts.map +0 -1
  282. package/src/components/AssistantPanel/AssistantPanel.tsx +0 -232
  283. package/src/components/AssistantPanel/index.ts +0 -7
  284. package/src/components/AssistantPanel/system-instructions.ts +0 -166
  285. package/src/components/ChatContainer.tsx +0 -80
  286. /package/dist/lib/browser/{chunk-HZ4TA7HY.mjs.map → chunk-BQHXJZ4K.mjs.map} +0 -0
  287. /package/dist/lib/node/{chunk-ZS5RZ7RM.cjs.map → chunk-AWZVJZ2I.cjs.map} +0 -0
  288. /package/dist/lib/node-esm/{chunk-ISYLEDVU.mjs.map → chunk-LSSWQIQD.mjs.map} +0 -0
  289. /package/src/testing/{testing.ts → test-functions.ts} +0 -0
@@ -0,0 +1,200 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Prec, type Extension } from '@codemirror/state';
6
+ import {
7
+ EditorView,
8
+ Decoration,
9
+ ViewPlugin,
10
+ keymap,
11
+ type DecorationSet,
12
+ type ViewUpdate,
13
+ WidgetType,
14
+ } from '@codemirror/view';
15
+
16
+ export type AutocompleteOptions = {
17
+ /**
18
+ * Callback triggered when Enter is pressed.
19
+ * @param text The current text in the editor
20
+ */
21
+ onEnter?: (text: string) => void;
22
+
23
+ /**
24
+ * Function that returns a list of suggestions based on the current text.
25
+ * @param text The current text before the cursor
26
+ * @returns Array of suggestion strings
27
+ */
28
+ onSuggest: (text: string) => string[];
29
+ };
30
+
31
+ class InlineSuggestionWidget extends WidgetType {
32
+ constructor(private suffix: string) {
33
+ super();
34
+ }
35
+
36
+ override toDOM() {
37
+ const span = document.createElement('span');
38
+ span.textContent = this.suffix;
39
+ span.className = 'cm-inline-suggestion';
40
+ return span;
41
+ }
42
+
43
+ override eq(other: InlineSuggestionWidget) {
44
+ return other.suffix === this.suffix;
45
+ }
46
+ }
47
+
48
+ /**
49
+ * Creates an autocomplete extension that shows inline suggestions.
50
+ * Pressing Tab will complete the suggestion.
51
+ */
52
+ export const createAutocompleteExtension = ({ onEnter, onSuggest }: AutocompleteOptions): Extension => {
53
+ const suggestionPlugin = ViewPlugin.fromClass(
54
+ class {
55
+ _decorations: DecorationSet;
56
+ _currentSuggestion: string | null = null;
57
+
58
+ constructor(view: EditorView) {
59
+ this._decorations = this.computeDecorations(view);
60
+ }
61
+
62
+ update(update: ViewUpdate) {
63
+ if (update.docChanged || update.selectionSet) {
64
+ this._decorations = this.computeDecorations(update.view);
65
+ }
66
+ }
67
+
68
+ private computeDecorations(view: EditorView): DecorationSet {
69
+ const text = view.state.doc.toString();
70
+ const suggestions = onSuggest(text);
71
+ if (!suggestions.length) {
72
+ this._currentSuggestion = null;
73
+ return Decoration.none;
74
+ }
75
+
76
+ // Get the first suggestion.
77
+ this._currentSuggestion = suggestions[0];
78
+ const suffix = this._currentSuggestion.slice(text.length);
79
+ if (!suffix) {
80
+ return Decoration.none;
81
+ }
82
+
83
+ // Always show ghost text at the end of the document.
84
+ return Decoration.set([
85
+ Decoration.widget({
86
+ widget: new InlineSuggestionWidget(suffix),
87
+ side: 1,
88
+ }).range(view.state.doc.length),
89
+ ]);
90
+ }
91
+
92
+ completeSuggestion(view: EditorView): boolean {
93
+ if (!this._currentSuggestion) {
94
+ return false;
95
+ }
96
+
97
+ const text = view.state.doc.toString();
98
+ const suffix = this._currentSuggestion.slice(text.length);
99
+ if (!suffix) {
100
+ return false;
101
+ }
102
+
103
+ view.dispatch({
104
+ changes: {
105
+ from: view.state.doc.length,
106
+ insert: suffix,
107
+ },
108
+ selection: {
109
+ anchor: view.state.doc.length + suffix.length,
110
+ },
111
+ });
112
+
113
+ return true;
114
+ }
115
+ },
116
+ {
117
+ decorations: (v) => v._decorations,
118
+ },
119
+ );
120
+
121
+ return [
122
+ suggestionPlugin,
123
+ EditorView.theme({
124
+ '.cm-inline-suggestion': {
125
+ opacity: 0.4,
126
+ },
127
+ }),
128
+
129
+ // Accept the current suggestion.
130
+ Prec.highest(
131
+ keymap.of([
132
+ {
133
+ key: 'Tab',
134
+ run: (view) => {
135
+ const plugin = view.plugin(suggestionPlugin);
136
+ return plugin?.completeSuggestion(view) ?? false;
137
+ },
138
+ },
139
+ {
140
+ key: 'ArrowRight',
141
+ run: (view) => {
142
+ // Only complete if cursor is at the end
143
+ if (view.state.selection.main.head !== view.state.doc.length) {
144
+ return false;
145
+ }
146
+
147
+ const plugin = view.plugin(suggestionPlugin);
148
+ return plugin?.completeSuggestion(view) ?? false;
149
+ },
150
+ },
151
+ {
152
+ key: 'Enter',
153
+ preventDefault: true,
154
+ run: (view) => {
155
+ const text = view.state.doc.toString();
156
+ if (onEnter) {
157
+ onEnter(text);
158
+ // Clear the document after calling onEnter
159
+ view.dispatch({
160
+ changes: {
161
+ from: 0,
162
+ to: view.state.doc.length,
163
+ insert: '',
164
+ },
165
+ });
166
+ return true;
167
+ }
168
+ return false;
169
+ },
170
+ },
171
+ {
172
+ key: 'Shift-Enter',
173
+ run: (view) => {
174
+ view.dispatch({
175
+ changes: {
176
+ from: view.state.selection.main.head,
177
+ insert: '\n',
178
+ },
179
+ });
180
+ return true;
181
+ },
182
+ },
183
+ {
184
+ key: 'Escape',
185
+ run: (view) => {
186
+ // Clear the entire document.
187
+ view.dispatch({
188
+ changes: {
189
+ from: 0,
190
+ to: view.state.doc.length,
191
+ insert: '',
192
+ },
193
+ });
194
+ return true;
195
+ },
196
+ },
197
+ ]),
198
+ ),
199
+ ];
200
+ };
@@ -28,7 +28,7 @@ const template = [
28
28
  '{input}',
29
29
  ].join('\n');
30
30
 
31
- const DefaultStory = () => {
31
+ const Render = () => {
32
32
  const client = useClient();
33
33
  const [chain] = useState(() => {
34
34
  const space = client.spaces.default;
@@ -49,8 +49,8 @@ const DefaultStory = () => {
49
49
  export const Default = {};
50
50
 
51
51
  const meta: Meta = {
52
- title: 'plugins/plugin-automation/PromptTemplate',
53
- render: DefaultStory,
52
+ title: 'plugins/plugin-automation/PromptEditor',
53
+ render: Render,
54
54
  decorators: [
55
55
  withClientProvider({ createIdentity: true, createSpace: true, types: [ChainType, ChainPromptType] }),
56
56
  withLayout({ fullscreen: true, classNames: 'flex justify-center m-2' }),
@@ -0,0 +1,49 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import '@dxos-theme';
6
+
7
+ import { type Meta, type StoryObj } from '@storybook/react';
8
+ import React from 'react';
9
+
10
+ import { useSpace } from '@dxos/react-client/echo';
11
+ import { withClientProvider } from '@dxos/react-client/testing';
12
+ import { withLayout, withTheme } from '@dxos/storybook-utils';
13
+
14
+ import { ServiceRegistry } from './ServiceRegistry';
15
+ import { ServiceType } from '../../types';
16
+
17
+ const meta: Meta<typeof ServiceRegistry> = {
18
+ title: 'plugins/plugin-automation/ServiceRegistry',
19
+ component: ServiceRegistry,
20
+ render: ({ space: _ignore, ...args }) => {
21
+ const space = useSpace();
22
+ if (!space) {
23
+ return <div />;
24
+ }
25
+
26
+ return (
27
+ <div className='h-full w-[300px] overflow-hidden'>
28
+ <ServiceRegistry space={space} {...args} />
29
+ </div>
30
+ );
31
+ },
32
+ decorators: [
33
+ withClientProvider({
34
+ createIdentity: true,
35
+ createSpace: true,
36
+ types: [ServiceType],
37
+ }),
38
+ withLayout({ fullscreen: true, tooltips: true, classNames: 'flex justify-center' }),
39
+ withTheme,
40
+ ],
41
+ };
42
+
43
+ export default meta;
44
+
45
+ type Story = StoryObj<typeof ServiceRegistry>;
46
+
47
+ export const Default: Story = {
48
+ args: {},
49
+ };
@@ -0,0 +1,75 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import React, { useMemo } from 'react';
6
+
7
+ import { Filter, type Space } from '@dxos/client/echo';
8
+ import { useQuery } from '@dxos/react-client/echo';
9
+ import { Icon, Input, List, ListItem } from '@dxos/react-ui';
10
+
11
+ import { useServices } from '../../hooks';
12
+ import { categoryIcons, ServiceType } from '../../types';
13
+
14
+ // TODO(burdon): Option to show all/enabled/filter.
15
+ export const ServiceRegistry = ({ space }: { space: Space }) => {
16
+ const matchingServices = useServices(space);
17
+ const enabledServices = useQuery(space, Filter.schema(ServiceType));
18
+
19
+ // Join matching services with enabled services.
20
+ const services = useMemo(() => {
21
+ return matchingServices.map((service) => enabledServices.find((s) => s.serviceId === service.serviceId) ?? service);
22
+ }, [matchingServices, enabledServices]);
23
+
24
+ const handleSetEnabled = (service: ServiceType, enabled: boolean) => {
25
+ if (enabled) {
26
+ space.db.add(service);
27
+ } else {
28
+ // TODO(burdon): Remove or disable?
29
+ space.db.remove(service);
30
+ }
31
+ };
32
+
33
+ return (
34
+ <List classNames='h-full grid auto-rows-[5rem] gap-2 p-2 pis-2 pie-2 overflow-y-auto scrollbar-thin'>
35
+ {services.map((service) => (
36
+ <ServiceItem
37
+ key={service.serviceId}
38
+ service={service}
39
+ enabled={service.enabled}
40
+ setEnabled={(enabled) => handleSetEnabled(service, enabled)}
41
+ />
42
+ ))}
43
+ </List>
44
+ );
45
+ };
46
+
47
+ const ServiceItem = ({
48
+ service,
49
+ enabled,
50
+ setEnabled,
51
+ }: {
52
+ service: ServiceType;
53
+ enabled?: boolean;
54
+ setEnabled?: (enabled: boolean) => void;
55
+ }) => {
56
+ return (
57
+ <ListItem.Root classNames='flex flex-col gap-1 p-1 overflow-hidden rounded-md border border-separator'>
58
+ <div className='grid grid-cols-[40px_1fr_40px]'>
59
+ <div className='flex gow justify-center items-center'>
60
+ <Icon icon={categoryIcons[service.category ?? 'default'] ?? 'ph--placeholder--regular'} size={6} />
61
+ </div>
62
+ <div className='grow items-center truncate mie-2'>{service.name}</div>
63
+ <div className='flex gow justify-center items-center'>
64
+ <Input.Root>
65
+ <Input.Switch checked={enabled} onClick={() => setEnabled?.(!enabled)} />
66
+ </Input.Root>
67
+ </div>
68
+ </div>
69
+ <div className='grid grid-cols-[40px_1fr]'>
70
+ <div />
71
+ <div className='text-sm text-subdued line-clamp-2 mie-1'>{service.description}</div>
72
+ </div>
73
+ </ListItem.Root>
74
+ );
75
+ };
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './ServiceRegistry';
@@ -5,48 +5,57 @@
5
5
  import '@dxos-theme';
6
6
 
7
7
  import { type StoryObj, type Meta } from '@storybook/react';
8
- import React, { useEffect, useState } from 'react';
8
+ import React, { useCallback, useEffect, useState } from 'react';
9
9
 
10
10
  import { type Message } from '@dxos/artifact';
11
11
  import { ObjectId } from '@dxos/echo-schema';
12
- import { invariant } from '@dxos/invariant';
13
12
  import { faker } from '@dxos/random';
14
- import { IconButton, Input, Toolbar } from '@dxos/react-ui';
15
- import { mx } from '@dxos/react-ui-theme';
16
13
  import { withLayout, withSignals, withTheme } from '@dxos/storybook-utils';
17
14
 
18
15
  import { Thread, type ThreadProps } from './Thread';
16
+ import translations from '../../translations';
19
17
 
20
- faker.seed(0);
18
+ faker.seed(1);
21
19
 
22
20
  const Render = ({ messages: _messages, ...props }: ThreadProps) => {
23
- const [messages, setMessages] = useState(_messages);
21
+ const [streaming, setStreaming] = useState(false);
22
+ const [messages, setMessages] = useState<Message[]>(_messages ?? []);
24
23
  useEffect(() => {
25
- const message: Message = {
26
- id: ObjectId.random(),
27
- role: 'assistant',
28
- content: [
29
- {
30
- type: 'text',
31
- text: '',
32
- },
33
- ],
34
- };
35
-
36
- const i = setInterval(() => {
37
- const block = message.content[0];
38
- invariant(block.type === 'text');
39
- block.text += ' ' + faker.lorem.word();
40
- setMessages([..._messages, message]);
41
- }, 200);
42
-
43
- return () => clearInterval(i);
44
- }, []);
24
+ setMessages(_messages ?? []);
25
+ }, [_messages]);
26
+
27
+ const handleSubmit = useCallback(
28
+ (text: string) => {
29
+ const request: Message = { id: ObjectId.random(), role: 'user', content: [{ type: 'text', text }] };
30
+ const response: Message = {
31
+ id: ObjectId.random(),
32
+ role: 'assistant',
33
+ content: [{ type: 'text', disposition: 'cot', pending: true, text: faker.lorem.paragraphs(1) }],
34
+ };
35
+ setMessages([...messages, request, response]);
36
+ setStreaming(true);
37
+ setTimeout(() => {
38
+ response.content[0].pending = false;
39
+ setMessages([
40
+ ...messages,
41
+ request,
42
+ response,
43
+ {
44
+ id: ObjectId.random(),
45
+ role: 'assistant',
46
+ content: [{ type: 'text', text: faker.lorem.paragraphs(1) }],
47
+ },
48
+ ]);
49
+ setStreaming(false);
50
+ }, 3_000);
51
+ },
52
+ [messages],
53
+ );
45
54
 
46
55
  return (
47
- <div className='flex grow justify-center overflow-center bg-white dark:bg-black'>
48
- <div className='flex w-[500px] bg-base'>
49
- <Thread {...props} messages={messages} />
56
+ <div className='flex grow justify-center overflow-center bg-base'>
57
+ <div className='flex w-[500px] bg-white dark:bg-black'>
58
+ <Thread {...props} messages={messages} streaming={streaming} onSubmit={handleSubmit} onStop={() => {}} />
50
59
  </div>
51
60
  </div>
52
61
  );
@@ -57,86 +66,132 @@ const meta: Meta<ThreadProps> = {
57
66
  render: Render,
58
67
  component: Thread,
59
68
  decorators: [withSignals, withTheme, withLayout({ fullscreen: true, tooltips: true })],
69
+ parameters: {
70
+ translations,
71
+ },
60
72
  };
61
73
 
62
74
  export default meta;
63
75
 
64
76
  type Story = StoryObj<ThreadProps>;
65
77
 
66
- export const Default: Story = {
67
- args: {
68
- streaming: true,
69
- messages: [
78
+ const TEST_MESSAGES: Message[] = [
79
+ {
80
+ id: ObjectId.random(),
81
+ role: 'user',
82
+ content: [
70
83
  {
71
- id: ObjectId.random(),
72
- role: 'user',
73
- content: [
74
- {
75
- type: 'text',
76
- text: 'hello',
77
- },
78
- ],
84
+ type: 'text',
85
+ text: faker.lorem.sentence(5),
86
+ },
87
+ ],
88
+ },
89
+ {
90
+ id: ObjectId.random(),
91
+ role: 'assistant',
92
+ content: [
93
+ {
94
+ type: 'text',
95
+ disposition: 'cot',
96
+ text: Array.from({ length: faker.number.int({ min: 3, max: 5 }) })
97
+ .map((_, idx) => `${idx + 1}. ${faker.lorem.paragraph()}`)
98
+ .join('\n'),
99
+ },
100
+ {
101
+ type: 'text',
102
+ text: Array.from({ length: faker.number.int({ min: 2, max: 5 }) })
103
+ .map(() => faker.lorem.paragraphs())
104
+ .join('\n\n'),
105
+ },
106
+ {
107
+ type: 'tool_use',
108
+ id: '1234',
109
+ name: 'search',
110
+ input: {},
111
+ },
112
+ ],
113
+ },
114
+ {
115
+ id: ObjectId.random(),
116
+ role: 'user',
117
+ content: [
118
+ {
119
+ type: 'tool_result',
120
+ toolUseId: '1234',
121
+ content: 'This is a tool result.',
122
+ },
123
+ ],
124
+ },
125
+ {
126
+ id: ObjectId.random(),
127
+ role: 'assistant',
128
+ content: [
129
+ {
130
+ type: 'tool_use',
131
+ id: '4567',
132
+ name: 'create',
133
+ input: {},
79
134
  },
80
- // {
81
- // id: ObjectId.random(),
82
- // role: 'assistant',
83
- // content: [
84
- // {
85
- // type: 'text',
86
- // disposition: 'cot',
87
- // text: ['1. Consider the question.', '2. Plan the route.', '3. Plot the course.'].join('\n'),
88
- // },
89
- // {
90
- // type: 'text',
91
- // text: 'Things',
92
- // },
93
- // {
94
- // type: 'json',
95
- // json: '{}',
96
- // },
97
- // ],
98
- // },
99
135
  ],
100
136
  },
137
+ {
138
+ id: ObjectId.random(),
139
+ role: 'user',
140
+ content: [
141
+ {
142
+ type: 'tool_result',
143
+ toolUseId: '4567',
144
+ content: 'This is a tool result.',
145
+ },
146
+ ],
147
+ },
148
+ {
149
+ id: ObjectId.random(),
150
+ role: 'assistant',
151
+ content: [
152
+ {
153
+ type: 'text',
154
+ text: faker.lorem.paragraphs(1),
155
+ },
156
+ ],
157
+ },
158
+ ];
159
+
160
+ export const Default: Story = {
161
+ args: {
162
+ // debug: true,
163
+ messages: TEST_MESSAGES,
164
+ },
101
165
  };
102
166
 
103
- export const Line = {
167
+ export const Input: Story = {
168
+ args: {
169
+ streaming: true,
170
+ },
171
+ };
172
+
173
+ export const Collapse: Story = {
174
+ args: {
175
+ collapse: true,
176
+ messages: TEST_MESSAGES,
177
+ },
178
+ };
179
+
180
+ export const Incremental: Story = {
104
181
  render: () => {
105
- const [lines, setLines] = useState<string[]>([]);
106
- const [expanded, setExpanded] = useState(false);
107
- return (
108
- <div className='flex grow justify-center overflow-center bg-white dark:bg-black'>
109
- <div className='flex flex-col w-[500px] bg-base'>
110
- <Toolbar.Root>
111
- <IconButton
112
- icon='ph--plus--regular'
113
- label='Add'
114
- iconOnly
115
- onClick={() => {
116
- setLines((lines) => [...lines, faker.lorem.sentence(5)]);
117
- // setExpanded((expanded) => !expanded);
118
- }}
119
- />
120
- </Toolbar.Root>
121
- <div>
122
- {lines.map((line, i) => (
123
- <div key={i} className='flex h-[32px] p-1 px-3 items-center'>
124
- {line}
125
- </div>
126
- ))}
127
- </div>
128
- <div
129
- className={mx(
130
- 'flex flex-col justify-end p-1 items-center h-[40px] transition-h duration-[250ms]',
131
- expanded && 'h-[72px]',
132
- )}
133
- >
134
- <Input.Root>
135
- <Input.TextInput placeholder='Enter message...' />
136
- </Input.Root>
137
- </div>
138
- </div>
139
- </div>
140
- );
182
+ const [messages, setMessages] = useState<Message[]>([]);
183
+ useEffect(() => {
184
+ let i = 0;
185
+ const interval = setInterval(() => {
186
+ setMessages((messages) => [...messages, TEST_MESSAGES[i++]]);
187
+ if (i >= TEST_MESSAGES.length) {
188
+ clearInterval(interval);
189
+ }
190
+ }, 2_000);
191
+
192
+ return () => clearInterval(interval);
193
+ }, []);
194
+
195
+ return <Render messages={messages} collapse />;
141
196
  },
142
197
  };