@dxos/plugin-assistant 0.8.1-staging.5be625a → 0.8.1-staging.97aedb1

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 (161) hide show
  1. package/dist/lib/browser/{AssistantDialog-EIUUSXDS.mjs → AssistantDialog-YSHMAHW5.mjs} +9 -9
  2. package/dist/lib/browser/AssistantDialog-YSHMAHW5.mjs.map +7 -0
  3. package/dist/lib/browser/{ChatContainer-NHHA6CSP.mjs → ChatContainer-V5GP7DYF.mjs} +11 -11
  4. package/dist/lib/browser/ChatContainer-V5GP7DYF.mjs.map +7 -0
  5. package/dist/lib/browser/{TemplateContainer-7IQ6V5AD.mjs → TemplateContainer-K4EJNGIL.mjs} +7 -7
  6. package/dist/lib/browser/{TemplateContainer-7IQ6V5AD.mjs.map → TemplateContainer-K4EJNGIL.mjs.map} +2 -2
  7. package/dist/lib/browser/{ai-client-BAPVMSNX.mjs → ai-client-CDZLSNXE.mjs} +4 -4
  8. package/dist/lib/browser/{app-graph-builder-DTCUWBKB.mjs → app-graph-builder-MF5EVDWW.mjs} +63 -8
  9. package/dist/lib/browser/app-graph-builder-MF5EVDWW.mjs.map +7 -0
  10. package/dist/lib/browser/{chunk-AF7VQAKS.mjs → chunk-3HCI5FIL.mjs} +2 -2
  11. package/dist/lib/browser/{chunk-KGIACFAX.mjs → chunk-FMB7RGMP.mjs} +69 -65
  12. package/dist/lib/browser/{chunk-KGIACFAX.mjs.map → chunk-FMB7RGMP.mjs.map} +3 -3
  13. package/dist/lib/browser/chunk-IAMR2FAE.mjs +183 -0
  14. package/dist/lib/browser/chunk-IAMR2FAE.mjs.map +7 -0
  15. package/dist/lib/browser/{chunk-25APJ3ZK.mjs → chunk-KYMKVE6M.mjs} +10 -10
  16. package/dist/lib/browser/{chunk-6FTPLBSC.mjs → chunk-NFUHCW2J.mjs} +3 -3
  17. package/dist/lib/browser/{chunk-SVUCJXGN.mjs → chunk-TXJWGWJ7.mjs} +3 -3
  18. package/dist/lib/browser/index.mjs +18 -32
  19. package/dist/lib/browser/index.mjs.map +3 -3
  20. package/dist/lib/browser/{intent-resolver-U57FXP3I.mjs → intent-resolver-WJGLKKVO.mjs} +5 -6
  21. package/dist/lib/browser/{intent-resolver-U57FXP3I.mjs.map → intent-resolver-WJGLKKVO.mjs.map} +3 -3
  22. package/dist/lib/browser/meta.json +1 -1
  23. package/dist/lib/browser/{react-surface-YNN5NYJW.mjs → react-surface-57VRDOQT.mjs} +34 -14
  24. package/dist/lib/browser/react-surface-57VRDOQT.mjs.map +7 -0
  25. package/dist/lib/browser/{settings-VAW6UWFL.mjs → settings-U6UFQX32.mjs} +4 -4
  26. package/dist/lib/browser/types/index.mjs +2 -2
  27. package/dist/lib/node/{AssistantDialog-GT7R7MKH.cjs → AssistantDialog-YI2BSGSX.cjs} +12 -12
  28. package/dist/lib/node/AssistantDialog-YI2BSGSX.cjs.map +7 -0
  29. package/dist/lib/node/{ChatContainer-JUZOEZZ7.cjs → ChatContainer-ZJ5JXF6A.cjs} +15 -15
  30. package/dist/lib/node/ChatContainer-ZJ5JXF6A.cjs.map +7 -0
  31. package/dist/lib/node/{TemplateContainer-VPAZRFQA.cjs → TemplateContainer-XWFYJB4T.cjs} +12 -12
  32. package/dist/lib/node/{TemplateContainer-VPAZRFQA.cjs.map → TemplateContainer-XWFYJB4T.cjs.map} +2 -2
  33. package/dist/lib/node/{ai-client-5ESLYXAV.cjs → ai-client-URCCYU6B.cjs} +8 -8
  34. package/dist/lib/node/{app-graph-builder-3P6WSON2.cjs → app-graph-builder-N5ZUUI2Z.cjs} +82 -27
  35. package/dist/lib/node/app-graph-builder-N5ZUUI2Z.cjs.map +7 -0
  36. package/dist/lib/node/{chunk-KLSNCP34.cjs → chunk-APRU3QWK.cjs} +7 -8
  37. package/dist/lib/node/chunk-APRU3QWK.cjs.map +7 -0
  38. package/dist/lib/node/{chunk-VRXFIS4X.cjs → chunk-GBUNQ257.cjs} +6 -6
  39. package/dist/lib/node/{chunk-U6J2GO7I.cjs → chunk-Q5XWEMHB.cjs} +4 -4
  40. package/dist/lib/node/{chunk-JAB6KLPP.cjs → chunk-RPBKMP2E.cjs} +50 -46
  41. package/dist/lib/node/{chunk-JAB6KLPP.cjs.map → chunk-RPBKMP2E.cjs.map} +3 -3
  42. package/dist/lib/node/{chunk-N3SW6DJ6.cjs → chunk-XI2ARIEO.cjs} +6 -6
  43. package/dist/lib/node/{chunk-G2HY3UJ4.cjs → chunk-ZKOC4ZFY.cjs} +14 -14
  44. package/dist/lib/node/index.cjs +62 -76
  45. package/dist/lib/node/index.cjs.map +3 -3
  46. package/dist/lib/node/{intent-resolver-YIFAMM3B.cjs → intent-resolver-R3OSTIMH.cjs} +11 -12
  47. package/dist/lib/node/intent-resolver-R3OSTIMH.cjs.map +7 -0
  48. package/dist/lib/node/meta.json +1 -1
  49. package/dist/lib/node/{react-surface-IDGIN55C.cjs → react-surface-NUQTM6MS.cjs} +46 -26
  50. package/dist/lib/node/react-surface-NUQTM6MS.cjs.map +7 -0
  51. package/dist/lib/node/{settings-2FEYGLYU.cjs → settings-TXGRCYAL.cjs} +8 -8
  52. package/dist/lib/node/types/index.cjs +13 -13
  53. package/dist/lib/node/types/index.cjs.map +1 -1
  54. package/dist/lib/node-esm/{AssistantDialog-JMBFM6QH.mjs → AssistantDialog-U2FQX5TD.mjs} +9 -9
  55. package/dist/lib/node-esm/AssistantDialog-U2FQX5TD.mjs.map +7 -0
  56. package/dist/lib/node-esm/{ChatContainer-ZNN5CMVL.mjs → ChatContainer-QW3OOXTT.mjs} +11 -11
  57. package/dist/lib/node-esm/ChatContainer-QW3OOXTT.mjs.map +7 -0
  58. package/dist/lib/node-esm/{TemplateContainer-YLA6BJY6.mjs → TemplateContainer-EUM2X65J.mjs} +7 -7
  59. package/dist/lib/node-esm/{TemplateContainer-YLA6BJY6.mjs.map → TemplateContainer-EUM2X65J.mjs.map} +2 -2
  60. package/dist/lib/node-esm/{ai-client-XYZ5N7CR.mjs → ai-client-WMHS5EGV.mjs} +4 -4
  61. package/dist/lib/node-esm/{app-graph-builder-PMAQLTTN.mjs → app-graph-builder-DWBNIMHM.mjs} +63 -8
  62. package/dist/lib/node-esm/app-graph-builder-DWBNIMHM.mjs.map +7 -0
  63. package/dist/lib/node-esm/{chunk-2CIYX3SD.mjs → chunk-6JK5HEUQ.mjs} +3 -3
  64. package/dist/lib/node-esm/{chunk-N6BVC2C2.mjs → chunk-ECRK6TUQ.mjs} +2 -2
  65. package/dist/lib/node-esm/{chunk-SMUINDXQ.mjs → chunk-GBBXIW5F.mjs} +10 -10
  66. package/dist/lib/node-esm/{chunk-PK5JCOYB.mjs → chunk-MVDAY3CZ.mjs} +69 -65
  67. package/dist/lib/node-esm/{chunk-PK5JCOYB.mjs.map → chunk-MVDAY3CZ.mjs.map} +3 -3
  68. package/dist/lib/node-esm/chunk-MXK2EANZ.mjs +184 -0
  69. package/dist/lib/node-esm/chunk-MXK2EANZ.mjs.map +7 -0
  70. package/dist/lib/node-esm/{chunk-J63VQFQO.mjs → chunk-PBZA7XJR.mjs} +3 -3
  71. package/dist/lib/node-esm/index.mjs +18 -32
  72. package/dist/lib/node-esm/index.mjs.map +3 -3
  73. package/dist/lib/node-esm/{intent-resolver-SQ4HLL5L.mjs → intent-resolver-H32TL4X6.mjs} +5 -6
  74. package/dist/lib/node-esm/{intent-resolver-SQ4HLL5L.mjs.map → intent-resolver-H32TL4X6.mjs.map} +3 -3
  75. package/dist/lib/node-esm/meta.json +1 -1
  76. package/dist/lib/node-esm/{react-surface-424JZTZ4.mjs → react-surface-JBVZF6CP.mjs} +34 -14
  77. package/dist/lib/node-esm/react-surface-JBVZF6CP.mjs.map +7 -0
  78. package/dist/lib/node-esm/{settings-VHR5KT4J.mjs → settings-DZU5PNXM.mjs} +4 -4
  79. package/dist/lib/node-esm/types/index.mjs +2 -2
  80. package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
  81. package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
  82. package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
  83. package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
  84. package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts.map +1 -1
  85. package/dist/types/src/components/ChatContainer.d.ts +4 -2
  86. package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
  87. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +3 -3
  88. package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
  89. package/dist/types/src/components/Thread/ThreadContainer.d.ts +2 -0
  90. package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
  91. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +3 -3
  92. package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
  93. package/dist/types/src/components/index.d.ts +3 -2
  94. package/dist/types/src/components/index.d.ts.map +1 -1
  95. package/dist/types/src/hooks/useChatProcessor.d.ts +3 -1
  96. package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
  97. package/dist/types/src/hooks/useMessageQueue.d.ts +1 -1
  98. package/dist/types/src/translations.d.ts +3 -0
  99. package/dist/types/src/translations.d.ts.map +1 -1
  100. package/dist/types/src/types/chat.d.ts +4 -6
  101. package/dist/types/src/types/chat.d.ts.map +1 -1
  102. package/package.json +57 -55
  103. package/src/AssistantPlugin.tsx +8 -19
  104. package/src/capabilities/app-graph-builder.ts +53 -2
  105. package/src/capabilities/intent-resolver.ts +3 -2
  106. package/src/capabilities/react-surface.tsx +25 -8
  107. package/src/components/AmbientDialog/AmbientDialog.stories.tsx +3 -1
  108. package/src/components/AssistantDialog.tsx +1 -1
  109. package/src/components/ChatContainer.tsx +18 -4
  110. package/src/components/Prompt/PromptBar.tsx +2 -2
  111. package/src/components/TemplateContainer.tsx +1 -1
  112. package/src/components/TemplateEditor/TemplateEditor.stories.tsx +4 -4
  113. package/src/components/TemplateEditor/TemplateForm.stories.tsx +2 -2
  114. package/src/components/Thread/Thread.stories.tsx +3 -3
  115. package/src/components/Thread/ThreadContainer.stories.tsx +4 -4
  116. package/src/components/Thread/ThreadContainer.tsx +4 -1
  117. package/src/components/Toolbox/Toolbox.stories.tsx +2 -2
  118. package/src/hooks/processor.ts +1 -1
  119. package/src/hooks/useChatProcessor.tsx +12 -4
  120. package/src/hooks/useMessageQueue.ts +2 -2
  121. package/src/translations.ts +1 -0
  122. package/src/types/chat.ts +2 -3
  123. package/dist/lib/browser/AssistantDialog-EIUUSXDS.mjs.map +0 -7
  124. package/dist/lib/browser/ChatContainer-NHHA6CSP.mjs.map +0 -7
  125. package/dist/lib/browser/app-graph-builder-DTCUWBKB.mjs.map +0 -7
  126. package/dist/lib/browser/chunk-X6ALDUA5.mjs +0 -184
  127. package/dist/lib/browser/chunk-X6ALDUA5.mjs.map +0 -7
  128. package/dist/lib/browser/react-surface-YNN5NYJW.mjs.map +0 -7
  129. package/dist/lib/node/AssistantDialog-GT7R7MKH.cjs.map +0 -7
  130. package/dist/lib/node/ChatContainer-JUZOEZZ7.cjs.map +0 -7
  131. package/dist/lib/node/app-graph-builder-3P6WSON2.cjs.map +0 -7
  132. package/dist/lib/node/chunk-KLSNCP34.cjs.map +0 -7
  133. package/dist/lib/node/intent-resolver-YIFAMM3B.cjs.map +0 -7
  134. package/dist/lib/node/react-surface-IDGIN55C.cjs.map +0 -7
  135. package/dist/lib/node-esm/AssistantDialog-JMBFM6QH.mjs.map +0 -7
  136. package/dist/lib/node-esm/ChatContainer-ZNN5CMVL.mjs.map +0 -7
  137. package/dist/lib/node-esm/app-graph-builder-PMAQLTTN.mjs.map +0 -7
  138. package/dist/lib/node-esm/chunk-NMMRHHAR.mjs +0 -185
  139. package/dist/lib/node-esm/chunk-NMMRHHAR.mjs.map +0 -7
  140. package/dist/lib/node-esm/react-surface-424JZTZ4.mjs.map +0 -7
  141. package/dist/types/src/hooks/email.d.ts +0 -4
  142. package/dist/types/src/hooks/email.d.ts.map +0 -1
  143. package/src/hooks/email.ts +0 -49
  144. /package/dist/lib/browser/{ai-client-BAPVMSNX.mjs.map → ai-client-CDZLSNXE.mjs.map} +0 -0
  145. /package/dist/lib/browser/{chunk-AF7VQAKS.mjs.map → chunk-3HCI5FIL.mjs.map} +0 -0
  146. /package/dist/lib/browser/{chunk-25APJ3ZK.mjs.map → chunk-KYMKVE6M.mjs.map} +0 -0
  147. /package/dist/lib/browser/{chunk-6FTPLBSC.mjs.map → chunk-NFUHCW2J.mjs.map} +0 -0
  148. /package/dist/lib/browser/{chunk-SVUCJXGN.mjs.map → chunk-TXJWGWJ7.mjs.map} +0 -0
  149. /package/dist/lib/browser/{settings-VAW6UWFL.mjs.map → settings-U6UFQX32.mjs.map} +0 -0
  150. /package/dist/lib/node/{ai-client-5ESLYXAV.cjs.map → ai-client-URCCYU6B.cjs.map} +0 -0
  151. /package/dist/lib/node/{chunk-VRXFIS4X.cjs.map → chunk-GBUNQ257.cjs.map} +0 -0
  152. /package/dist/lib/node/{chunk-U6J2GO7I.cjs.map → chunk-Q5XWEMHB.cjs.map} +0 -0
  153. /package/dist/lib/node/{chunk-N3SW6DJ6.cjs.map → chunk-XI2ARIEO.cjs.map} +0 -0
  154. /package/dist/lib/node/{chunk-G2HY3UJ4.cjs.map → chunk-ZKOC4ZFY.cjs.map} +0 -0
  155. /package/dist/lib/node/{settings-2FEYGLYU.cjs.map → settings-TXGRCYAL.cjs.map} +0 -0
  156. /package/dist/lib/node-esm/{ai-client-XYZ5N7CR.mjs.map → ai-client-WMHS5EGV.mjs.map} +0 -0
  157. /package/dist/lib/node-esm/{chunk-2CIYX3SD.mjs.map → chunk-6JK5HEUQ.mjs.map} +0 -0
  158. /package/dist/lib/node-esm/{chunk-N6BVC2C2.mjs.map → chunk-ECRK6TUQ.mjs.map} +0 -0
  159. /package/dist/lib/node-esm/{chunk-SMUINDXQ.mjs.map → chunk-GBBXIW5F.mjs.map} +0 -0
  160. /package/dist/lib/node-esm/{chunk-J63VQFQO.mjs.map → chunk-PBZA7XJR.mjs.map} +0 -0
  161. /package/dist/lib/node-esm/{settings-VHR5KT4J.mjs.map → settings-DZU5PNXM.mjs.map} +0 -0
@@ -5,6 +5,7 @@
5
5
  import React from 'react';
6
6
 
7
7
  import { Capabilities, useCapabilities, useCapability } from '@dxos/app-framework';
8
+ import { type AssociatedArtifact } from '@dxos/artifact';
8
9
  import { TranscriptionCapabilities } from '@dxos/plugin-transcription';
9
10
  import { StackItem } from '@dxos/react-ui-stack';
10
11
 
@@ -13,13 +14,26 @@ import { ASSISTANT_PLUGIN } from '../meta';
13
14
  import { type AssistantSettingsProps, type AIChatType } from '../types';
14
15
 
15
16
  // TODO(burdon): Attention.
16
- export const ChatContainer = ({ chat, role }: { chat: AIChatType; role: string }) => {
17
- const transcription = useCapabilities(TranscriptionCapabilities.Transcription).length > 0;
17
+ export const ChatContainer = ({
18
+ role,
19
+ chat,
20
+ associatedArtifact,
21
+ }: {
22
+ role: string;
23
+ chat: AIChatType;
24
+ associatedArtifact?: AssociatedArtifact;
25
+ }) => {
26
+ const transcription = useCapabilities(TranscriptionCapabilities.Transcriber).length > 0;
18
27
  const settings = useCapability(Capabilities.SettingsStore).getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;
19
28
 
20
29
  return (
21
- <StackItem.Content toolbar={false} role={role} classNames='mli-auto w-full max-w-[50rem]'>
22
- <ThreadContainer chat={chat} settings={settings} transcription={transcription} />
30
+ <StackItem.Content role={role} classNames='container-max-width'>
31
+ <ThreadContainer
32
+ chat={chat}
33
+ settings={settings}
34
+ transcription={transcription}
35
+ associatedArtifact={associatedArtifact}
36
+ />
23
37
  </StackItem.Content>
24
38
  );
25
39
  };
@@ -7,7 +7,7 @@ import React, { useRef, useState } from 'react';
7
7
  import { useVoiceInput } from '@dxos/plugin-transcription';
8
8
  import { Icon, IconButton, type ThemedClassName, Tooltip, useTranslation } from '@dxos/react-ui';
9
9
  import { Spinner } from '@dxos/react-ui-sfx';
10
- import { errorText, mx } from '@dxos/react-ui-theme';
10
+ import { errorMessageColors, errorText, mx } from '@dxos/react-ui-theme';
11
11
 
12
12
  import { Prompt, type PromptController, type PromptProps } from './Prompt';
13
13
  import { ASSISTANT_PLUGIN } from '../../meta';
@@ -60,7 +60,7 @@ export const PromptBar = ({
60
60
  </Tooltip.Trigger>
61
61
  <Tooltip.Portal>
62
62
  <Tooltip.Content>
63
- <div className='text-sm text-error-500'>{error.message}</div>
63
+ <div className={mx('text-sm', errorMessageColors)}>{error.message}</div>
64
64
  <Tooltip.Arrow />
65
65
  </Tooltip.Content>
66
66
  </Tooltip.Portal>
@@ -50,7 +50,7 @@ export const TemplateContainer = ({ template, role }: { template: TemplateType;
50
50
  );
51
51
 
52
52
  return (
53
- <StackItem.Content toolbar role={role} classNames='mli-auto w-full max-w-[50rem]'>
53
+ <StackItem.Content role={role} toolbar classNames='container-max-width'>
54
54
  {/* TODO(wittjosiah): Move this toolbar into c11y sidebar. */}
55
55
  <Toolbar.Root>
56
56
  <Select.Root value={template.kind.include} onValueChange={handleKindChange}>
@@ -34,7 +34,7 @@ const TEMPLATE = [
34
34
  '',
35
35
  ].join('\n');
36
36
 
37
- const Render = ({ text }: TemplateEditorProps & { text: string }) => {
37
+ const DefaultStory = ({ text }: TemplateEditorProps & { text: string }) => {
38
38
  const client = useClient();
39
39
  const [template] = useState(() => {
40
40
  const space = client.spaces.default;
@@ -48,10 +48,10 @@ const Render = ({ text }: TemplateEditorProps & { text: string }) => {
48
48
  );
49
49
  };
50
50
 
51
- const meta: Meta<typeof Render> = {
51
+ const meta: Meta<typeof DefaultStory> = {
52
52
  title: 'plugins/plugin-automation/TemplateEditor',
53
53
  component: TemplateEditor,
54
- render: Render,
54
+ render: DefaultStory,
55
55
  decorators: [
56
56
  withClientProvider({
57
57
  createIdentity: true,
@@ -68,7 +68,7 @@ const meta: Meta<typeof Render> = {
68
68
 
69
69
  export default meta;
70
70
 
71
- type Story = Meta<typeof Render>;
71
+ type Story = Meta<typeof DefaultStory>;
72
72
 
73
73
  export const Default: Story = {
74
74
  args: {
@@ -26,7 +26,7 @@ const TEMPLATE = [
26
26
  '{{input}}',
27
27
  ].join('\n');
28
28
 
29
- const Render = () => {
29
+ const DefaultStory = () => {
30
30
  const client = useClient();
31
31
  const [template] = useState(() => {
32
32
  const space = client.spaces.default;
@@ -43,7 +43,7 @@ const Render = () => {
43
43
  const meta: Meta<typeof TemplateForm> = {
44
44
  title: 'plugins/plugin-automation/TemplateForm',
45
45
  component: TemplateForm,
46
- render: Render,
46
+ render: DefaultStory,
47
47
  decorators: [
48
48
  withClientProvider({
49
49
  createIdentity: true,
@@ -20,7 +20,7 @@ import translations from '../../translations';
20
20
 
21
21
  faker.seed(1);
22
22
 
23
- const Render = ({ messages: _messages, ...props }: ThreadProps) => {
23
+ const DefaultStory = ({ messages: _messages, ...props }: ThreadProps) => {
24
24
  const [processing, setProcessing] = useState(false);
25
25
  const [messages, setMessages] = useState<Message[]>(_messages ?? []);
26
26
  useEffect(() => {
@@ -70,7 +70,7 @@ const Render = ({ messages: _messages, ...props }: ThreadProps) => {
70
70
 
71
71
  const meta: Meta<ThreadProps> = {
72
72
  title: 'plugins/plugin-automation/Thread',
73
- render: Render,
73
+ render: DefaultStory,
74
74
  component: Thread,
75
75
  decorators: [
76
76
  withSignals,
@@ -207,6 +207,6 @@ export const Incremental: Story = {
207
207
  return () => clearInterval(interval);
208
208
  }, []);
209
209
 
210
- return <Render messages={messages} collapse />;
210
+ return <DefaultStory messages={messages} collapse />;
211
211
  },
212
212
  };
@@ -49,7 +49,7 @@ type RenderProps = {
49
49
  } & Pick<ThreadProps, 'debug'>;
50
50
 
51
51
  // TODO(burdon): Use ChatContainer.
52
- const Render = ({ items: _items, prompts = [], ...props }: RenderProps) => {
52
+ const DefaultStory = ({ items: _items, prompts = [], ...props }: RenderProps) => {
53
53
  const space = useSpace();
54
54
  const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
55
55
  const tools = useMemo<Tool[]>(() => [...genericTools], []);
@@ -204,9 +204,9 @@ const Render = ({ items: _items, prompts = [], ...props }: RenderProps) => {
204
204
  const randomQueueDxn = () =>
205
205
  new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, SpaceId.random(), ObjectId.random()]).toString();
206
206
 
207
- const meta: Meta<typeof Render> = {
207
+ const meta: Meta<typeof DefaultStory> = {
208
208
  title: 'plugins/plugin-automation/ThreadContainer',
209
- render: Render,
209
+ render: DefaultStory,
210
210
  decorators: [
211
211
  withSignals,
212
212
  withClientProvider({
@@ -242,7 +242,7 @@ const meta: Meta<typeof Render> = {
242
242
 
243
243
  export default meta;
244
244
 
245
- type Story = StoryObj<typeof Render>;
245
+ type Story = StoryObj<typeof DefaultStory>;
246
246
 
247
247
  export const Default: Story = {
248
248
  args: {
@@ -4,6 +4,7 @@
4
4
 
5
5
  import React, { useCallback, type FC } from 'react';
6
6
 
7
+ import { type AssociatedArtifact } from '@dxos/artifact';
7
8
  import { invariant } from '@dxos/invariant';
8
9
  import { log } from '@dxos/log';
9
10
  import { getSpace } from '@dxos/react-client/echo';
@@ -17,6 +18,7 @@ export type ThreadContainerProps = {
17
18
  chat?: AIChatType;
18
19
  settings?: AssistantSettingsProps;
19
20
  part?: 'deck' | 'dialog';
21
+ associatedArtifact?: AssociatedArtifact;
20
22
  } & Pick<ThreadProps, 'debug' | 'transcription' | 'onOpenChange'>;
21
23
 
22
24
  // TODO(burdon): Since this only wraps Thread, just separate out hook?
@@ -25,12 +27,13 @@ export const ThreadContainer: FC<ThemedClassName<ThreadContainerProps>> = ({
25
27
  chat,
26
28
  settings,
27
29
  part,
30
+ associatedArtifact,
28
31
  onOpenChange,
29
32
  ...props
30
33
  }) => {
31
34
  const space = getSpace(chat);
32
35
  const contextProvider = useContextProvider(space);
33
- const processor = useChatProcessor({ chat, space, settings, part });
36
+ const processor = useChatProcessor({ chat, space, settings, part, associatedArtifact });
34
37
  const messageQueue = useMessageQueue(chat);
35
38
  const messages = [...(messageQueue?.items ?? []), ...processor.messages.value];
36
39
 
@@ -20,7 +20,7 @@ import { withLayout, withSignals, withTheme } from '@dxos/storybook-utils';
20
20
  import { Toolbox, type ToolboxProps } from './Toolbox';
21
21
  import translations from '../../translations';
22
22
 
23
- const Render = (props: ToolboxProps) => {
23
+ const DefaultStory = (props: ToolboxProps) => {
24
24
  const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
25
25
  return (
26
26
  <Toolbox
@@ -34,7 +34,7 @@ const Render = (props: ToolboxProps) => {
34
34
  const meta: Meta<typeof Toolbox> = {
35
35
  title: 'plugins/plugin-automation/Toolbox',
36
36
  component: Toolbox,
37
- render: Render,
37
+ render: DefaultStory,
38
38
  decorators: [
39
39
  withSignals,
40
40
  withPluginManager({
@@ -127,10 +127,10 @@ export class ChatProcessor {
127
127
  artifacts: this._artifacts ?? [],
128
128
  tools: this._tools ?? [],
129
129
  prompt: message,
130
+ systemPrompt: this._options.systemPrompt,
130
131
  extensions: this._extensions,
131
132
  generationOptions: {
132
133
  model: this._options.model,
133
- systemPrompt: this._options.systemPrompt,
134
134
  },
135
135
  });
136
136
 
@@ -5,7 +5,7 @@
5
5
  import { useEffect, useMemo, useState } from 'react';
6
6
 
7
7
  import { Capabilities, useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework';
8
- import { createSystemPrompt, type Tool } from '@dxos/artifact';
8
+ import { type AssociatedArtifact, createSystemPrompt, type Tool } from '@dxos/artifact';
9
9
  import { DEFAULT_EDGE_MODEL, DEFAULT_OLLAMA_MODEL } from '@dxos/assistant';
10
10
  import { FunctionType } from '@dxos/functions/types';
11
11
  import { log } from '@dxos/log';
@@ -23,12 +23,19 @@ type UseChatProcessorProps = {
23
23
  space?: Space;
24
24
  settings?: AssistantSettingsProps;
25
25
  part?: 'deck' | 'dialog';
26
+ associatedArtifact?: AssociatedArtifact;
26
27
  };
27
28
 
28
29
  /**
29
30
  * Configure and create ChatProcessor.
30
31
  */
31
- export const useChatProcessor = ({ chat, space, settings, part = 'deck' }: UseChatProcessorProps): ChatProcessor => {
32
+ export const useChatProcessor = ({
33
+ chat,
34
+ space,
35
+ settings,
36
+ part = 'deck',
37
+ associatedArtifact,
38
+ }: UseChatProcessorProps): ChatProcessor => {
32
39
  const aiClient = useCapability(AssistantCapabilities.AiClient);
33
40
  const globalTools = useCapabilities(Capabilities.Tools);
34
41
  const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
@@ -66,9 +73,10 @@ export const useChatProcessor = ({ chat, space, settings, part = 'deck' }: UseCh
66
73
  const systemPrompt = useMemo(
67
74
  () =>
68
75
  createSystemPrompt({
69
- artifacts: artifactDefinitions.map((definition) => definition.instructions),
76
+ artifacts: artifactDefinitions.map((definition) => `${definition.name}\n${definition.instructions}`),
77
+ associatedArtifact,
70
78
  }),
71
- [artifactDefinitions],
79
+ [artifactDefinitions, associatedArtifact],
72
80
  );
73
81
 
74
82
  // TODO(burdon): Remove default (let backend decide if not specified).
@@ -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?.queue.dxn;
16
+ const dxn = space && chat?.assistantChatQueue.dxn;
17
17
  return dxn ? new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, space.id, dxn.parts.at(-1)!]) : undefined;
18
- }, [space, chat?.queue.dxn]);
18
+ }, [space, chat?.assistantChatQueue.dxn]);
19
19
 
20
20
  return useQueue<Message>(queueDxn);
21
21
  };
@@ -20,6 +20,7 @@ export default [
20
20
  'templates label': 'Templates',
21
21
 
22
22
  'open ambient chat label': 'Open AI chat',
23
+ 'assistant chat label': 'AI chat',
23
24
  'plugin name': 'Assistant',
24
25
  'object placeholder': 'New prompt',
25
26
  'create object label': 'Create prompt',
package/src/types/chat.ts CHANGED
@@ -2,10 +2,9 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Expando, Ref, S, TypedObject } from '@dxos/echo-schema';
5
+ import { Expando, Ref, TypedObject } from '@dxos/echo-schema';
6
6
 
7
7
  export class AIChatType extends TypedObject({ typename: 'dxos.org/type/AIChat', version: '0.1.0' })({
8
- name: S.optional(S.String),
9
8
  // TODO(wittjosiah): Should be a ref to a Queue.
10
- queue: Ref(Expando),
9
+ assistantChatQueue: Ref(Expando),
11
10
  }) {}
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/AssistantDialog.tsx", "../../../src/components/AmbientDialog/AmbientDialog.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type FC, useState } from 'react';\n\nimport { useCapability, Capabilities, useCapabilities } from '@dxos/app-framework';\nimport { TranscriptionCapabilities } from '@dxos/plugin-transcription';\nimport { useTranslation } from '@dxos/react-ui';\n\nimport { AmbientDialog } from './AmbientDialog';\nimport { ThreadContainer } from './Thread';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps, type AIChatType } from '../types';\n\nexport const AssistantDialog: FC<{ chat?: AIChatType }> = ({ chat }) => {\n const { t } = useTranslation(ASSISTANT_PLUGIN);\n const transcription = useCapabilities(TranscriptionCapabilities.Transcription).length > 0;\n const settings = useCapability(Capabilities.SettingsStore).getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n // TODO(burdon): Refocus when open.\n const [open, setOpen] = useState(false);\n\n return (\n <AmbientDialog open={open} onOpenChange={setOpen} title={t('assistant dialog title')}>\n <ThreadContainer\n chat={chat}\n onOpenChange={setOpen}\n settings={settings}\n part={'dialog'}\n transcription={transcription}\n />\n </AmbientDialog>\n );\n};\n\nexport default AssistantDialog;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport React, { type PropsWithChildren, useCallback, useEffect, useState } from 'react';\n\nimport { Dialog, Icon, IconButton } from '@dxos/react-ui';\nimport { resizeAttributes, ResizeHandle, type Size, sizeStyle } from '@dxos/react-ui-dnd';\nimport { mx } from '@dxos/react-ui-theme';\n\nconst preventDefault = (event: Event) => event.preventDefault();\n\nconst minSize = 5;\n\nexport type AmbientDialogProps = PropsWithChildren<{\n open?: boolean;\n title?: string;\n onOpenChange?: (open: boolean) => void;\n}>;\n\nexport const AmbientDialog = ({ children, open: controlledOpen, title, onOpenChange }: AmbientDialogProps) => {\n const [resizeKey, setReizeKey] = useState(0);\n const [size, setSize] = useState<Size>('min-content');\n const [open, setOpen] = useState(controlledOpen);\n\n // Update controlled value.\n useEffect(() => {\n setOpen(controlledOpen);\n }, [controlledOpen]);\n\n // Update size and key.\n useEffect(() => {\n setSize(open ? 'min-content' : minSize);\n setReizeKey((key) => key + 1);\n }, [open]);\n\n // TODO(burdon): Animate open/close.\n // NOTE: We set the min size to 5rem (80px), and the header and prompt bar to 40px (i.e., the rail-size) each.\n // The dialog has no vertical padding and has box-content so that when closed it collapses to the size of the header and prompt bar.\n const handleToggle = useCallback(() => {\n setOpen((open) => {\n onOpenChange?.(!open);\n return !open;\n });\n }, []);\n\n return (\n <div role='none' className='dx-dialog__overlay bg-transparent pointer-events-none' data-block-align='end'>\n <Dialog.Content\n classNames='relative box-content py-0 px-2 md:is-[35rem] md:max-is-none overflow-hidden pointer-events-auto transition-[block-size] ease-in-out duration-0 [&:not([data-dx-resizing=\"true\"])]:duration-200'\n inOverlayLayout\n {...resizeAttributes}\n style={{\n ...sizeStyle(size, 'vertical', true),\n maxBlockSize: 'calc(100dvh - env(safe-area-inset-bottom) - env(safe-area-inset-top) - 9rem)',\n }}\n onInteractOutside={preventDefault}\n >\n <ResizeHandle\n key={resizeKey}\n side='block-start'\n defaultSize='min-content'\n minSize={minSize}\n fallbackSize={minSize}\n iconPosition='center'\n onSizeChange={setSize}\n />\n\n <DialogHeader open={open} title={title} onToggle={handleToggle} />\n\n {children}\n </Dialog.Content>\n </div>\n );\n};\n\n/**\n * Matches same layout grid as PromptBar.\n */\nconst DialogHeader = ({ open, title, onToggle }: { open?: boolean; title?: string; onToggle: () => void }) => {\n return (\n <div className='flex shrink-0 w-full grid grid-cols-[var(--rail-action)_1fr_var(--rail-action)] items-center overflow-hidden'>\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n <Dialog.Close>\n <Icon icon='ph--x--regular' />\n </Dialog.Close>\n </div>\n <div className='grow'>\n <Dialog.Title classNames='flex justify-center text-xs text-subdued'>{title}</Dialog.Title>\n </div>\n <div className='flex w-[--rail-action] h-[--rail-action] items-center justify-center'>\n <IconButton\n variant='ghost'\n icon={'ph--caret-up--regular'}\n classNames={mx('[&>svg]:transition [&>svg]:duration-200', open && '[&>svg]:rotate-180')}\n iconOnly\n label='Shrink'\n onClick={onToggle}\n />\n </div>\n </div>\n );\n};\n"],
5
- "mappings": "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",
6
- "names": ["React", "useState", "useCapability", "Capabilities", "useCapabilities", "TranscriptionCapabilities", "useTranslation", "React", "useCallback", "useEffect", "useState", "Dialog", "Icon", "IconButton", "resizeAttributes", "ResizeHandle", "sizeStyle", "mx", "preventDefault", "event", "minSize", "AmbientDialog", "children", "open", "controlledOpen", "title", "onOpenChange", "resizeKey", "setReizeKey", "useState", "size", "setSize", "setOpen", "useEffect", "key", "handleToggle", "useCallback", "div", "role", "className", "data-block-align", "Dialog", "Content", "classNames", "inOverlayLayout", "resizeAttributes", "style", "sizeStyle", "maxBlockSize", "onInteractOutside", "ResizeHandle", "side", "defaultSize", "fallbackSize", "iconPosition", "onSizeChange", "DialogHeader", "onToggle", "Close", "Icon", "icon", "Title", "IconButton", "variant", "mx", "iconOnly", "label", "onClick", "AssistantDialog", "chat", "t", "useTranslation", "ASSISTANT_PLUGIN", "transcription", "useCapabilities", "TranscriptionCapabilities", "Transcription", "length", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "value", "open", "setOpen", "useState", "React", "AmbientDialog", "onOpenChange", "title", "ThreadContainer", "part"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/components/ChatContainer.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, useCapabilities, useCapability } from '@dxos/app-framework';\nimport { TranscriptionCapabilities } from '@dxos/plugin-transcription';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { ThreadContainer } from './Thread';\nimport { ASSISTANT_PLUGIN } from '../meta';\nimport { type AssistantSettingsProps, type AIChatType } from '../types';\n\n// TODO(burdon): Attention.\nexport const ChatContainer = ({ chat, role }: { chat: AIChatType; role: string }) => {\n const transcription = useCapabilities(TranscriptionCapabilities.Transcription).length > 0;\n const settings = useCapability(Capabilities.SettingsStore).getStore<AssistantSettingsProps>(ASSISTANT_PLUGIN)?.value;\n\n return (\n <StackItem.Content toolbar={false} role={role} classNames='mli-auto w-full max-w-[50rem]'>\n <ThreadContainer chat={chat} settings={settings} transcription={transcription} />\n </StackItem.Content>\n );\n};\n\nexport default ChatContainer;\n"],
5
- "mappings": ";;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,iBAAiBC,qBAAqB;AAC7D,SAASC,iCAAiC;AAC1C,SAASC,iBAAiB;AAOnB,IAAMC,gBAAgB,CAAC,EAAEC,MAAMC,KAAI,MAAsC;AAC9E,QAAMC,gBAAgBC,gBAAgBC,0BAA0BC,aAAa,EAAEC,SAAS;AACxF,QAAMC,WAAWC,cAAcC,aAAaC,aAAa,EAAEC,SAAiCC,gBAAAA,GAAmBC;AAE/G,SACE,sBAAA,cAACC,UAAUC,SAAO;IAACC,SAAS;IAAOf;IAAYgB,YAAW;KACxD,sBAAA,cAACC,iBAAAA;IAAgBlB;IAAYO;IAAoBL;;AAGvD;AAEA,IAAA,wBAAeH;",
6
- "names": ["React", "Capabilities", "useCapabilities", "useCapability", "TranscriptionCapabilities", "StackItem", "ChatContainer", "chat", "role", "transcription", "useCapabilities", "TranscriptionCapabilities", "Transcription", "length", "settings", "useCapability", "Capabilities", "SettingsStore", "getStore", "ASSISTANT_PLUGIN", "value", "StackItem", "Content", "toolbar", "classNames", "ThreadContainer"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/app-graph-builder.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n LayoutAction,\n type PromiseIntentDispatcher,\n type PluginsContext,\n} from '@dxos/app-framework';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, type Node, ROOT_ID } from '@dxos/plugin-graph';\nimport { memoizeQuery } from '@dxos/plugin-space';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { type Space, Filter, fullyQualifiedId, getSpace, isSpace } from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, ASSISTANT_PLUGIN } from '../meta';\nimport { AIChatType, AssistantAction, TemplateType } from '../types';\n\nexport default (context: PluginsContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${ASSISTANT_PLUGIN}/assistant`,\n filter: (node): node is Node<null> => node.id === ROOT_ID,\n actions: () => [\n {\n id: `${LayoutAction.UpdateDialog._tag}/assistant/open`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.requestCapability(Capabilities.IntentDispatcher);\n const client = context.requestCapability(ClientCapabilities.Client);\n const layout = context.requestCapability(Capabilities.Layout);\n const { graph } = context.requestCapability(Capabilities.AppGraph);\n\n // TODO(burdon): Get space from workspace.\n // TODO(burdon): If need to create chat, then add to dispatch stack below.\n let chat: AIChatType | undefined;\n if (layout.active.length > 0) {\n const node = graph.findNode(layout.active[0]);\n if (node) {\n const space = getSpace(node.data);\n if (space) {\n chat = await getOrCreateChat(dispatch, space);\n }\n }\n } else {\n const space = client.spaces.default;\n chat = await getOrCreateChat(dispatch, space);\n }\n\n if (!chat) {\n return;\n }\n\n await dispatch(\n createIntent(LayoutAction.UpdateDialog, {\n part: 'dialog',\n subject: ASSISTANT_DIALOG,\n options: {\n state: true,\n blockAlign: 'end',\n props: {\n chat,\n },\n },\n }),\n );\n },\n properties: {\n label: ['open assistant label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--chat-centered-text--regular',\n disposition: 'pin-end',\n position: 'hoist',\n keyBinding: {\n macos: 'shift+meta+k',\n windows: 'shift+ctrl+k',\n },\n },\n },\n ],\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/root`,\n filter: (node): node is Node<Space> => isSpace(node.data),\n connector: ({ node }) => {\n const templates = memoizeQuery(node.data, Filter.schema(TemplateType));\n return templates.length > 0\n ? [\n {\n id: `${ASSISTANT_PLUGIN}/templates`,\n type: `${ASSISTANT_PLUGIN}/templates`,\n data: null,\n properties: {\n label: ['templates label', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--file-code--regular',\n space: node.data,\n },\n },\n ]\n : [];\n },\n }),\n\n createExtension({\n id: `${ASSISTANT_PLUGIN}/templates`,\n filter: (node): node is Node<null, { space: Space }> => node.id === `${ASSISTANT_PLUGIN}/templates`,\n connector: ({ node }) => {\n const templates = memoizeQuery(node.properties.space, Filter.schema(TemplateType));\n return templates\n .toSorted((a, b) => {\n const nameA = a.name ?? '';\n const nameB = b.name ?? '';\n return nameA.localeCompare(nameB);\n })\n .map((template) => ({\n id: fullyQualifiedId(template),\n type: `${ASSISTANT_PLUGIN}/template`,\n data: template,\n properties: {\n label: template.name ?? ['template title placeholder', { ns: ASSISTANT_PLUGIN }],\n icon: 'ph--file-code--regular',\n },\n }));\n },\n }),\n ]);\n\n// TODO(burdon): Factor out.\nconst getOrCreateChat = async (dispatch: PromiseIntentDispatcher, space: Space): Promise<AIChatType | undefined> => {\n const { objects } = await space.db.query(Filter.schema(AIChatType)).run();\n // console.log('objects', JSON.stringify(objects, null, 2));\n if (objects.length > 0) {\n // TODO(burdon): Is this the most recent?\n return objects[objects.length - 1];\n }\n\n const { data } = await dispatch(createIntent(AssistantAction.CreateChat, { spaceId: space.id }));\n invariant(data?.object instanceof AIChatType);\n await dispatch(createIntent(SpaceAction.AddObject, { target: space, object: data.object }));\n return data.object;\n};\n"],
5
- "mappings": ";;;;;;;;;;;AAIA,SACEA,cACAC,aACAC,cACAC,oBAGK;AACP,SAASC,iBAAiB;AAC1B,SAASC,0BAA0B;AACnC,SAASC,iBAA4BC,eAAe;AACpD,SAASC,oBAAoB;AAC7B,SAASC,mBAAmB;AAC5B,SAAqBC,QAAQC,kBAAkBC,UAAUC,eAAe;;AAKxE,IAAA,4BAAe,CAACC,YACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,gBAAAA;IACPC,QAAQ,CAACC,SAA6BA,KAAKH,OAAOI;IAClDC,SAAS,MAAM;MACb;QACEL,IAAI,GAAGM,aAAaC,aAAaC,IAAI;QACrCC,MAAM,YAAA;AACJ,gBAAM,EAAEC,iBAAiBC,SAAQ,IAAKhB,QAAQiB,kBAAkBf,aAAagB,gBAAgB;AAC7F,gBAAMC,SAASnB,QAAQiB,kBAAkBG,mBAAmBC,MAAM;AAClE,gBAAMC,SAAStB,QAAQiB,kBAAkBf,aAAaqB,MAAM;AAC5D,gBAAM,EAAEC,MAAK,IAAKxB,QAAQiB,kBAAkBf,aAAauB,QAAQ;AAIjE,cAAIC;AACJ,cAAIJ,OAAOK,OAAOC,SAAS,GAAG;AAC5B,kBAAMpB,OAAOgB,MAAMK,SAASP,OAAOK,OAAO,CAAA,CAAE;AAC5C,gBAAInB,MAAM;AACR,oBAAMsB,QAAQC,SAASvB,KAAKM,IAAI;AAChC,kBAAIgB,OAAO;AACTJ,uBAAO,MAAMM,gBAAgBhB,UAAUc,KAAAA;cACzC;YACF;UACF,OAAO;AACL,kBAAMA,QAAQX,OAAOc,OAAOC;AAC5BR,mBAAO,MAAMM,gBAAgBhB,UAAUc,KAAAA;UACzC;AAEA,cAAI,CAACJ,MAAM;AACT;UACF;AAEA,gBAAMV,SACJmB,aAAaxB,aAAaC,cAAc;YACtCwB,MAAM;YACNC,SAASC;YACTC,SAAS;cACPC,OAAO;cACPC,YAAY;cACZC,OAAO;gBACLhB;cACF;YACF;UACF,CAAA,CAAA;QAEJ;QACAiB,YAAY;UACVC,OAAO;YAAC;YAAwB;cAAEC,IAAIvC;YAAiB;;UACvDwC,MAAM;UACNC,aAAa;UACbC,UAAU;UACVC,YAAY;YACVC,OAAO;YACPC,SAAS;UACX;QACF;MACF;;EAEJ,CAAA;EAEA/C,gBAAgB;IACdC,IAAI,GAAGC,gBAAAA;IACPC,QAAQ,CAACC,SAA8B4C,QAAQ5C,KAAKM,IAAI;IACxDuC,WAAW,CAAC,EAAE7C,KAAI,MAAE;AAClB,YAAM8C,YAAYC,aAAa/C,KAAKM,MAAM0C,OAAOC,OAAOC,YAAAA,CAAAA;AACxD,aAAOJ,UAAU1B,SAAS,IACtB;QACE;UACEvB,IAAI,GAAGC,gBAAAA;UACPqD,MAAM,GAAGrD,gBAAAA;UACTQ,MAAM;UACN6B,YAAY;YACVC,OAAO;cAAC;cAAmB;gBAAEC,IAAIvC;cAAiB;;YAClDwC,MAAM;YACNhB,OAAOtB,KAAKM;UACd;QACF;UAEF,CAAA;IACN;EACF,CAAA;EAEAV,gBAAgB;IACdC,IAAI,GAAGC,gBAAAA;IACPC,QAAQ,CAACC,SAA+CA,KAAKH,OAAO,GAAGC,gBAAAA;IACvE+C,WAAW,CAAC,EAAE7C,KAAI,MAAE;AAClB,YAAM8C,YAAYC,aAAa/C,KAAKmC,WAAWb,OAAO0B,OAAOC,OAAOC,YAAAA,CAAAA;AACpE,aAAOJ,UACJM,SAAS,CAACC,GAAGC,MAAAA;AACZ,cAAMC,QAAQF,EAAEG,QAAQ;AACxB,cAAMC,QAAQH,EAAEE,QAAQ;AACxB,eAAOD,MAAMG,cAAcD,KAAAA;MAC7B,CAAA,EACCE,IAAI,CAACC,cAAc;QAClB/D,IAAIgE,iBAAiBD,QAAAA;QACrBT,MAAM,GAAGrD,gBAAAA;QACTQ,MAAMsD;QACNzB,YAAY;UACVC,OAAOwB,SAASJ,QAAQ;YAAC;YAA8B;cAAEnB,IAAIvC;YAAiB;;UAC9EwC,MAAM;QACR;MACF,EAAA;IACJ;EACF,CAAA;CACD;AAGH,IAAMd,kBAAkB,OAAOhB,UAAmCc,UAAAA;AAChE,QAAM,EAAEwC,QAAO,IAAK,MAAMxC,MAAMyC,GAAGC,MAAMhB,OAAOC,OAAOgB,UAAAA,CAAAA,EAAaC,IAAG;AAEvE,MAAIJ,QAAQ1C,SAAS,GAAG;AAEtB,WAAO0C,QAAQA,QAAQ1C,SAAS,CAAA;EAClC;AAEA,QAAM,EAAEd,KAAI,IAAK,MAAME,SAASmB,aAAawC,gBAAgBC,YAAY;IAAEC,SAAS/C,MAAMzB;EAAG,CAAA,CAAA;AAC7FyE,YAAUhE,MAAMiE,kBAAkBN,YAAAA,QAAAA;;;;;;;;;AAClC,QAAMzD,SAASmB,aAAa6C,YAAYC,WAAW;IAAEC,QAAQpD;IAAOiD,QAAQjE,KAAKiE;EAAO,CAAA,CAAA;AACxF,SAAOjE,KAAKiE;AACd;",
6
- "names": ["Capabilities", "contributes", "createIntent", "LayoutAction", "invariant", "ClientCapabilities", "createExtension", "ROOT_ID", "memoizeQuery", "SpaceAction", "Filter", "fullyQualifiedId", "getSpace", "isSpace", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "ASSISTANT_PLUGIN", "filter", "node", "ROOT_ID", "actions", "LayoutAction", "UpdateDialog", "_tag", "data", "dispatchPromise", "dispatch", "requestCapability", "IntentDispatcher", "client", "ClientCapabilities", "Client", "layout", "Layout", "graph", "AppGraph", "chat", "active", "length", "findNode", "space", "getSpace", "getOrCreateChat", "spaces", "default", "createIntent", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "properties", "label", "ns", "icon", "disposition", "position", "keyBinding", "macos", "windows", "isSpace", "connector", "templates", "memoizeQuery", "Filter", "schema", "TemplateType", "type", "toSorted", "a", "b", "nameA", "name", "nameB", "localeCompare", "map", "template", "fullyQualifiedId", "objects", "db", "query", "AIChatType", "run", "AssistantAction", "CreateChat", "spaceId", "invariant", "object", "SpaceAction", "AddObject", "target"]
7
- }
@@ -1,184 +0,0 @@
1
- import {
2
- ASSISTANT_PLUGIN
3
- } from "./chunk-AF7VQAKS.mjs";
4
-
5
- // packages/plugins/experimental/plugin-assistant/src/types/chat.ts
6
- import { Expando, Ref, S, TypedObject } from "@dxos/echo-schema";
7
- var AIChatType = class extends TypedObject({
8
- typename: "dxos.org/type/AIChat",
9
- version: "0.1.0"
10
- })({
11
- name: S.optional(S.String),
12
- // TODO(wittjosiah): Should be a ref to a Queue.
13
- queue: Ref(Expando)
14
- }) {
15
- };
16
-
17
- // packages/plugins/experimental/plugin-assistant/src/types/service.ts
18
- import { ComputeGraph } from "@dxos/conductor";
19
- import { Ref as Ref2, S as S2, TypedObject as TypedObject2 } from "@dxos/echo-schema";
20
- import { FunctionType } from "@dxos/functions/types";
21
- var ApiAuthorizationKey = S2.Struct({
22
- type: S2.Literal("api-key"),
23
- key: S2.String,
24
- placement: S2.Union(S2.Struct({
25
- type: S2.Literal("authorization-header")
26
- }), S2.Struct({
27
- type: S2.Literal("query"),
28
- name: S2.String
29
- }))
30
- });
31
- var ApiAuthorizationOauth = S2.Struct({
32
- type: S2.Literal("oauth"),
33
- clientId: S2.String,
34
- clientSecret: S2.String,
35
- tokenUrl: S2.String,
36
- grantType: S2.String
37
- });
38
- var ApiAuthorization = S2.Union(ApiAuthorizationKey, ApiAuthorizationOauth);
39
- var ServiceInterfaceFunction = S2.Struct({
40
- kind: S2.Literal("function"),
41
- fn: Ref2(FunctionType)
42
- });
43
- var ServiceInterfaceWorkflow = S2.Struct({
44
- kind: S2.Literal("workflow"),
45
- workflow: Ref2(ComputeGraph)
46
- });
47
- var ServiceInterfaceApi = S2.Struct({
48
- kind: S2.Literal("api"),
49
- /**
50
- * URL to fetch the openapi schema.
51
- */
52
- schemaUrl: S2.optional(S2.String),
53
- /**
54
- * Inlined openapi schema.
55
- */
56
- schema: S2.optional(S2.Any),
57
- /**
58
- * Authorization configuration if required.
59
- */
60
- authorization: S2.optional(ApiAuthorization)
61
- });
62
- var ServiceInterface = S2.Union(ServiceInterfaceFunction, ServiceInterfaceWorkflow, ServiceInterfaceApi);
63
- var ServiceType = class extends TypedObject2({
64
- typename: "dxos.org/type/ServiceType",
65
- version: "0.1.0"
66
- })({
67
- serviceId: S2.String,
68
- name: S2.optional(S2.String),
69
- description: S2.optional(S2.String),
70
- category: S2.optional(S2.String),
71
- enabled: S2.optional(S2.Boolean),
72
- /**
73
- * Entries exposed: functions, workflows, and APIs.
74
- */
75
- interfaces: S2.optional(S2.Array(ServiceInterface))
76
- }) {
77
- };
78
- var categoryIcons = {
79
- finance: "ph--bank--regular",
80
- health: "ph--heart--regular",
81
- geolocation: "ph--globe-simple--regular",
82
- education: "ph--books--regular",
83
- entertainment: "ph--music-notes--regular",
84
- shopping: "ph--shopping-cart--regular",
85
- travel: "ph--airplane-takeoff--regular",
86
- utilities: "ph--lightning--regular",
87
- weather: "ph--cloud-rain--regular"
88
- };
89
-
90
- // packages/plugins/experimental/plugin-assistant/src/types/template.ts
91
- import { S as S3, TypedObject as TypedObject3 } from "@dxos/echo-schema";
92
- var TemplateInputType;
93
- (function(TemplateInputType2) {
94
- TemplateInputType2[TemplateInputType2["VALUE"] = 0] = "VALUE";
95
- TemplateInputType2[TemplateInputType2["PASS_THROUGH"] = 1] = "PASS_THROUGH";
96
- TemplateInputType2[TemplateInputType2["RETRIEVER"] = 2] = "RETRIEVER";
97
- TemplateInputType2[TemplateInputType2["FUNCTION"] = 3] = "FUNCTION";
98
- TemplateInputType2[TemplateInputType2["QUERY"] = 4] = "QUERY";
99
- TemplateInputType2[TemplateInputType2["RESOLVER"] = 5] = "RESOLVER";
100
- TemplateInputType2[TemplateInputType2["CONTEXT"] = 6] = "CONTEXT";
101
- TemplateInputType2[TemplateInputType2["SCHEMA"] = 7] = "SCHEMA";
102
- })(TemplateInputType || (TemplateInputType = {}));
103
- var TemplateInputSchema = S3.mutable(S3.Struct({
104
- name: S3.String,
105
- type: S3.optional(S3.Enums(TemplateInputType)),
106
- value: S3.optional(S3.String)
107
- }));
108
- var TemplateKinds = [
109
- "always",
110
- "schema-matching",
111
- "automatically",
112
- "manual"
113
- ];
114
- var TemplateKindSchema = S3.Union(S3.Struct({
115
- include: S3.Literal("always")
116
- }), S3.Struct({
117
- include: S3.Literal("schema-matching"),
118
- typename: S3.String
119
- }), S3.Struct({
120
- include: S3.Literal("automatically"),
121
- description: S3.String
122
- }), S3.Struct({
123
- include: S3.Literal("manual")
124
- }));
125
- var TemplateType = class extends TypedObject3({
126
- typename: "dxos.org/type/Template",
127
- version: "0.1.0"
128
- })({
129
- name: S3.optional(S3.String),
130
- kind: S3.mutable(TemplateKindSchema),
131
- source: S3.String,
132
- inputs: S3.optional(S3.mutable(S3.Array(TemplateInputSchema))),
133
- command: S3.optional(S3.String)
134
- }) {
135
- };
136
-
137
- // packages/plugins/experimental/plugin-assistant/src/types/types.ts
138
- import { S as S4 } from "@dxos/echo-schema";
139
- var AssistantAction;
140
- (function(AssistantAction2) {
141
- const ASSISTANT_ACTION = `${ASSISTANT_PLUGIN}/action`;
142
- class CreateChat extends S4.TaggedClass()(`${ASSISTANT_ACTION}/create-chat`, {
143
- input: S4.Struct({
144
- spaceId: S4.optional(S4.String),
145
- name: S4.optional(S4.String)
146
- }),
147
- output: S4.Struct({
148
- object: AIChatType
149
- })
150
- }) {
151
- }
152
- AssistantAction2.CreateChat = CreateChat;
153
- class CreateTemplate extends S4.TaggedClass()(`${ASSISTANT_ACTION}/create-template`, {
154
- input: S4.Struct({
155
- name: S4.optional(S4.String)
156
- }),
157
- output: S4.Struct({
158
- object: TemplateType
159
- })
160
- }) {
161
- }
162
- AssistantAction2.CreateTemplate = CreateTemplate;
163
- })(AssistantAction || (AssistantAction = {}));
164
- var AssistantSettingsSchema = S4.mutable(S4.Struct({
165
- llmProvider: S4.optional(S4.Literal("edge", "ollama")),
166
- edgeModel: S4.optional(S4.String),
167
- ollamaModel: S4.optional(S4.String),
168
- customPrompts: S4.optional(S4.Boolean)
169
- }));
170
-
171
- export {
172
- AIChatType,
173
- ApiAuthorization,
174
- ServiceType,
175
- categoryIcons,
176
- TemplateInputType,
177
- TemplateInputSchema,
178
- TemplateKinds,
179
- TemplateKindSchema,
180
- TemplateType,
181
- AssistantAction,
182
- AssistantSettingsSchema
183
- };
184
- //# sourceMappingURL=chunk-X6ALDUA5.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/chat.ts", "../../../src/types/service.ts", "../../../src/types/template.ts", "../../../src/types/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Expando, Ref, S, TypedObject } from '@dxos/echo-schema';\n\nexport class AIChatType extends TypedObject({ typename: 'dxos.org/type/AIChat', version: '0.1.0' })({\n name: S.optional(S.String),\n // TODO(wittjosiah): Should be a ref to a Queue.\n queue: Ref(Expando),\n}) {}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport { Ref, S, TypedObject, type Ref$ } from '@dxos/echo-schema';\nimport { FunctionType } from '@dxos/functions/types';\n\nconst ApiAuthorizationKey = S.Struct({\n type: S.Literal('api-key'),\n key: S.String,\n placement: S.Union(\n S.Struct({\n type: S.Literal('authorization-header'),\n }),\n S.Struct({\n type: S.Literal('query'),\n name: S.String,\n }),\n ),\n});\n\nconst ApiAuthorizationOauth = S.Struct({\n type: S.Literal('oauth'),\n clientId: S.String,\n clientSecret: S.String,\n tokenUrl: S.String,\n grantType: S.String,\n});\n\nexport const ApiAuthorization = S.Union(ApiAuthorizationKey, ApiAuthorizationOauth);\nexport type ApiAuthorization = S.Schema.Type<typeof ApiAuthorization>;\n\nconst ServiceInterfaceFunction = S.Struct({\n kind: S.Literal('function'),\n fn: Ref(FunctionType) as Ref$<FunctionType>,\n});\n\nconst ServiceInterfaceWorkflow = S.Struct({\n kind: S.Literal('workflow'),\n workflow: Ref(ComputeGraph) as Ref$<ComputeGraph>,\n});\n\nconst ServiceInterfaceApi = S.Struct({\n kind: S.Literal('api'),\n\n /**\n * URL to fetch the openapi schema.\n */\n schemaUrl: S.optional(S.String),\n\n /**\n * Inlined openapi schema.\n */\n schema: S.optional(S.Any),\n\n /**\n * Authorization configuration if required.\n */\n authorization: S.optional(ApiAuthorization),\n});\n\nconst ServiceInterface = S.Union(ServiceInterfaceFunction, ServiceInterfaceWorkflow, ServiceInterfaceApi);\nexport type ServiceInterface = S.Schema.Type<typeof ServiceInterface>;\n\nexport class ServiceType extends TypedObject({ typename: 'dxos.org/type/ServiceType', version: '0.1.0' })({\n serviceId: S.String,\n name: S.optional(S.String),\n description: S.optional(S.String),\n category: S.optional(S.String),\n enabled: S.optional(S.Boolean),\n\n /**\n * Entries exposed: functions, workflows, and APIs.\n */\n interfaces: S.optional(S.Array(ServiceInterface)),\n}) {}\n\n//\n// Service Registry\n//\n\nexport type ServiceQuery = {\n name?: string;\n category?: string;\n};\n\nexport interface BaseServiceRegistry {\n queryServices(query?: ServiceQuery): Promise<ServiceType[]>;\n}\n\nexport const categoryIcons: Record<string, string> = {\n finance: 'ph--bank--regular',\n health: 'ph--heart--regular',\n geolocation: 'ph--globe-simple--regular',\n education: 'ph--books--regular',\n entertainment: 'ph--music-notes--regular',\n shopping: 'ph--shopping-cart--regular',\n travel: 'ph--airplane-takeoff--regular',\n utilities: 'ph--lightning--regular',\n weather: 'ph--cloud-rain--regular',\n} as const;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { S, TypedObject } from '@dxos/echo-schema';\n\n// TODO(burdon): Change to S.Literal (and discriminated union).\nexport enum TemplateInputType {\n VALUE = 0,\n PASS_THROUGH = 1,\n RETRIEVER = 2,\n FUNCTION = 3,\n QUERY = 4,\n RESOLVER = 5,\n CONTEXT = 6,\n SCHEMA = 7,\n}\n\nexport const TemplateInputSchema = S.mutable(\n S.Struct({\n name: S.String,\n type: S.optional(S.Enums(TemplateInputType)),\n value: S.optional(S.String),\n }),\n);\n\nexport type TemplateInput = S.Schema.Type<typeof TemplateInputSchema>;\n\nexport const TemplateKinds = ['always', 'schema-matching', 'automatically', 'manual'] as const;\nexport type TemplateKind = (typeof TemplateKinds)[number];\n\nexport const TemplateKindSchema = S.Union(\n S.Struct({\n include: S.Literal('always'),\n }),\n S.Struct({\n include: S.Literal('schema-matching'),\n typename: S.String,\n }),\n S.Struct({\n include: S.Literal('automatically'),\n description: S.String,\n }),\n S.Struct({\n include: S.Literal('manual'),\n }),\n);\n\nexport type TemplateKindType = S.Schema.Type<typeof TemplateKindSchema>;\nexport class TemplateType extends TypedObject({ typename: 'dxos.org/type/Template', version: '0.1.0' })({\n name: S.optional(S.String),\n kind: S.mutable(TemplateKindSchema),\n source: S.String,\n inputs: S.optional(S.mutable(S.Array(TemplateInputSchema))),\n command: S.optional(S.String),\n}) {}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { S } from '@dxos/echo-schema';\n\nimport { AIChatType } from './chat';\nimport { TemplateType } from './template';\nimport { ASSISTANT_PLUGIN } from '../meta';\n\nexport namespace AssistantAction {\n const ASSISTANT_ACTION = `${ASSISTANT_PLUGIN}/action`;\n\n export class CreateChat extends S.TaggedClass<CreateChat>()(`${ASSISTANT_ACTION}/create-chat`, {\n input: S.Struct({\n spaceId: S.optional(S.String),\n name: S.optional(S.String),\n }),\n output: S.Struct({\n object: AIChatType,\n }),\n }) {}\n\n export class CreateTemplate extends S.TaggedClass<CreateTemplate>()(`${ASSISTANT_ACTION}/create-template`, {\n input: S.Struct({\n name: S.optional(S.String),\n }),\n output: S.Struct({\n object: TemplateType,\n }),\n }) {}\n}\n\nexport const AssistantSettingsSchema = S.mutable(\n S.Struct({\n llmProvider: S.optional(S.Literal('edge', 'ollama')),\n edgeModel: S.optional(S.String),\n ollamaModel: S.optional(S.String),\n customPrompts: S.optional(S.Boolean),\n }),\n);\n\nexport type AssistantSettingsProps = S.Schema.Type<typeof AssistantSettingsSchema>;\n"],
5
- "mappings": "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",
6
- "names": ["Expando", "Ref", "S", "TypedObject", "AIChatType", "TypedObject", "typename", "version", "name", "S", "optional", "String", "queue", "Ref", "Expando", "ComputeGraph", "Ref", "S", "TypedObject", "FunctionType", "ApiAuthorizationKey", "S", "Struct", "type", "Literal", "key", "String", "placement", "Union", "name", "ApiAuthorizationOauth", "clientId", "clientSecret", "tokenUrl", "grantType", "ApiAuthorization", "ServiceInterfaceFunction", "kind", "fn", "Ref", "FunctionType", "ServiceInterfaceWorkflow", "workflow", "ComputeGraph", "ServiceInterfaceApi", "schemaUrl", "optional", "schema", "Any", "authorization", "ServiceInterface", "ServiceType", "TypedObject", "typename", "version", "serviceId", "description", "category", "enabled", "Boolean", "interfaces", "Array", "categoryIcons", "finance", "health", "geolocation", "education", "entertainment", "shopping", "travel", "utilities", "weather", "S", "TypedObject", "TemplateInputType", "TemplateInputSchema", "S", "mutable", "Struct", "name", "String", "type", "optional", "Enums", "value", "TemplateKinds", "TemplateKindSchema", "Union", "include", "Literal", "typename", "description", "TemplateType", "TypedObject", "version", "kind", "source", "inputs", "Array", "command", "S", "AssistantAction", "ASSISTANT_ACTION", "ASSISTANT_PLUGIN", "CreateChat", "S", "TaggedClass", "input", "Struct", "spaceId", "optional", "String", "name", "output", "object", "AIChatType", "CreateTemplate", "TemplateType", "AssistantSettingsSchema", "mutable", "llmProvider", "Literal", "edgeModel", "ollamaModel", "customPrompts", "Boolean"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/capabilities/react-surface.tsx"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { Capabilities, contributes, createSurface } from '@dxos/app-framework';\nimport { isInstanceOf } from '@dxos/echo-schema';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { getSpace, isSpace } from '@dxos/react-client/echo';\n\nimport { AssistantDialog, AssistantSettings, ChatContainer, ServiceRegistry, TemplateContainer } from '../components';\nimport { ASSISTANT_PLUGIN, ASSISTANT_DIALOG } from '../meta';\nimport { AIChatType, type AssistantSettingsProps, TemplateType } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${ASSISTANT_PLUGIN}/settings`,\n role: 'article',\n filter: (data): data is { subject: SettingsStore<AssistantSettingsProps> } =>\n data.subject instanceof SettingsStore && data.subject.prefix === ASSISTANT_PLUGIN,\n component: ({ data: { subject } }) => <AssistantSettings settings={subject.value} />,\n }),\n createSurface({\n id: ASSISTANT_DIALOG,\n role: 'dialog',\n filter: (data): data is { props: { chat: AIChatType } } => data.component === ASSISTANT_DIALOG,\n component: ({ data }) => <AssistantDialog {...data.props} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/chat`,\n role: 'article',\n filter: (data): data is { subject: AIChatType } => isInstanceOf(AIChatType, data.subject),\n component: ({ data, role }) => <ChatContainer role={role} chat={data.subject} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/template`,\n role: 'article',\n filter: (data): data is { subject: TemplateType } => isInstanceOf(TemplateType, data.subject),\n component: ({ data, role }) => <TemplateContainer role={role} template={data.subject} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/service-registry`,\n role: 'complementary--service-registry',\n component: ({ data }) => (\n <ServiceRegistry space={isSpace(data.subject) ? data.subject : getSpace(data.subject)!} />\n ),\n }),\n ]);\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,cAAcC,aAAaC,qBAAqB;AACzD,SAASC,oBAAoB;AAC7B,SAASC,qBAAqB;AAC9B,SAASC,UAAUC,eAAe;AAMlC,IAAA,wBAAe,MACbC,YAAYC,aAAaC,cAAc;EACrCC,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SACPA,KAAKC,mBAAmBC,iBAAiBF,KAAKC,QAAQE,WAAWN;IACnEO,WAAW,CAAC,EAAEJ,MAAM,EAAEC,QAAO,EAAE,MAAO,sBAAA,cAACI,mBAAAA;MAAkBC,UAAUL,QAAQM;;EAC7E,CAAA;EACAZ,cAAc;IACZC,IAAIY;IACJV,MAAM;IACNC,QAAQ,CAACC,SAAkDA,KAAKI,cAAcI;IAC9EJ,WAAW,CAAC,EAAEJ,KAAI,MAAO,sBAAA,cAACS,iBAAoBT,KAAKU,KAAK;EAC1D,CAAA;EACAf,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA0CW,aAAaC,YAAYZ,KAAKC,OAAO;IACxFG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACe,eAAAA;MAAcf;MAAYgB,MAAMd,KAAKC;;EACvE,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNC,QAAQ,CAACC,SAA4CW,aAAaI,cAAcf,KAAKC,OAAO;IAC5FG,WAAW,CAAC,EAAEJ,MAAMF,KAAI,MAAO,sBAAA,cAACkB,mBAAAA;MAAkBlB;MAAYmB,UAAUjB,KAAKC;;EAC/E,CAAA;EACAN,cAAc;IACZC,IAAI,GAAGC,gBAAAA;IACPC,MAAM;IACNM,WAAW,CAAC,EAAEJ,KAAI,MAChB,sBAAA,cAACkB,iBAAAA;MAAgBC,OAAOC,QAAQpB,KAAKC,OAAO,IAAID,KAAKC,UAAUoB,SAASrB,KAAKC,OAAO;;EAExF,CAAA;CACD;",
6
- "names": ["React", "Capabilities", "contributes", "createSurface", "isInstanceOf", "SettingsStore", "getSpace", "isSpace", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "ASSISTANT_PLUGIN", "role", "filter", "data", "subject", "SettingsStore", "prefix", "component", "AssistantSettings", "settings", "value", "ASSISTANT_DIALOG", "AssistantDialog", "props", "isInstanceOf", "AIChatType", "ChatContainer", "chat", "TemplateType", "TemplateContainer", "template", "ServiceRegistry", "space", "isSpace", "getSpace"]
7
- }