@dxos/plugin-assistant 0.8.1-staging.5be625a → 0.8.1-staging.9eaf14f
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.
- package/dist/lib/browser/{AssistantDialog-EIUUSXDS.mjs → AssistantDialog-YSHMAHW5.mjs} +9 -9
- package/dist/lib/browser/AssistantDialog-YSHMAHW5.mjs.map +7 -0
- package/dist/lib/browser/{ChatContainer-NHHA6CSP.mjs → ChatContainer-V5GP7DYF.mjs} +11 -11
- package/dist/lib/browser/ChatContainer-V5GP7DYF.mjs.map +7 -0
- package/dist/lib/browser/{TemplateContainer-7IQ6V5AD.mjs → TemplateContainer-K4EJNGIL.mjs} +7 -7
- package/dist/lib/browser/{TemplateContainer-7IQ6V5AD.mjs.map → TemplateContainer-K4EJNGIL.mjs.map} +2 -2
- package/dist/lib/browser/{ai-client-BAPVMSNX.mjs → ai-client-CDZLSNXE.mjs} +4 -4
- package/dist/lib/browser/{app-graph-builder-DTCUWBKB.mjs → app-graph-builder-MF5EVDWW.mjs} +63 -8
- package/dist/lib/browser/app-graph-builder-MF5EVDWW.mjs.map +7 -0
- package/dist/lib/browser/{chunk-AF7VQAKS.mjs → chunk-3HCI5FIL.mjs} +2 -2
- package/dist/lib/browser/{chunk-KGIACFAX.mjs → chunk-FMB7RGMP.mjs} +69 -65
- package/dist/lib/browser/{chunk-KGIACFAX.mjs.map → chunk-FMB7RGMP.mjs.map} +3 -3
- package/dist/lib/browser/chunk-IAMR2FAE.mjs +183 -0
- package/dist/lib/browser/chunk-IAMR2FAE.mjs.map +7 -0
- package/dist/lib/browser/{chunk-25APJ3ZK.mjs → chunk-KYMKVE6M.mjs} +10 -10
- package/dist/lib/browser/{chunk-6FTPLBSC.mjs → chunk-NFUHCW2J.mjs} +3 -3
- package/dist/lib/browser/{chunk-SVUCJXGN.mjs → chunk-TXJWGWJ7.mjs} +3 -3
- package/dist/lib/browser/index.mjs +18 -32
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-U57FXP3I.mjs → intent-resolver-WJGLKKVO.mjs} +5 -6
- package/dist/lib/browser/{intent-resolver-U57FXP3I.mjs.map → intent-resolver-WJGLKKVO.mjs.map} +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-YNN5NYJW.mjs → react-surface-57VRDOQT.mjs} +34 -14
- package/dist/lib/browser/react-surface-57VRDOQT.mjs.map +7 -0
- package/dist/lib/browser/{settings-VAW6UWFL.mjs → settings-U6UFQX32.mjs} +4 -4
- package/dist/lib/browser/types/index.mjs +2 -2
- package/dist/lib/node/{AssistantDialog-GT7R7MKH.cjs → AssistantDialog-YI2BSGSX.cjs} +12 -12
- package/dist/lib/node/AssistantDialog-YI2BSGSX.cjs.map +7 -0
- package/dist/lib/node/{ChatContainer-JUZOEZZ7.cjs → ChatContainer-ZJ5JXF6A.cjs} +15 -15
- package/dist/lib/node/ChatContainer-ZJ5JXF6A.cjs.map +7 -0
- package/dist/lib/node/{TemplateContainer-VPAZRFQA.cjs → TemplateContainer-XWFYJB4T.cjs} +12 -12
- package/dist/lib/node/{TemplateContainer-VPAZRFQA.cjs.map → TemplateContainer-XWFYJB4T.cjs.map} +2 -2
- package/dist/lib/node/{ai-client-5ESLYXAV.cjs → ai-client-URCCYU6B.cjs} +8 -8
- package/dist/lib/node/{app-graph-builder-3P6WSON2.cjs → app-graph-builder-N5ZUUI2Z.cjs} +82 -27
- package/dist/lib/node/app-graph-builder-N5ZUUI2Z.cjs.map +7 -0
- package/dist/lib/node/{chunk-KLSNCP34.cjs → chunk-APRU3QWK.cjs} +7 -8
- package/dist/lib/node/chunk-APRU3QWK.cjs.map +7 -0
- package/dist/lib/node/{chunk-VRXFIS4X.cjs → chunk-GBUNQ257.cjs} +6 -6
- package/dist/lib/node/{chunk-U6J2GO7I.cjs → chunk-Q5XWEMHB.cjs} +4 -4
- package/dist/lib/node/{chunk-JAB6KLPP.cjs → chunk-RPBKMP2E.cjs} +50 -46
- package/dist/lib/node/{chunk-JAB6KLPP.cjs.map → chunk-RPBKMP2E.cjs.map} +3 -3
- package/dist/lib/node/{chunk-N3SW6DJ6.cjs → chunk-XI2ARIEO.cjs} +6 -6
- package/dist/lib/node/{chunk-G2HY3UJ4.cjs → chunk-ZKOC4ZFY.cjs} +14 -14
- package/dist/lib/node/index.cjs +62 -76
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-YIFAMM3B.cjs → intent-resolver-R3OSTIMH.cjs} +11 -12
- package/dist/lib/node/intent-resolver-R3OSTIMH.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-IDGIN55C.cjs → react-surface-NUQTM6MS.cjs} +46 -26
- package/dist/lib/node/react-surface-NUQTM6MS.cjs.map +7 -0
- package/dist/lib/node/{settings-2FEYGLYU.cjs → settings-TXGRCYAL.cjs} +8 -8
- package/dist/lib/node/types/index.cjs +13 -13
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/lib/node-esm/{AssistantDialog-JMBFM6QH.mjs → AssistantDialog-U2FQX5TD.mjs} +9 -9
- package/dist/lib/node-esm/AssistantDialog-U2FQX5TD.mjs.map +7 -0
- package/dist/lib/node-esm/{ChatContainer-ZNN5CMVL.mjs → ChatContainer-QW3OOXTT.mjs} +11 -11
- package/dist/lib/node-esm/ChatContainer-QW3OOXTT.mjs.map +7 -0
- package/dist/lib/node-esm/{TemplateContainer-YLA6BJY6.mjs → TemplateContainer-EUM2X65J.mjs} +7 -7
- package/dist/lib/node-esm/{TemplateContainer-YLA6BJY6.mjs.map → TemplateContainer-EUM2X65J.mjs.map} +2 -2
- package/dist/lib/node-esm/{ai-client-XYZ5N7CR.mjs → ai-client-WMHS5EGV.mjs} +4 -4
- package/dist/lib/node-esm/{app-graph-builder-PMAQLTTN.mjs → app-graph-builder-DWBNIMHM.mjs} +63 -8
- package/dist/lib/node-esm/app-graph-builder-DWBNIMHM.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-2CIYX3SD.mjs → chunk-6JK5HEUQ.mjs} +3 -3
- package/dist/lib/node-esm/{chunk-N6BVC2C2.mjs → chunk-ECRK6TUQ.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-SMUINDXQ.mjs → chunk-GBBXIW5F.mjs} +10 -10
- package/dist/lib/node-esm/{chunk-PK5JCOYB.mjs → chunk-MVDAY3CZ.mjs} +69 -65
- package/dist/lib/node-esm/{chunk-PK5JCOYB.mjs.map → chunk-MVDAY3CZ.mjs.map} +3 -3
- package/dist/lib/node-esm/chunk-MXK2EANZ.mjs +184 -0
- package/dist/lib/node-esm/chunk-MXK2EANZ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-J63VQFQO.mjs → chunk-PBZA7XJR.mjs} +3 -3
- package/dist/lib/node-esm/index.mjs +18 -32
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-SQ4HLL5L.mjs → intent-resolver-H32TL4X6.mjs} +5 -6
- package/dist/lib/node-esm/{intent-resolver-SQ4HLL5L.mjs.map → intent-resolver-H32TL4X6.mjs.map} +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-424JZTZ4.mjs → react-surface-JBVZF6CP.mjs} +34 -14
- package/dist/lib/node-esm/react-surface-JBVZF6CP.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-VHR5KT4J.mjs → settings-DZU5PNXM.mjs} +4 -4
- package/dist/lib/node-esm/types/index.mjs +2 -2
- package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/AmbientDialog/AmbientDialog.stories.d.ts.map +1 -1
- package/dist/types/src/components/ChatContainer.d.ts +4 -2
- package/dist/types/src/components/ChatContainer.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts +3 -3
- package/dist/types/src/components/TemplateEditor/TemplateEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadContainer.d.ts +2 -0
- package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts +3 -3
- package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +3 -2
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatProcessor.d.ts +3 -1
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
- package/dist/types/src/hooks/useMessageQueue.d.ts +1 -1
- package/dist/types/src/translations.d.ts +3 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/chat.d.ts +4 -6
- package/dist/types/src/types/chat.d.ts.map +1 -1
- package/package.json +57 -55
- package/src/AssistantPlugin.tsx +8 -19
- package/src/capabilities/app-graph-builder.ts +53 -2
- package/src/capabilities/intent-resolver.ts +3 -2
- package/src/capabilities/react-surface.tsx +25 -8
- package/src/components/AmbientDialog/AmbientDialog.stories.tsx +3 -1
- package/src/components/AssistantDialog.tsx +1 -1
- package/src/components/ChatContainer.tsx +18 -4
- package/src/components/Prompt/PromptBar.tsx +2 -2
- package/src/components/TemplateContainer.tsx +1 -1
- package/src/components/TemplateEditor/TemplateEditor.stories.tsx +4 -4
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +2 -2
- package/src/components/Thread/Thread.stories.tsx +3 -3
- package/src/components/Thread/ThreadContainer.stories.tsx +4 -4
- package/src/components/Thread/ThreadContainer.tsx +4 -1
- package/src/components/Toolbox/Toolbox.stories.tsx +2 -2
- package/src/hooks/processor.ts +1 -1
- package/src/hooks/useChatProcessor.tsx +12 -4
- package/src/hooks/useMessageQueue.ts +2 -2
- package/src/translations.ts +1 -0
- package/src/types/chat.ts +2 -3
- package/dist/lib/browser/AssistantDialog-EIUUSXDS.mjs.map +0 -7
- package/dist/lib/browser/ChatContainer-NHHA6CSP.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-DTCUWBKB.mjs.map +0 -7
- package/dist/lib/browser/chunk-X6ALDUA5.mjs +0 -184
- package/dist/lib/browser/chunk-X6ALDUA5.mjs.map +0 -7
- package/dist/lib/browser/react-surface-YNN5NYJW.mjs.map +0 -7
- package/dist/lib/node/AssistantDialog-GT7R7MKH.cjs.map +0 -7
- package/dist/lib/node/ChatContainer-JUZOEZZ7.cjs.map +0 -7
- package/dist/lib/node/app-graph-builder-3P6WSON2.cjs.map +0 -7
- package/dist/lib/node/chunk-KLSNCP34.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-YIFAMM3B.cjs.map +0 -7
- package/dist/lib/node/react-surface-IDGIN55C.cjs.map +0 -7
- package/dist/lib/node-esm/AssistantDialog-JMBFM6QH.mjs.map +0 -7
- package/dist/lib/node-esm/ChatContainer-ZNN5CMVL.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-PMAQLTTN.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-NMMRHHAR.mjs +0 -185
- package/dist/lib/node-esm/chunk-NMMRHHAR.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-424JZTZ4.mjs.map +0 -7
- package/dist/types/src/hooks/email.d.ts +0 -4
- package/dist/types/src/hooks/email.d.ts.map +0 -1
- package/src/hooks/email.ts +0 -49
- /package/dist/lib/browser/{ai-client-BAPVMSNX.mjs.map → ai-client-CDZLSNXE.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-AF7VQAKS.mjs.map → chunk-3HCI5FIL.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-25APJ3ZK.mjs.map → chunk-KYMKVE6M.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-6FTPLBSC.mjs.map → chunk-NFUHCW2J.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-SVUCJXGN.mjs.map → chunk-TXJWGWJ7.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-VAW6UWFL.mjs.map → settings-U6UFQX32.mjs.map} +0 -0
- /package/dist/lib/node/{ai-client-5ESLYXAV.cjs.map → ai-client-URCCYU6B.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-VRXFIS4X.cjs.map → chunk-GBUNQ257.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-U6J2GO7I.cjs.map → chunk-Q5XWEMHB.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-N3SW6DJ6.cjs.map → chunk-XI2ARIEO.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-G2HY3UJ4.cjs.map → chunk-ZKOC4ZFY.cjs.map} +0 -0
- /package/dist/lib/node/{settings-2FEYGLYU.cjs.map → settings-TXGRCYAL.cjs.map} +0 -0
- /package/dist/lib/node-esm/{ai-client-XYZ5N7CR.mjs.map → ai-client-WMHS5EGV.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-2CIYX3SD.mjs.map → chunk-6JK5HEUQ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-N6BVC2C2.mjs.map → chunk-ECRK6TUQ.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-SMUINDXQ.mjs.map → chunk-GBBXIW5F.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-J63VQFQO.mjs.map → chunk-PBZA7XJR.mjs.map} +0 -0
- /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 = ({
|
|
17
|
-
|
|
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
|
|
22
|
-
<ThreadContainer
|
|
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
|
|
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
|
|
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
|
|
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
|
|
51
|
+
const meta: Meta<typeof DefaultStory> = {
|
|
52
52
|
title: 'plugins/plugin-automation/TemplateEditor',
|
|
53
53
|
component: TemplateEditor,
|
|
54
|
-
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
|
|
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
|
|
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:
|
|
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
|
|
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:
|
|
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 <
|
|
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
|
|
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
|
|
207
|
+
const meta: Meta<typeof DefaultStory> = {
|
|
208
208
|
title: 'plugins/plugin-automation/ThreadContainer',
|
|
209
|
-
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
|
|
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
|
|
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:
|
|
37
|
+
render: DefaultStory,
|
|
38
38
|
decorators: [
|
|
39
39
|
withSignals,
|
|
40
40
|
withPluginManager({
|
package/src/hooks/processor.ts
CHANGED
|
@@ -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 = ({
|
|
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?.
|
|
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?.
|
|
18
|
+
}, [space, chat?.assistantChatQueue.dxn]);
|
|
19
19
|
|
|
20
20
|
return useQueue<Message>(queueDxn);
|
|
21
21
|
};
|
package/src/translations.ts
CHANGED
package/src/types/chat.ts
CHANGED
|
@@ -2,10 +2,9 @@
|
|
|
2
2
|
// Copyright 2024 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Expando, Ref,
|
|
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
|
-
|
|
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
|
-
}
|