@dxos/plugin-assistant 0.8.1-main.303c73a → 0.8.1-main.81238a8
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-T5OJUIIV.mjs → AssistantDialog-L5RHNMU4.mjs} +6 -5
- package/dist/lib/browser/{AssistantDialog-T5OJUIIV.mjs.map → AssistantDialog-L5RHNMU4.mjs.map} +3 -3
- package/dist/lib/browser/{ChatContainer-FEZ323HB.mjs → ChatContainer-EEEVE62F.mjs} +5 -5
- package/dist/lib/browser/TemplateContainer-7IQ6V5AD.mjs +78 -0
- package/dist/lib/browser/TemplateContainer-7IQ6V5AD.mjs.map +7 -0
- package/dist/lib/browser/ai-client-BAPVMSNX.mjs +35 -0
- package/dist/lib/browser/ai-client-BAPVMSNX.mjs.map +7 -0
- package/dist/lib/browser/{app-graph-builder-AXAIFOGV.mjs → app-graph-builder-DTCUWBKB.mjs} +57 -13
- package/dist/lib/browser/app-graph-builder-DTCUWBKB.mjs.map +7 -0
- package/dist/lib/browser/{chunk-TCAE72QU.mjs → chunk-5RMJYOT7.mjs} +34 -12
- package/dist/lib/browser/chunk-5RMJYOT7.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EUMPBC4T.mjs → chunk-6FTPLBSC.mjs} +2 -2
- package/dist/lib/browser/{chunk-NV7SVHMV.mjs → chunk-AF7VQAKS.mjs} +1 -1
- package/dist/lib/browser/{chunk-NV7SVHMV.mjs.map → chunk-AF7VQAKS.mjs.map} +2 -2
- package/dist/lib/browser/{chunk-NTLTGYYS.mjs → chunk-SVUCJXGN.mjs} +2 -2
- package/dist/lib/browser/chunk-SVUCJXGN.mjs.map +7 -0
- package/dist/lib/browser/{chunk-FRIKXDDQ.mjs → chunk-X6ALDUA5.mjs} +26 -4
- package/dist/lib/browser/chunk-X6ALDUA5.mjs.map +7 -0
- package/dist/lib/browser/{chunk-SUUECBDM.mjs → chunk-XFUCWOMV.mjs} +261 -60
- package/dist/lib/browser/chunk-XFUCWOMV.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +21 -11
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-QRVRZL6K.mjs → intent-resolver-U57FXP3I.mjs} +6 -3
- package/dist/lib/browser/{intent-resolver-QRVRZL6K.mjs.map → intent-resolver-U57FXP3I.mjs.map} +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-B463WHMD.mjs → react-surface-KFLHNDNR.mjs} +10 -9
- package/dist/lib/browser/react-surface-KFLHNDNR.mjs.map +7 -0
- package/dist/lib/browser/{settings-JTT62IHD.mjs → settings-VAW6UWFL.mjs} +3 -3
- package/dist/lib/browser/types/index.mjs +6 -2
- package/dist/lib/node/{AssistantDialog-EZ5RBGPX.cjs → AssistantDialog-VIB7GPQN.cjs} +12 -11
- package/dist/lib/node/{AssistantDialog-EZ5RBGPX.cjs.map → AssistantDialog-VIB7GPQN.cjs.map} +3 -3
- package/dist/lib/node/{ChatContainer-FNYVBPZZ.cjs → ChatContainer-BPI3GEZS.cjs} +10 -10
- package/dist/lib/node/TemplateContainer-VPAZRFQA.cjs +104 -0
- package/dist/lib/node/TemplateContainer-VPAZRFQA.cjs.map +7 -0
- package/dist/lib/node/{ai-client-RBDOGK6W.cjs → ai-client-5ESLYXAV.cjs} +19 -19
- package/dist/lib/node/ai-client-5ESLYXAV.cjs.map +7 -0
- package/dist/lib/node/{app-graph-builder-D7SHQTZS.cjs → app-graph-builder-3P6WSON2.cjs} +63 -20
- package/dist/lib/node/app-graph-builder-3P6WSON2.cjs.map +7 -0
- package/dist/lib/node/{chunk-37GI4NYH.cjs → chunk-KLSNCP34.cjs} +33 -9
- package/dist/lib/node/chunk-KLSNCP34.cjs.map +7 -0
- package/dist/lib/node/{chunk-NV4TQQSU.cjs → chunk-N3SW6DJ6.cjs} +6 -6
- package/dist/lib/node/{chunk-RWY7LVFJ.cjs → chunk-OJJ4F6KP.cjs} +266 -69
- package/dist/lib/node/chunk-OJJ4F6KP.cjs.map +7 -0
- package/dist/lib/node/{chunk-GNPXCHFT.cjs → chunk-U6J2GO7I.cjs} +4 -4
- package/dist/lib/node/{chunk-GNPXCHFT.cjs.map → chunk-U6J2GO7I.cjs.map} +2 -2
- package/dist/lib/node/{chunk-3WXG6WA6.cjs → chunk-VRXFIS4X.cjs} +6 -6
- package/dist/lib/node/chunk-VRXFIS4X.cjs.map +7 -0
- package/dist/lib/node/{chunk-PMA7XUWM.cjs → chunk-WFVOWPKV.cjs} +40 -18
- package/dist/lib/node/chunk-WFVOWPKV.cjs.map +7 -0
- package/dist/lib/node/index.cjs +73 -63
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-YMMAFVOB.cjs → intent-resolver-YIFAMM3B.cjs} +13 -10
- package/dist/lib/node/{intent-resolver-YMMAFVOB.cjs.map → intent-resolver-YIFAMM3B.cjs.map} +3 -3
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-RTYCL4GP.cjs → react-surface-REI6G6B3.cjs} +25 -24
- package/dist/lib/node/react-surface-REI6G6B3.cjs.map +7 -0
- package/dist/lib/node/{settings-4YEO7KXF.cjs → settings-2FEYGLYU.cjs} +8 -8
- package/dist/lib/node/types/index.cjs +15 -11
- package/dist/lib/node/types/index.cjs.map +2 -2
- package/dist/lib/node-esm/{AssistantDialog-57ZCJNSL.mjs → AssistantDialog-R3EPF2KL.mjs} +6 -5
- package/dist/lib/node-esm/{AssistantDialog-57ZCJNSL.mjs.map → AssistantDialog-R3EPF2KL.mjs.map} +3 -3
- package/dist/lib/node-esm/{ChatContainer-XYNXFPFT.mjs → ChatContainer-UJ7MV7GU.mjs} +5 -5
- package/dist/lib/node-esm/TemplateContainer-YLA6BJY6.mjs +79 -0
- package/dist/lib/node-esm/TemplateContainer-YLA6BJY6.mjs.map +7 -0
- package/dist/lib/node-esm/ai-client-XYZ5N7CR.mjs +36 -0
- package/dist/lib/node-esm/ai-client-XYZ5N7CR.mjs.map +7 -0
- package/dist/lib/node-esm/{app-graph-builder-H2GC2AZA.mjs → app-graph-builder-PMAQLTTN.mjs} +57 -13
- package/dist/lib/node-esm/app-graph-builder-PMAQLTTN.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-ICQN3TDS.mjs → chunk-2CIYX3SD.mjs} +2 -2
- package/dist/lib/node-esm/chunk-2CIYX3SD.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-YVEPFSWR.mjs → chunk-6GBMQIW7.mjs} +34 -12
- package/dist/lib/node-esm/chunk-6GBMQIW7.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-3HFSWIA5.mjs → chunk-AMTHOYNB.mjs} +261 -60
- package/dist/lib/node-esm/chunk-AMTHOYNB.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-LBQGJE5T.mjs → chunk-J63VQFQO.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-7SV6X6XU.mjs → chunk-N6BVC2C2.mjs} +1 -1
- package/dist/lib/node-esm/{chunk-7SV6X6XU.mjs.map → chunk-N6BVC2C2.mjs.map} +2 -2
- package/dist/lib/node-esm/{chunk-CJ4Y3QW5.mjs → chunk-NMMRHHAR.mjs} +26 -4
- package/dist/lib/node-esm/chunk-NMMRHHAR.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +21 -11
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-MR7BOKEW.mjs → intent-resolver-SQ4HLL5L.mjs} +6 -3
- package/dist/lib/node-esm/{intent-resolver-MR7BOKEW.mjs.map → intent-resolver-SQ4HLL5L.mjs.map} +3 -3
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-Y4RK56TT.mjs → react-surface-LE57AGPI.mjs} +10 -9
- package/dist/lib/node-esm/react-surface-LE57AGPI.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-S7P5RWQI.mjs → settings-VHR5KT4J.mjs} +3 -3
- package/dist/lib/node-esm/types/index.mjs +6 -2
- package/dist/types/src/AssistantPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/ai-client.d.ts +2 -1
- package/dist/types/src/capabilities/ai-client.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/capabilities.d.ts +2 -1
- package/dist/types/src/capabilities/capabilities.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +1 -1
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/AssistantDialog.d.ts.map +1 -1
- package/dist/types/src/components/AssistantSettings/AssistantSettings.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/Prompt.d.ts +3 -0
- package/dist/types/src/components/Prompt/Prompt.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/Prompt.stories.d.ts +1 -0
- package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/PromptBar.d.ts +2 -2
- package/dist/types/src/components/Prompt/PromptBar.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/references.d.ts +30 -0
- package/dist/types/src/components/Prompt/references.d.ts.map +1 -0
- package/dist/types/src/components/TemplateContainer.d.ts.map +1 -1
- package/dist/types/src/components/Thread/Thread.d.ts +11 -1
- package/dist/types/src/components/Thread/Thread.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadContainer.d.ts +1 -0
- package/dist/types/src/components/Thread/ThreadContainer.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadContainer.stories.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.d.ts +1 -1
- package/dist/types/src/components/Toolbox/Toolbox.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/index.d.ts +1 -0
- package/dist/types/src/hooks/index.d.ts.map +1 -1
- package/dist/types/src/hooks/invocation-handler.d.ts +1 -1
- package/dist/types/src/hooks/invocation-handler.d.ts.map +1 -1
- package/dist/types/src/hooks/processor.d.ts +2 -2
- package/dist/types/src/hooks/processor.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatProcessor.d.ts +9 -2
- package/dist/types/src/hooks/useChatProcessor.d.ts.map +1 -1
- package/dist/types/src/hooks/useContextProvider.d.ts +17 -0
- package/dist/types/src/hooks/useContextProvider.d.ts.map +1 -0
- package/dist/types/src/hooks/useMessageQueue.d.ts +4 -4
- package/dist/types/src/hooks/useMessageQueue.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +2 -8
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/testing/test-functions.d.ts.map +1 -1
- package/dist/types/src/tools/function.d.ts +1 -1
- package/dist/types/src/tools/function.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +21 -6
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/service.d.ts +1 -1
- package/dist/types/src/types/service.d.ts.map +1 -1
- package/dist/types/src/types/template.d.ts +36 -0
- package/dist/types/src/types/template.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +3 -1
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/package.json +56 -55
- package/src/AssistantPlugin.tsx +11 -2
- package/src/capabilities/ai-client.ts +23 -7
- package/src/capabilities/app-graph-builder.ts +48 -4
- package/src/capabilities/capabilities.ts +3 -1
- package/src/capabilities/intent-resolver.ts +1 -1
- package/src/capabilities/react-surface.tsx +3 -2
- package/src/components/AssistantDialog.tsx +7 -1
- package/src/components/AssistantSettings/AssistantSettings.tsx +39 -5
- package/src/components/Prompt/Prompt.stories.tsx +34 -0
- package/src/components/Prompt/Prompt.tsx +9 -2
- package/src/components/Prompt/PromptBar.tsx +3 -1
- package/src/components/Prompt/references.ts +180 -0
- package/src/components/TemplateContainer.tsx +79 -4
- package/src/components/TemplateEditor/TemplateEditor.stories.tsx +1 -1
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +1 -1
- package/src/components/Thread/Thread.tsx +21 -0
- package/src/components/Thread/ThreadContainer.stories.tsx +3 -6
- package/src/components/Thread/ThreadContainer.tsx +7 -4
- package/src/components/Thread/ThreadMessage.tsx +17 -9
- package/src/components/Toolbox/Toolbox.tsx +1 -1
- package/src/components/index.ts +3 -0
- package/src/hooks/index.ts +1 -0
- package/src/hooks/invocation-handler.ts +3 -5
- package/src/hooks/processor.ts +5 -5
- package/src/hooks/useChatProcessor.tsx +24 -15
- package/src/hooks/useContextProvider.ts +55 -0
- package/src/hooks/useLocalTriggerManager.ts +1 -1
- package/src/hooks/useMessageQueue.ts +2 -4
- package/src/meta.ts +2 -2
- package/src/testing/test-functions.ts +2 -2
- package/src/tools/function.ts +2 -2
- package/src/translations.ts +8 -3
- package/src/types/service.ts +1 -1
- package/src/types/template.ts +22 -0
- package/src/types/types.ts +3 -1
- package/dist/lib/browser/TemplateContainer-B7MQNUPY.mjs +0 -23
- package/dist/lib/browser/TemplateContainer-B7MQNUPY.mjs.map +0 -7
- package/dist/lib/browser/ai-client-PORKRZXM.mjs +0 -33
- package/dist/lib/browser/ai-client-PORKRZXM.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-AXAIFOGV.mjs.map +0 -7
- package/dist/lib/browser/chunk-FRIKXDDQ.mjs.map +0 -7
- package/dist/lib/browser/chunk-NTLTGYYS.mjs.map +0 -7
- package/dist/lib/browser/chunk-SUUECBDM.mjs.map +0 -7
- package/dist/lib/browser/chunk-TCAE72QU.mjs.map +0 -7
- package/dist/lib/browser/react-surface-B463WHMD.mjs.map +0 -7
- package/dist/lib/node/TemplateContainer-R4BZZP3E.cjs +0 -53
- package/dist/lib/node/TemplateContainer-R4BZZP3E.cjs.map +0 -7
- package/dist/lib/node/ai-client-RBDOGK6W.cjs.map +0 -7
- package/dist/lib/node/app-graph-builder-D7SHQTZS.cjs.map +0 -7
- package/dist/lib/node/chunk-37GI4NYH.cjs.map +0 -7
- package/dist/lib/node/chunk-3WXG6WA6.cjs.map +0 -7
- package/dist/lib/node/chunk-PMA7XUWM.cjs.map +0 -7
- package/dist/lib/node/chunk-RWY7LVFJ.cjs.map +0 -7
- package/dist/lib/node/react-surface-RTYCL4GP.cjs.map +0 -7
- package/dist/lib/node-esm/TemplateContainer-WSHTZBB5.mjs +0 -24
- package/dist/lib/node-esm/TemplateContainer-WSHTZBB5.mjs.map +0 -7
- package/dist/lib/node-esm/ai-client-OTZVBDUH.mjs +0 -34
- package/dist/lib/node-esm/ai-client-OTZVBDUH.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-H2GC2AZA.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-3HFSWIA5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-CJ4Y3QW5.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-ICQN3TDS.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-YVEPFSWR.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-Y4RK56TT.mjs.map +0 -7
- /package/dist/lib/browser/{ChatContainer-FEZ323HB.mjs.map → ChatContainer-EEEVE62F.mjs.map} +0 -0
- /package/dist/lib/browser/{chunk-EUMPBC4T.mjs.map → chunk-6FTPLBSC.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-JTT62IHD.mjs.map → settings-VAW6UWFL.mjs.map} +0 -0
- /package/dist/lib/node/{ChatContainer-FNYVBPZZ.cjs.map → ChatContainer-BPI3GEZS.cjs.map} +0 -0
- /package/dist/lib/node/{chunk-NV4TQQSU.cjs.map → chunk-N3SW6DJ6.cjs.map} +0 -0
- /package/dist/lib/node/{settings-4YEO7KXF.cjs.map → settings-2FEYGLYU.cjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-XYNXFPFT.mjs.map → ChatContainer-UJ7MV7GU.mjs.map} +0 -0
- /package/dist/lib/node-esm/{chunk-LBQGJE5T.mjs.map → chunk-J63VQFQO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-S7P5RWQI.mjs.map → settings-VHR5KT4J.mjs.map} +0 -0
package/src/hooks/processor.ts
CHANGED
|
@@ -12,7 +12,7 @@ import {
|
|
|
12
12
|
type GenerateRequest,
|
|
13
13
|
type GenerationStream,
|
|
14
14
|
MixedStreamParser,
|
|
15
|
-
|
|
15
|
+
DEFAULT_EDGE_MODEL,
|
|
16
16
|
type AIServiceClient,
|
|
17
17
|
} from '@dxos/assistant';
|
|
18
18
|
import { createStatic } from '@dxos/echo-schema';
|
|
@@ -36,7 +36,7 @@ type RequestOptions = {
|
|
|
36
36
|
export type ChatProcessorOptions = Pick<GenerateRequest, 'model' | 'systemPrompt'>;
|
|
37
37
|
|
|
38
38
|
const defaultOptions: ChatProcessorOptions = {
|
|
39
|
-
model:
|
|
39
|
+
model: DEFAULT_EDGE_MODEL,
|
|
40
40
|
systemPrompt: 'you are a helpful assistant',
|
|
41
41
|
};
|
|
42
42
|
|
|
@@ -50,15 +50,15 @@ export class ChatProcessor {
|
|
|
50
50
|
/** SSE stream parser. */
|
|
51
51
|
private readonly _parser = new MixedStreamParser();
|
|
52
52
|
|
|
53
|
-
/** Current streaming response. */
|
|
54
|
-
private _stream: GenerationStream | undefined;
|
|
55
|
-
|
|
56
53
|
/** Pending messages (incl. the current user request). */
|
|
57
54
|
private readonly _pending: Signal<Message[]> = signal([]);
|
|
58
55
|
|
|
59
56
|
/** Current streaming block (from the AI service). */
|
|
60
57
|
private readonly _block: Signal<MessageContentBlock | undefined> = signal(undefined);
|
|
61
58
|
|
|
59
|
+
/** Current streaming response. */
|
|
60
|
+
private _stream: GenerationStream | undefined;
|
|
61
|
+
|
|
62
62
|
/** Prior history from queue. */
|
|
63
63
|
private _history: Message[] = [];
|
|
64
64
|
|
|
@@ -6,22 +6,29 @@ import { useEffect, useMemo, useState } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { Capabilities, useCapabilities, useCapability, useIntentDispatcher } from '@dxos/app-framework';
|
|
8
8
|
import { createSystemPrompt, type Tool } from '@dxos/artifact';
|
|
9
|
-
import {
|
|
10
|
-
import { FunctionType } from '@dxos/functions';
|
|
9
|
+
import { DEFAULT_EDGE_MODEL, DEFAULT_OLLAMA_MODEL } from '@dxos/assistant';
|
|
10
|
+
import { FunctionType } from '@dxos/functions/types';
|
|
11
11
|
import { log } from '@dxos/log';
|
|
12
12
|
import { useConfig } from '@dxos/react-client';
|
|
13
|
-
import { Filter, type Space, useQuery } from '@dxos/react-client/echo';
|
|
13
|
+
import { Filter, fullyQualifiedId, type Space, useQuery } from '@dxos/react-client/echo';
|
|
14
14
|
import { isNonNullable } from '@dxos/util';
|
|
15
15
|
|
|
16
16
|
import { AssistantCapabilities } from '../capabilities';
|
|
17
17
|
import { ChatProcessor } from '../hooks';
|
|
18
18
|
import { covertFunctionToTool, createToolsFromService } from '../tools';
|
|
19
|
-
import { type AssistantSettingsProps, ServiceType } from '../types';
|
|
19
|
+
import { type AIChatType, type AssistantSettingsProps, ServiceType } from '../types';
|
|
20
|
+
|
|
21
|
+
type UseChatProcessorProps = {
|
|
22
|
+
chat?: AIChatType;
|
|
23
|
+
space?: Space;
|
|
24
|
+
settings?: AssistantSettingsProps;
|
|
25
|
+
part?: 'deck' | 'dialog';
|
|
26
|
+
};
|
|
20
27
|
|
|
21
28
|
/**
|
|
22
29
|
* Configure and create ChatProcessor.
|
|
23
30
|
*/
|
|
24
|
-
export const useChatProcessor = (
|
|
31
|
+
export const useChatProcessor = ({ chat, space, settings, part = 'deck' }: UseChatProcessorProps): ChatProcessor => {
|
|
25
32
|
const aiClient = useCapability(AssistantCapabilities.AiClient);
|
|
26
33
|
const globalTools = useCapabilities(Capabilities.Tools);
|
|
27
34
|
const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
|
|
@@ -41,6 +48,7 @@ export const useChatProcessor = (space?: Space, settings?: AssistantSettingsProp
|
|
|
41
48
|
// Tools and context.
|
|
42
49
|
const config = useConfig();
|
|
43
50
|
const functions = useQuery(space, Filter.schema(FunctionType));
|
|
51
|
+
const chatId = useMemo(() => (chat ? fullyQualifiedId(chat) : undefined), [chat]);
|
|
44
52
|
const [tools, extensions] = useMemo(() => {
|
|
45
53
|
log('creating tools...');
|
|
46
54
|
const tools = [
|
|
@@ -51,9 +59,9 @@ export const useChatProcessor = (space?: Space, settings?: AssistantSettingsProp
|
|
|
51
59
|
.map((fn) => covertFunctionToTool(fn, config.values.runtime?.services?.edge?.url ?? '', space?.id))
|
|
52
60
|
.filter(isNonNullable),
|
|
53
61
|
];
|
|
54
|
-
const extensions = { space, dispatch };
|
|
62
|
+
const extensions = { space, dispatch, pivotId: chatId, part };
|
|
55
63
|
return [tools, extensions];
|
|
56
|
-
}, [dispatch, globalTools, artifactDefinitions, space, serviceTools, functions]);
|
|
64
|
+
}, [dispatch, globalTools, artifactDefinitions, space, chatId, serviceTools, functions]);
|
|
57
65
|
|
|
58
66
|
// Prompt.
|
|
59
67
|
const systemPrompt = useMemo(
|
|
@@ -64,17 +72,18 @@ export const useChatProcessor = (space?: Space, settings?: AssistantSettingsProp
|
|
|
64
72
|
[artifactDefinitions],
|
|
65
73
|
);
|
|
66
74
|
|
|
75
|
+
// TODO(burdon): Remove default (let backend decide if not specified).
|
|
76
|
+
const model =
|
|
77
|
+
settings?.llmProvider === 'ollama'
|
|
78
|
+
? settings?.ollamaModel ?? DEFAULT_OLLAMA_MODEL
|
|
79
|
+
: settings?.edgeModel ?? DEFAULT_EDGE_MODEL;
|
|
80
|
+
|
|
67
81
|
// Create processor.
|
|
68
|
-
// TODO(burdon): Updated on each query update above
|
|
82
|
+
// TODO(burdon): Updated on each query update above; should just update current processor.
|
|
69
83
|
const processor = useMemo(() => {
|
|
70
84
|
log('creating processor...', { settings });
|
|
71
|
-
return new ChatProcessor(aiClient, tools, extensions, {
|
|
72
|
-
|
|
73
|
-
model: settings?.llmModel ?? DEFAULT_LLM_MODEL,
|
|
74
|
-
// TOOD(burdon): Query.
|
|
75
|
-
systemPrompt,
|
|
76
|
-
});
|
|
77
|
-
}, [aiClient, tools, extensions, systemPrompt, settings?.llmModel]);
|
|
85
|
+
return new ChatProcessor(aiClient.value, tools, extensions, { model, systemPrompt });
|
|
86
|
+
}, [aiClient.value, tools, extensions, model, systemPrompt]);
|
|
78
87
|
|
|
79
88
|
return processor;
|
|
80
89
|
};
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
import { useMemo } from 'react';
|
|
6
|
+
|
|
7
|
+
import { Capabilities, useCapabilities } from '@dxos/app-framework';
|
|
8
|
+
import type { Space } from '@dxos/client/echo';
|
|
9
|
+
import { getDXN, getLabel, getSchema } from '@dxos/echo-schema';
|
|
10
|
+
import { log } from '@dxos/log';
|
|
11
|
+
import { Filter } from '@dxos/react-client/echo';
|
|
12
|
+
|
|
13
|
+
export type ContextProvider = {
|
|
14
|
+
query: (params: { query: string }) => Promise<Array<{ uri: string; label: string }>>;
|
|
15
|
+
resolveMetadata: (params: { uri: string }) => Promise<{ uri: string; label: string }>;
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const stringMatch = (query: string, label: string) => label.toLowerCase().startsWith(query.toLowerCase());
|
|
19
|
+
|
|
20
|
+
export const useContextProvider = (space?: Space): ContextProvider | undefined => {
|
|
21
|
+
const artifactDefinitions = useCapabilities(Capabilities.ArtifactDefinition);
|
|
22
|
+
|
|
23
|
+
return useMemo<ContextProvider | undefined>((): ContextProvider | undefined => {
|
|
24
|
+
if (!space) {
|
|
25
|
+
return undefined;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return {
|
|
29
|
+
query: async ({ query }) => {
|
|
30
|
+
const artifactSchemas = artifactDefinitions.map((artifact) => artifact.schema);
|
|
31
|
+
const { objects } = await space.db
|
|
32
|
+
.query(Filter.or(...artifactSchemas.map((schema) => Filter.schema(schema))))
|
|
33
|
+
.run();
|
|
34
|
+
return objects
|
|
35
|
+
.map((object) => {
|
|
36
|
+
log.info('object', { object, label: getLabel(getSchema(object)!, object) });
|
|
37
|
+
return object;
|
|
38
|
+
})
|
|
39
|
+
.filter((object) => stringMatch(query, getLabel(getSchema(object)!, object) ?? ''))
|
|
40
|
+
.filter((object) => !!getDXN(object))
|
|
41
|
+
.map((object) => ({
|
|
42
|
+
uri: getDXN(object)!.toString(),
|
|
43
|
+
label: getLabel(getSchema(object)!, object) ?? '',
|
|
44
|
+
}));
|
|
45
|
+
},
|
|
46
|
+
resolveMetadata: async ({ uri }) => {
|
|
47
|
+
const object = await space.db.query({ id: uri }).first();
|
|
48
|
+
return {
|
|
49
|
+
uri,
|
|
50
|
+
label: getLabel(getSchema(object)!, object) ?? '',
|
|
51
|
+
};
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}, [space, artifactDefinitions]);
|
|
55
|
+
};
|
|
@@ -7,7 +7,7 @@ import { useEffect, useState } from 'react';
|
|
|
7
7
|
import { Mutex } from '@dxos/async';
|
|
8
8
|
import { Context } from '@dxos/context';
|
|
9
9
|
import { createSubscriptionTrigger, type TriggerFactory } from '@dxos/functions';
|
|
10
|
-
import { FunctionTrigger } from '@dxos/functions';
|
|
10
|
+
import { FunctionTrigger } from '@dxos/functions/types';
|
|
11
11
|
import { invariant } from '@dxos/invariant';
|
|
12
12
|
import { log } from '@dxos/log';
|
|
13
13
|
import { useClient } from '@dxos/react-client';
|
|
@@ -6,8 +6,7 @@ import { useMemo } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { type Message } from '@dxos/artifact';
|
|
8
8
|
import { DXN, QueueSubspaceTags } from '@dxos/keys';
|
|
9
|
-
import { getSpace } from '@dxos/react-client/echo';
|
|
10
|
-
import { useEdgeClient, useQueue } from '@dxos/react-edge-client';
|
|
9
|
+
import { getSpace, useQueue } from '@dxos/react-client/echo';
|
|
11
10
|
|
|
12
11
|
import { type AIChatType } from '../types';
|
|
13
12
|
|
|
@@ -18,6 +17,5 @@ export const useMessageQueue = (chat?: AIChatType) => {
|
|
|
18
17
|
return dxn ? new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, space.id, dxn.parts.at(-1)!]) : undefined;
|
|
19
18
|
}, [space, chat?.queue.dxn]);
|
|
20
19
|
|
|
21
|
-
|
|
22
|
-
return useQueue<Message>(edgeClient, queueDxn);
|
|
20
|
+
return useQueue<Message>(queueDxn);
|
|
23
21
|
};
|
package/src/meta.ts
CHANGED
|
@@ -8,11 +8,11 @@ export const ASSISTANT_PLUGIN = 'dxos.org/plugin/assistant';
|
|
|
8
8
|
|
|
9
9
|
export const ASSISTANT_DIALOG = `${ASSISTANT_PLUGIN}/assistant/dialog`;
|
|
10
10
|
|
|
11
|
-
export const meta = {
|
|
11
|
+
export const meta: PluginMeta = {
|
|
12
12
|
id: ASSISTANT_PLUGIN,
|
|
13
13
|
name: 'Assistant',
|
|
14
14
|
description: 'The Assistant tab allows you to chat with your spaces inside of Composer.',
|
|
15
15
|
icon: 'ph--atom--regular',
|
|
16
16
|
source: 'https://github.com/dxos/dxos/tree/main/packages/plugins/experimental/plugin-assistant',
|
|
17
17
|
tags: ['experimental'],
|
|
18
|
-
}
|
|
18
|
+
};
|
|
@@ -3,9 +3,9 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { createSystemPrompt } from '@dxos/artifact';
|
|
6
|
-
import {
|
|
6
|
+
import { DEFAULT_EDGE_MODEL, type GenerateRequest } from '@dxos/assistant';
|
|
7
7
|
|
|
8
8
|
export const createProcessorOptions = (artifacts: string[]): Pick<GenerateRequest, 'model' | 'systemPrompt'> => ({
|
|
9
|
-
model:
|
|
9
|
+
model: DEFAULT_EDGE_MODEL,
|
|
10
10
|
systemPrompt: createSystemPrompt({ artifacts }),
|
|
11
11
|
});
|
package/src/tools/function.ts
CHANGED
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
import { defineTool, ToolResult } from '@dxos/artifact';
|
|
6
6
|
import type { Tool } from '@dxos/artifact';
|
|
7
7
|
import { toEffectSchema } from '@dxos/echo-schema';
|
|
8
|
-
import { getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions';
|
|
9
|
-
import type { FunctionType } from '@dxos/functions';
|
|
8
|
+
import { getInvocationUrl, getUserFunctionUrlInMetadata } from '@dxos/functions/types';
|
|
9
|
+
import type { FunctionType } from '@dxos/functions/types';
|
|
10
10
|
import { log } from '@dxos/log';
|
|
11
11
|
import type { SpaceId } from '@dxos/react-client/echo';
|
|
12
12
|
import { getMeta } from '@dxos/react-client/echo';
|
package/src/translations.ts
CHANGED
|
@@ -16,6 +16,7 @@ export default [
|
|
|
16
16
|
},
|
|
17
17
|
[ASSISTANT_PLUGIN]: {
|
|
18
18
|
'chat title placeholder': 'AI Chat',
|
|
19
|
+
'templates label': 'Templates',
|
|
19
20
|
'template title placeholder': 'Template',
|
|
20
21
|
|
|
21
22
|
'open ambient chat label': 'Open AI chat',
|
|
@@ -27,6 +28,8 @@ export default [
|
|
|
27
28
|
'command placeholder': 'Enter slash command...',
|
|
28
29
|
'template placeholder': 'Enter template...',
|
|
29
30
|
'value placeholder': 'Enter value...',
|
|
31
|
+
'typename placeholder': 'Enter typename of objects which this template is for',
|
|
32
|
+
'description placeholder': 'Enter description of when this template should be used',
|
|
30
33
|
'select preset template placeholder': 'Select preset',
|
|
31
34
|
'service registry label': 'Service Registry',
|
|
32
35
|
|
|
@@ -40,9 +43,11 @@ export default [
|
|
|
40
43
|
'microphone button': 'Click to speak',
|
|
41
44
|
'cancel processing button': 'Stop processing',
|
|
42
45
|
|
|
43
|
-
'settings
|
|
44
|
-
'settings
|
|
45
|
-
'settings
|
|
46
|
+
'settings default label': 'Default',
|
|
47
|
+
'settings custom prompts label': 'Use custom prompts',
|
|
48
|
+
'settings llm provider label': 'Enable Ollama integration',
|
|
49
|
+
'settings edge llm model label': 'Remote language model',
|
|
50
|
+
'settings ollama llm model label': 'Ollama language model',
|
|
46
51
|
},
|
|
47
52
|
},
|
|
48
53
|
},
|
package/src/types/service.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { ComputeGraph } from '@dxos/conductor';
|
|
6
6
|
import { Ref, S, TypedObject, type Ref$ } from '@dxos/echo-schema';
|
|
7
|
-
import { FunctionType } from '@dxos/functions';
|
|
7
|
+
import { FunctionType } from '@dxos/functions/types';
|
|
8
8
|
|
|
9
9
|
const ApiAuthorizationKey = S.Struct({
|
|
10
10
|
type: S.Literal('api-key'),
|
package/src/types/template.ts
CHANGED
|
@@ -26,8 +26,30 @@ export const TemplateInputSchema = S.mutable(
|
|
|
26
26
|
|
|
27
27
|
export type TemplateInput = S.Schema.Type<typeof TemplateInputSchema>;
|
|
28
28
|
|
|
29
|
+
export const TemplateKinds = ['always', 'schema-matching', 'automatically', 'manual'] as const;
|
|
30
|
+
export type TemplateKind = (typeof TemplateKinds)[number];
|
|
31
|
+
|
|
32
|
+
export const TemplateKindSchema = S.Union(
|
|
33
|
+
S.Struct({
|
|
34
|
+
include: S.Literal('always'),
|
|
35
|
+
}),
|
|
36
|
+
S.Struct({
|
|
37
|
+
include: S.Literal('schema-matching'),
|
|
38
|
+
typename: S.String,
|
|
39
|
+
}),
|
|
40
|
+
S.Struct({
|
|
41
|
+
include: S.Literal('automatically'),
|
|
42
|
+
description: S.String,
|
|
43
|
+
}),
|
|
44
|
+
S.Struct({
|
|
45
|
+
include: S.Literal('manual'),
|
|
46
|
+
}),
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
export type TemplateKindType = S.Schema.Type<typeof TemplateKindSchema>;
|
|
29
50
|
export class TemplateType extends TypedObject({ typename: 'dxos.org/type/Template', version: '0.1.0' })({
|
|
30
51
|
name: S.optional(S.String),
|
|
52
|
+
kind: S.mutable(TemplateKindSchema),
|
|
31
53
|
source: S.String,
|
|
32
54
|
inputs: S.optional(S.mutable(S.Array(TemplateInputSchema))),
|
|
33
55
|
command: S.optional(S.String),
|
package/src/types/types.ts
CHANGED
|
@@ -33,7 +33,9 @@ export namespace AssistantAction {
|
|
|
33
33
|
|
|
34
34
|
export const AssistantSettingsSchema = S.mutable(
|
|
35
35
|
S.Struct({
|
|
36
|
-
|
|
36
|
+
llmProvider: S.optional(S.Literal('edge', 'ollama')),
|
|
37
|
+
edgeModel: S.optional(S.String),
|
|
38
|
+
ollamaModel: S.optional(S.String),
|
|
37
39
|
customPrompts: S.optional(S.Boolean),
|
|
38
40
|
}),
|
|
39
41
|
);
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
TemplateEditor
|
|
3
|
-
} from "./chunk-EUMPBC4T.mjs";
|
|
4
|
-
import "./chunk-NV7SVHMV.mjs";
|
|
5
|
-
|
|
6
|
-
// packages/plugins/experimental/plugin-assistant/src/components/TemplateContainer.tsx
|
|
7
|
-
import React from "react";
|
|
8
|
-
import { StackItem } from "@dxos/react-ui-stack";
|
|
9
|
-
var TemplateContainer = ({ template, role }) => {
|
|
10
|
-
return /* @__PURE__ */ React.createElement(StackItem.Content, {
|
|
11
|
-
toolbar: false,
|
|
12
|
-
role,
|
|
13
|
-
classNames: "mli-auto w-full max-w-[50rem]"
|
|
14
|
-
}, /* @__PURE__ */ React.createElement(TemplateEditor, {
|
|
15
|
-
template
|
|
16
|
-
}));
|
|
17
|
-
};
|
|
18
|
-
var TemplateContainer_default = TemplateContainer;
|
|
19
|
-
export {
|
|
20
|
-
TemplateContainer,
|
|
21
|
-
TemplateContainer_default as default
|
|
22
|
-
};
|
|
23
|
-
//# sourceMappingURL=TemplateContainer-B7MQNUPY.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/TemplateContainer.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport React from 'react';\n\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { TemplateEditor } from './TemplateEditor';\nimport { type TemplateType } from '../types';\n\n// TODO(burdon): Attention.\nexport const TemplateContainer = ({ template, role }: { template: TemplateType; role: string }) => {\n return (\n <StackItem.Content toolbar={false} role={role} classNames='mli-auto w-full max-w-[50rem]'>\n <TemplateEditor template={template} />\n </StackItem.Content>\n );\n};\n\nexport default TemplateContainer;\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,OAAOA,WAAW;AAElB,SAASC,iBAAiB;AAMnB,IAAMC,oBAAoB,CAAC,EAAEC,UAAUC,KAAI,MAA4C;AAC5F,SACE,sBAAA,cAACC,UAAUC,SAAO;IAACC,SAAS;IAAOH;IAAYI,YAAW;KACxD,sBAAA,cAACC,gBAAAA;IAAeN;;AAGtB;AAEA,IAAA,4BAAeD;",
|
|
6
|
-
"names": ["React", "StackItem", "TemplateContainer", "template", "role", "StackItem", "Content", "toolbar", "classNames", "TemplateEditor"]
|
|
7
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
AssistantCapabilities
|
|
3
|
-
} from "./chunk-NTLTGYYS.mjs";
|
|
4
|
-
import "./chunk-NV7SVHMV.mjs";
|
|
5
|
-
|
|
6
|
-
// packages/plugins/experimental/plugin-assistant/src/capabilities/ai-client.ts
|
|
7
|
-
import { contributes } from "@dxos/app-framework";
|
|
8
|
-
import { AIServiceEdgeClient } from "@dxos/assistant";
|
|
9
|
-
import { log } from "@dxos/log";
|
|
10
|
-
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
11
|
-
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/plugins/experimental/plugin-assistant/src/capabilities/ai-client.ts";
|
|
12
|
-
var DEFAULT_AI_SERVICE_URL = "http://localhost:8788";
|
|
13
|
-
var ai_client_default = (context) => {
|
|
14
|
-
const client = context.requestCapability(ClientCapabilities.Client);
|
|
15
|
-
const endpoint = client.config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL;
|
|
16
|
-
const ai = new AIServiceEdgeClient({
|
|
17
|
-
endpoint
|
|
18
|
-
});
|
|
19
|
-
log.info("ai", {
|
|
20
|
-
endpoint,
|
|
21
|
-
context
|
|
22
|
-
}, {
|
|
23
|
-
F: __dxlog_file,
|
|
24
|
-
L: 20,
|
|
25
|
-
S: void 0,
|
|
26
|
-
C: (f, a) => f(...a)
|
|
27
|
-
});
|
|
28
|
-
return contributes(AssistantCapabilities.AiClient, ai);
|
|
29
|
-
};
|
|
30
|
-
export {
|
|
31
|
-
ai_client_default as default
|
|
32
|
-
};
|
|
33
|
-
//# sourceMappingURL=ai-client-PORKRZXM.mjs.map
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/ai-client.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { contributes, type PluginsContext } from '@dxos/app-framework';\nimport { AIServiceEdgeClient } from '@dxos/assistant';\nimport { log } from '@dxos/log';\nimport { ClientCapabilities } from '@dxos/plugin-client';\n\nimport { AssistantCapabilities } from './capabilities';\n\n// TODO(wittjosiah): Factor out.\nconst DEFAULT_AI_SERVICE_URL = 'http://localhost:8788';\n\nexport default (context: PluginsContext) => {\n const client = context.requestCapability(ClientCapabilities.Client);\n const endpoint = client.config.values.runtime?.services?.ai?.server ?? DEFAULT_AI_SERVICE_URL;\n // TODO(burdon): Use prefs.\n const ai = new AIServiceEdgeClient({ endpoint });\n log.info('ai', { endpoint, context });\n return contributes(AssistantCapabilities.AiClient, ai);\n};\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,SAASA,mBAAwC;AACjD,SAASC,2BAA2B;AACpC,SAASC,WAAW;AACpB,SAASC,0BAA0B;;AAKnC,IAAMC,yBAAyB;AAE/B,IAAA,oBAAe,CAACC,YAAAA;AACd,QAAMC,SAASD,QAAQE,kBAAkBC,mBAAmBC,MAAM;AAClE,QAAMC,WAAWJ,OAAOK,OAAOC,OAAOC,SAASC,UAAUC,IAAIC,UAAUZ;AAEvE,QAAMW,KAAK,IAAIE,oBAAoB;IAAEP;EAAS,CAAA;AAC9CQ,MAAIC,KAAK,MAAM;IAAET;IAAUL;EAAQ,GAAA;;;;;;AACnC,SAAOe,YAAYC,sBAAsBC,UAAUP,EAAAA;AACrD;",
|
|
6
|
-
"names": ["contributes", "AIServiceEdgeClient", "log", "ClientCapabilities", "DEFAULT_AI_SERVICE_URL", "context", "client", "requestCapability", "ClientCapabilities", "Client", "endpoint", "config", "values", "runtime", "services", "ai", "server", "AIServiceEdgeClient", "log", "info", "contributes", "AssistantCapabilities", "AiClient"]
|
|
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 { log } from '@dxos/log';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { createExtension, type Node, ROOT_ID } from '@dxos/plugin-graph';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport { type Space, Filter, getSpace } from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, ASSISTANT_PLUGIN } from '../meta';\nimport { AIChatType, AssistantAction } 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 log.warn('no chat found');\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\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,WAAW;AACpB,SAASC,0BAA0B;AACnC,SAASC,iBAA4BC,eAAe;AACpD,SAASC,mBAAmB;AAC5B,SAAqBC,QAAQC,gBAAgB;;AAK7C,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;AACTS,gBAAIC,KAAK,iBAAA,QAAA;;;;;;AACT;UACF;AAEA,gBAAMpB,SACJqB,aAAa1B,aAAaC,cAAc;YACtC0B,MAAM;YACNC,SAASC;YACTC,SAAS;cACPC,OAAO;cACPC,YAAY;cACZC,OAAO;gBACLlB;cACF;YACF;UACF,CAAA,CAAA;QAEJ;QACAmB,YAAY;UACVC,OAAO;YAAC;YAAwB;cAAEC,IAAIzC;YAAiB;;UACvD0C,MAAM;UACNC,aAAa;UACbC,UAAU;UACVC,YAAY;YACVC,OAAO;YACPC,SAAS;UACX;QACF;MACF;;EAEJ,CAAA;CACD;AAGH,IAAMrB,kBAAkB,OAAOhB,UAAmCc,UAAAA;AAChE,QAAM,EAAEwB,QAAO,IAAK,MAAMxB,MAAMyB,GAAGC,MAAMC,OAAOC,OAAOC,UAAAA,CAAAA,EAAaC,IAAG;AAEvE,MAAIN,QAAQ1B,SAAS,GAAG;AAEtB,WAAO0B,QAAQA,QAAQ1B,SAAS,CAAA;EAClC;AAEA,QAAM,EAAEd,KAAI,IAAK,MAAME,SAASqB,aAAawB,gBAAgBC,YAAY;IAAEC,SAASjC,MAAMzB;EAAG,CAAA,CAAA;AAC7F2D,YAAUlD,MAAMmD,kBAAkBN,YAAAA,QAAAA;;;;;;;;;AAClC,QAAM3C,SAASqB,aAAa6B,YAAYC,WAAW;IAAEC,QAAQtC;IAAOmC,QAAQnD,KAAKmD;EAAO,CAAA,CAAA;AACxF,SAAOnD,KAAKmD;AACd;",
|
|
6
|
-
"names": ["Capabilities", "contributes", "createIntent", "LayoutAction", "invariant", "log", "ClientCapabilities", "createExtension", "ROOT_ID", "SpaceAction", "Filter", "getSpace", "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", "log", "warn", "createIntent", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "properties", "label", "ns", "icon", "disposition", "position", "keyBinding", "macos", "windows", "objects", "db", "query", "Filter", "schema", "AIChatType", "run", "AssistantAction", "CreateChat", "spaceId", "invariant", "object", "SpaceAction", "AddObject", "target"]
|
|
7
|
-
}
|
|
@@ -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';\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 class TemplateType extends TypedObject({ typename: 'dxos.org/type/Template', version: '0.1.0' })({\n name: S.optional(S.String),\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 llmModel: 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", "TemplateType", "TypedObject", "typename", "version", "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", "llmModel", "customPrompts", "Boolean"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/capabilities.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { defineCapability } from '@dxos/app-framework';\nimport { type AIServiceClient } from '@dxos/assistant';\n\nimport { ASSISTANT_PLUGIN } from '../meta';\n\nexport namespace AssistantCapabilities {\n export const AiClient = defineCapability<AIServiceClient>(`${ASSISTANT_PLUGIN}/capability/ai-client`);\n}\n"],
|
|
5
|
-
"mappings": ";;;;;AAIA,SAASA,wBAAwB;;UAKhBC,wBAAAA;yBACFC,WAAWC,iBAAkC,GAAGC,gBAAAA,uBAAuC;AACtG,GAFiBH,0BAAAA,wBAAAA,CAAAA,EAAAA;",
|
|
6
|
-
"names": ["defineCapability", "AssistantCapabilities", "AiClient", "defineCapability", "ASSISTANT_PLUGIN"]
|
|
7
|
-
}
|