@dxos/plugin-assistant 0.8.4-main.2e9d522 → 0.8.4-main.5acf9ea
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/{TemplateContainer-RPJ2LBOB.mjs → BlueprintContainer-IZ4AK5EO.mjs} +9 -8
- package/dist/lib/browser/BlueprintContainer-IZ4AK5EO.mjs.map +7 -0
- package/dist/lib/browser/{ChatContainer-M3IHQLRS.mjs → ChatContainer-RP3QEXYX.mjs} +3 -3
- package/dist/lib/browser/{ChatDialog-X6VN6QZI.mjs → ChatDialog-ZVLXFHEY.mjs} +3 -3
- package/dist/lib/browser/{app-graph-builder-JTXBKE7O.mjs → app-graph-builder-XSEOKJLG.mjs} +5 -64
- package/dist/lib/browser/app-graph-builder-XSEOKJLG.mjs.map +7 -0
- package/dist/lib/browser/{chunk-OWY4CUQY.mjs → chunk-63GG6U6D.mjs} +18 -37
- package/dist/lib/browser/chunk-63GG6U6D.mjs.map +7 -0
- package/dist/lib/browser/{chunk-JQBVLTM5.mjs → chunk-7W7LHTRH.mjs} +14 -1
- package/dist/lib/browser/chunk-7W7LHTRH.mjs.map +7 -0
- package/dist/lib/browser/{chunk-AEAEKWOC.mjs → chunk-KFXSBNZR.mjs} +10 -19
- package/dist/lib/browser/chunk-KFXSBNZR.mjs.map +7 -0
- package/dist/lib/browser/{chunk-EQDW6BYQ.mjs → chunk-LERGF5YG.mjs} +7 -7
- package/dist/lib/browser/{chunk-EQDW6BYQ.mjs.map → chunk-LERGF5YG.mjs.map} +3 -3
- package/dist/lib/browser/index.mjs +42 -30
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-5RMMCMXG.mjs → intent-resolver-MV3VSZLS.mjs} +19 -4
- package/dist/lib/browser/intent-resolver-MV3VSZLS.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-66VY37YQ.mjs → react-surface-3GYEHQRP.mjs} +14 -14
- package/dist/lib/browser/react-surface-3GYEHQRP.mjs.map +7 -0
- package/dist/lib/browser/{settings-2DGP3UTS.mjs → settings-5GTTCVGD.mjs} +2 -2
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node-esm/{TemplateContainer-A3NAQCZE.mjs → BlueprintContainer-RGTMNLNX.mjs} +9 -8
- package/dist/lib/node-esm/BlueprintContainer-RGTMNLNX.mjs.map +7 -0
- package/dist/lib/node-esm/{ChatContainer-VZT74PO2.mjs → ChatContainer-W3W6FWV3.mjs} +3 -3
- package/dist/lib/node-esm/{ChatDialog-RJ6FDX4Q.mjs → ChatDialog-QW4JRKVO.mjs} +3 -3
- package/dist/lib/node-esm/{app-graph-builder-OWSOXFTD.mjs → app-graph-builder-PANCJUHV.mjs} +5 -64
- package/dist/lib/node-esm/app-graph-builder-PANCJUHV.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-SENTQAEO.mjs → chunk-BFO3KHYL.mjs} +18 -37
- package/dist/lib/node-esm/chunk-BFO3KHYL.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-E33DNNDW.mjs → chunk-MS3PJARN.mjs} +7 -7
- package/dist/lib/node-esm/{chunk-E33DNNDW.mjs.map → chunk-MS3PJARN.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-2XL6MNPE.mjs → chunk-VIIMA3XQ.mjs} +10 -19
- package/dist/lib/node-esm/chunk-VIIMA3XQ.mjs.map +7 -0
- package/dist/lib/node-esm/{chunk-BISJDTBK.mjs → chunk-Z7PUODRT.mjs} +14 -1
- package/dist/lib/node-esm/chunk-Z7PUODRT.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +42 -30
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-YPPYELY3.mjs → intent-resolver-3FMC3GHC.mjs} +19 -4
- package/dist/lib/node-esm/intent-resolver-3FMC3GHC.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-RJMRBR2M.mjs → react-surface-QDQWJ7FZ.mjs} +14 -14
- package/dist/lib/node-esm/react-surface-QDQWJ7FZ.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-47RYZOU4.mjs → settings-J2EXEM5H.mjs} +2 -2
- package/dist/lib/node-esm/types/index.mjs +1 -1
- 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/capability-definitions.d.ts +7 -0
- package/dist/types/src/capability-definitions.d.ts.map +1 -0
- package/dist/types/src/components/BlueprintContainer.d.ts +8 -0
- package/dist/types/src/components/BlueprintContainer.d.ts.map +1 -0
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts +0 -42
- package/dist/types/src/components/ChatThread/ChatThread.stories.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts +2 -1
- package/dist/types/src/components/TemplateEditor/TemplateEditor.d.ts.map +1 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts +2 -1
- package/dist/types/src/components/TemplateEditor/TemplateForm.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -1
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useChatServices.d.ts +2 -2
- package/dist/types/src/hooks/useChatServices.d.ts.map +1 -1
- package/dist/types/src/stories/Chat.stories.d.ts +2 -44
- package/dist/types/src/stories/Chat.stories.d.ts.map +1 -1
- package/dist/types/src/translations.d.ts +1 -10
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/schema.d.ts +32 -0
- package/dist/types/src/types/schema.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +75 -73
- package/src/AssistantPlugin.tsx +32 -6
- package/src/capabilities/app-graph-builder.ts +2 -86
- package/src/capabilities/intent-resolver.ts +16 -2
- package/src/capabilities/react-surface.tsx +7 -7
- package/src/capability-definitions.ts +15 -0
- package/src/components/BlueprintContainer.tsx +24 -0
- package/src/components/TemplateEditor/TemplateEditor.stories.tsx +4 -4
- package/src/components/TemplateEditor/TemplateEditor.tsx +12 -10
- package/src/components/TemplateEditor/TemplateForm.stories.tsx +4 -4
- package/src/components/TemplateEditor/TemplateForm.tsx +3 -2
- package/src/components/index.ts +1 -1
- package/src/hooks/useChatServices.ts +24 -48
- package/src/stories/Chat.stories.tsx +17 -24
- package/src/translations.ts +1 -10
- package/src/types/schema.ts +13 -0
- package/dist/lib/browser/TemplateContainer-RPJ2LBOB.mjs.map +0 -7
- package/dist/lib/browser/app-graph-builder-JTXBKE7O.mjs.map +0 -7
- package/dist/lib/browser/chunk-AEAEKWOC.mjs.map +0 -7
- package/dist/lib/browser/chunk-JQBVLTM5.mjs.map +0 -7
- package/dist/lib/browser/chunk-OWY4CUQY.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-5RMMCMXG.mjs.map +0 -7
- package/dist/lib/browser/react-surface-66VY37YQ.mjs.map +0 -7
- package/dist/lib/node-esm/TemplateContainer-A3NAQCZE.mjs.map +0 -7
- package/dist/lib/node-esm/app-graph-builder-OWSOXFTD.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-2XL6MNPE.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-BISJDTBK.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-SENTQAEO.mjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-YPPYELY3.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-RJMRBR2M.mjs.map +0 -7
- package/dist/types/src/components/TemplateContainer.d.ts +0 -8
- package/dist/types/src/components/TemplateContainer.d.ts.map +0 -1
- package/src/components/TemplateContainer.tsx +0 -24
- /package/dist/lib/browser/{ChatContainer-M3IHQLRS.mjs.map → ChatContainer-RP3QEXYX.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatDialog-X6VN6QZI.mjs.map → ChatDialog-ZVLXFHEY.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-2DGP3UTS.mjs.map → settings-5GTTCVGD.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-VZT74PO2.mjs.map → ChatContainer-W3W6FWV3.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatDialog-RJ6FDX4Q.mjs.map → ChatDialog-QW4JRKVO.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-47RYZOU4.mjs.map → settings-J2EXEM5H.mjs.map} +0 -0
|
@@ -6,21 +6,22 @@ import { Layer } from 'effect';
|
|
|
6
6
|
import { useMemo } from 'react';
|
|
7
7
|
import { useDeepCompareMemoize } from 'use-deep-compare-effect';
|
|
8
8
|
|
|
9
|
-
import { type AiService, type ToolExecutionService,
|
|
10
|
-
import { AiServiceTestingPreset } from '@dxos/ai/testing';
|
|
9
|
+
import { type AiService, type ToolExecutionService, type ToolResolverService } from '@dxos/ai';
|
|
11
10
|
import { Capabilities, useCapabilities } from '@dxos/app-framework';
|
|
12
11
|
import { makeToolExecutionServiceFromFunctions, makeToolResolverFromFunctions } from '@dxos/assistant';
|
|
13
12
|
import { type Space } from '@dxos/client/echo';
|
|
14
13
|
import {
|
|
15
|
-
|
|
14
|
+
ComputeEventLogger,
|
|
16
15
|
CredentialsService,
|
|
17
16
|
DatabaseService,
|
|
18
|
-
|
|
19
|
-
FunctionCallService,
|
|
17
|
+
LocalFunctionExecutionService,
|
|
20
18
|
QueueService,
|
|
19
|
+
RemoteFunctionExecutionService,
|
|
21
20
|
TracingService,
|
|
22
21
|
} from '@dxos/functions';
|
|
23
22
|
|
|
23
|
+
import { AssistantCapabilities } from '../capability-definitions';
|
|
24
|
+
|
|
24
25
|
export * from '@dxos/assistant';
|
|
25
26
|
|
|
26
27
|
// TODO(burdon): Deconstruct into separate layers?
|
|
@@ -29,11 +30,10 @@ export type ChatServices =
|
|
|
29
30
|
| CredentialsService
|
|
30
31
|
| DatabaseService
|
|
31
32
|
| QueueService
|
|
32
|
-
|
|
|
33
|
+
| RemoteFunctionExecutionService
|
|
33
34
|
| ToolResolverService
|
|
34
35
|
| ToolExecutionService
|
|
35
|
-
| TracingService
|
|
36
|
-
| EventLogger;
|
|
36
|
+
| TracingService;
|
|
37
37
|
|
|
38
38
|
export type UseChatServicesProps = {
|
|
39
39
|
space?: Space;
|
|
@@ -43,49 +43,25 @@ export type UseChatServicesProps = {
|
|
|
43
43
|
* Construct service layer.
|
|
44
44
|
*/
|
|
45
45
|
export const useChatServices = ({ space }: UseChatServicesProps): Layer.Layer<ChatServices> | undefined => {
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
const
|
|
49
|
-
const toolExecutionService = useToolExecutionService();
|
|
46
|
+
const aiServiceLayer =
|
|
47
|
+
useCapabilities(AssistantCapabilities.AiServiceLayer).at(0) ?? Layer.die('AiService not found');
|
|
48
|
+
const functions = useCapabilities(Capabilities.Functions).flat();
|
|
50
49
|
|
|
51
50
|
return useMemo(() => {
|
|
52
51
|
return Layer.mergeAll(
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
space ? Layer.succeed(QueueService, QueueService.make(space.queues)) : QueueService.notAvailable,
|
|
57
|
-
Layer.succeed(FunctionCallService, FunctionCallService.mock()),
|
|
58
|
-
Layer.succeed(TracingService, TracingService.noop),
|
|
59
|
-
Layer.succeed(EventLogger, EventLogger.noop),
|
|
60
|
-
toolResolver,
|
|
61
|
-
toolExecutionService,
|
|
62
|
-
);
|
|
63
|
-
}, [space, toolRegistry, toolResolver]);
|
|
64
|
-
};
|
|
52
|
+
aiServiceLayer,
|
|
53
|
+
makeToolResolverFromFunctions(functions),
|
|
54
|
+
makeToolExecutionServiceFromFunctions(functions),
|
|
65
55
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
};
|
|
56
|
+
CredentialsService.configuredLayer([]),
|
|
57
|
+
space ? DatabaseService.makeLayer(space.db) : DatabaseService.notAvailable,
|
|
58
|
+
space ? QueueService.makeLayer(space.queues) : QueueService.notAvailable,
|
|
70
59
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
};
|
|
78
|
-
|
|
79
|
-
// TODO(burdon): Factor out.
|
|
80
|
-
const useToolRegistry = (): ToolRegistry => {
|
|
81
|
-
const tools = useCapabilities(Capabilities.Tools).flat();
|
|
82
|
-
return useMemo(() => {
|
|
83
|
-
const toolRegistry = new ToolRegistry([]);
|
|
84
|
-
for (const tool of tools) {
|
|
85
|
-
if (!toolRegistry.has(tool)) {
|
|
86
|
-
toolRegistry.register(tool);
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
return toolRegistry;
|
|
90
|
-
}, [useDeepCompareMemoize(tools)]);
|
|
60
|
+
ComputeEventLogger.layerFromTracing,
|
|
61
|
+
).pipe(
|
|
62
|
+
Layer.provideMerge(TracingService.layerNoop),
|
|
63
|
+
Layer.provideMerge(LocalFunctionExecutionService.layer),
|
|
64
|
+
Layer.provideMerge(RemoteFunctionExecutionService.mockLayer),
|
|
65
|
+
);
|
|
66
|
+
}, [space, useDeepCompareMemoize(functions.map((f) => f.name))]);
|
|
91
67
|
};
|
|
@@ -12,10 +12,10 @@ import { withPluginManager } from '@dxos/app-framework/testing';
|
|
|
12
12
|
import { ContextBinder } from '@dxos/assistant';
|
|
13
13
|
import {
|
|
14
14
|
DESIGN_BLUEPRINT,
|
|
15
|
-
|
|
15
|
+
PLANNING_BLUEPRINT,
|
|
16
16
|
readDocument,
|
|
17
17
|
remoteServiceEndpoints,
|
|
18
|
-
|
|
18
|
+
updateDocument,
|
|
19
19
|
} from '@dxos/assistant-testing';
|
|
20
20
|
import { Blueprint } from '@dxos/blueprints';
|
|
21
21
|
import { Filter, Obj, Ref } from '@dxos/echo';
|
|
@@ -26,7 +26,7 @@ import { ClientPlugin } from '@dxos/plugin-client';
|
|
|
26
26
|
import { InboxPlugin } from '@dxos/plugin-inbox';
|
|
27
27
|
import { MapPlugin } from '@dxos/plugin-map';
|
|
28
28
|
import { MarkdownPlugin } from '@dxos/plugin-markdown';
|
|
29
|
-
import {
|
|
29
|
+
import { Markdown } from '@dxos/plugin-markdown/types';
|
|
30
30
|
import { SpacePlugin } from '@dxos/plugin-space';
|
|
31
31
|
import { TablePlugin } from '@dxos/plugin-table';
|
|
32
32
|
import { TranscriptionPlugin } from '@dxos/plugin-transcription';
|
|
@@ -42,14 +42,13 @@ import {
|
|
|
42
42
|
outliner,
|
|
43
43
|
} from '@dxos/react-ui-editor';
|
|
44
44
|
import { mx } from '@dxos/react-ui-theme';
|
|
45
|
-
import { DataType } from '@dxos/schema';
|
|
46
45
|
import { render, withLayout, withTheme } from '@dxos/storybook-utils';
|
|
47
46
|
|
|
48
47
|
import { AssistantPlugin } from '../AssistantPlugin';
|
|
49
48
|
import { Chat, TemplateEditor, type ChatPromptProps } from '../components';
|
|
50
49
|
import { type AiServicePreset, AiServicePresets } from '../hooks';
|
|
51
50
|
import { useChatProcessor, useChatServices } from '../hooks';
|
|
52
|
-
import { meta
|
|
51
|
+
import { meta } from '../meta';
|
|
53
52
|
import { translations } from '../translations';
|
|
54
53
|
import { Assistant } from '../types';
|
|
55
54
|
|
|
@@ -91,7 +90,7 @@ const DefaultStory = ({ components }: { components: (FC | FC[])[] }) => {
|
|
|
91
90
|
//
|
|
92
91
|
|
|
93
92
|
const ChatContainer = () => {
|
|
94
|
-
const { t } = useTranslation(
|
|
93
|
+
const { t } = useTranslation(meta.id);
|
|
95
94
|
const space = useSpace();
|
|
96
95
|
|
|
97
96
|
const [chat, setChat] = useState<Assistant.Chat>();
|
|
@@ -114,7 +113,7 @@ const ChatContainer = () => {
|
|
|
114
113
|
}, [presets]);
|
|
115
114
|
|
|
116
115
|
const services = useChatServices({ space });
|
|
117
|
-
const blueprintRegistry = useMemo(() => new Blueprint.Registry([DESIGN_BLUEPRINT,
|
|
116
|
+
const blueprintRegistry = useMemo(() => new Blueprint.Registry([DESIGN_BLUEPRINT, PLANNING_BLUEPRINT]), []);
|
|
118
117
|
const processor = useChatProcessor({
|
|
119
118
|
preset,
|
|
120
119
|
chat,
|
|
@@ -181,7 +180,7 @@ const ChatContainer = () => {
|
|
|
181
180
|
const DocumentContainer = () => {
|
|
182
181
|
const { themeMode } = useThemeContext();
|
|
183
182
|
const space = useSpace();
|
|
184
|
-
const [document] = useQuery(space, Filter.type(
|
|
183
|
+
const [document] = useQuery(space, Filter.type(Markdown.Document));
|
|
185
184
|
if (!document?.content.target) {
|
|
186
185
|
return null;
|
|
187
186
|
}
|
|
@@ -212,7 +211,7 @@ const DocumentContainer = () => {
|
|
|
212
211
|
const BlueprintContainer = () => {
|
|
213
212
|
const space = useSpace();
|
|
214
213
|
const [blueprint] = useQuery(space, Filter.type(Blueprint.Blueprint));
|
|
215
|
-
if (!blueprint?.instructions
|
|
214
|
+
if (!blueprint?.instructions) {
|
|
216
215
|
return null;
|
|
217
216
|
}
|
|
218
217
|
|
|
@@ -221,7 +220,7 @@ const BlueprintContainer = () => {
|
|
|
221
220
|
<Toolbar.Root classNames='border-b border-subduedSeparator'>
|
|
222
221
|
<h2>{Obj.getLabel(blueprint)}</h2>
|
|
223
222
|
</Toolbar.Root>
|
|
224
|
-
<TemplateEditor template={blueprint.instructions
|
|
223
|
+
<TemplateEditor id={blueprint.id} template={blueprint.instructions} />
|
|
225
224
|
</div>
|
|
226
225
|
);
|
|
227
226
|
};
|
|
@@ -230,7 +229,7 @@ const BlueprintContainer = () => {
|
|
|
230
229
|
// Configuration
|
|
231
230
|
//
|
|
232
231
|
|
|
233
|
-
const
|
|
232
|
+
const storybook = {
|
|
234
233
|
title: 'plugins/plugin-assistant/Chat',
|
|
235
234
|
render: render(DefaultStory),
|
|
236
235
|
decorators: [],
|
|
@@ -240,9 +239,9 @@ const meta = {
|
|
|
240
239
|
},
|
|
241
240
|
} satisfies Meta<typeof DefaultStory>;
|
|
242
241
|
|
|
243
|
-
export default
|
|
242
|
+
export default storybook;
|
|
244
243
|
|
|
245
|
-
type Story = StoryObj<typeof
|
|
244
|
+
type Story = StoryObj<typeof storybook>;
|
|
246
245
|
|
|
247
246
|
//
|
|
248
247
|
// Decorators
|
|
@@ -278,7 +277,7 @@ const getDecorators = ({
|
|
|
278
277
|
plugins: [
|
|
279
278
|
ClientPlugin({
|
|
280
279
|
config,
|
|
281
|
-
types: [Assistant.Chat,
|
|
280
|
+
types: [Markdown.Document, Assistant.Chat, Blueprint.Blueprint],
|
|
282
281
|
onClientInitialized: async (_, client) => {
|
|
283
282
|
await client.halo.createIdentity();
|
|
284
283
|
await client.spaces.waitUntilReady();
|
|
@@ -287,20 +286,14 @@ const getDecorators = ({
|
|
|
287
286
|
// ERROR: invariant violation: Database was not initialized with root object.
|
|
288
287
|
await space.waitUntilReady();
|
|
289
288
|
|
|
290
|
-
// TODO(burdon): Remove need for this boilerplate. Namespace for types?
|
|
291
289
|
const chat = space.db.add(
|
|
290
|
+
// TODO(burdon): Assistant.makeChat()
|
|
292
291
|
Obj.make(Assistant.Chat, {
|
|
293
292
|
queue: Ref.fromDXN(space.queues.create().dxn),
|
|
294
293
|
}),
|
|
295
294
|
);
|
|
296
295
|
const binder = new ContextBinder(await chat.queue.load());
|
|
297
|
-
|
|
298
|
-
const doc = space.db.add(
|
|
299
|
-
Obj.make(DocumentType, {
|
|
300
|
-
name: 'Tasks',
|
|
301
|
-
content: Ref.make(Obj.make(DataType.Text, { content: '' })),
|
|
302
|
-
}),
|
|
303
|
-
);
|
|
296
|
+
const doc = space.db.add(Markdown.makeDocument({ name: 'Tasks' }));
|
|
304
297
|
if (context) {
|
|
305
298
|
await binder.bind({ objects: [Ref.make(doc)] });
|
|
306
299
|
}
|
|
@@ -323,7 +316,7 @@ const getDecorators = ({
|
|
|
323
316
|
|
|
324
317
|
...plugins,
|
|
325
318
|
],
|
|
326
|
-
capabilities: [contributes(Capabilities.Functions, [readDocument,
|
|
319
|
+
capabilities: [contributes(Capabilities.Functions, [readDocument, updateDocument])],
|
|
327
320
|
}),
|
|
328
321
|
withTheme,
|
|
329
322
|
withLayout({
|
|
@@ -359,7 +352,7 @@ export const WithBlueprints = {
|
|
|
359
352
|
decorators: getDecorators({
|
|
360
353
|
config: remoteConfig,
|
|
361
354
|
plugins: [ChessPlugin(), InboxPlugin(), MapPlugin(), MarkdownPlugin(), TablePlugin()],
|
|
362
|
-
blueprints: [
|
|
355
|
+
blueprints: [PLANNING_BLUEPRINT],
|
|
363
356
|
context: true,
|
|
364
357
|
}),
|
|
365
358
|
args: {
|
package/src/translations.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import { Blueprint
|
|
5
|
+
import { Blueprint } from '@dxos/blueprints';
|
|
6
6
|
import { Sequence } from '@dxos/conductor';
|
|
7
7
|
import { type Resource } from '@dxos/react-ui';
|
|
8
8
|
|
|
@@ -22,15 +22,6 @@ export const translations = [
|
|
|
22
22
|
'rename object label': 'Rename blueprint',
|
|
23
23
|
'delete object label': 'Delete blueprint',
|
|
24
24
|
},
|
|
25
|
-
[Template.Template.typename]: {
|
|
26
|
-
'typename label': 'Template',
|
|
27
|
-
'typename label_zero': 'Templates',
|
|
28
|
-
'typename label_one': 'Template',
|
|
29
|
-
'typename label_other': 'Templates',
|
|
30
|
-
'object name placeholder': 'New template',
|
|
31
|
-
'rename object label': 'Rename template',
|
|
32
|
-
'delete object label': 'Delete template',
|
|
33
|
-
},
|
|
34
25
|
// TODO(burdon): From conductor.
|
|
35
26
|
[Sequence.typename]: {
|
|
36
27
|
'typename label': 'Sequence',
|
package/src/types/schema.ts
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
import { Schema } from 'effect';
|
|
6
6
|
|
|
7
|
+
import { Blueprint } from '@dxos/blueprints';
|
|
7
8
|
import { SpaceSchema, Queue } from '@dxos/client/echo';
|
|
8
9
|
import { Sequence } from '@dxos/conductor';
|
|
9
10
|
import { Type } from '@dxos/echo';
|
|
@@ -84,6 +85,18 @@ export namespace Assistant {
|
|
|
84
85
|
}),
|
|
85
86
|
}) {}
|
|
86
87
|
|
|
88
|
+
export const BlueprintForm = Schema.Struct({
|
|
89
|
+
name: Schema.String,
|
|
90
|
+
description: Schema.optional(Schema.String),
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
export class CreateBlueprint extends Schema.TaggedClass<CreateBlueprint>()(`${meta.id}/action/create-blueprint`, {
|
|
94
|
+
input: BlueprintForm,
|
|
95
|
+
output: Schema.Struct({
|
|
96
|
+
object: Blueprint.Blueprint,
|
|
97
|
+
}),
|
|
98
|
+
}) {}
|
|
99
|
+
|
|
87
100
|
export class CreateSequence extends Schema.TaggedClass<CreateSequence>()(`${meta.id}/action/create-sequence`, {
|
|
88
101
|
input: Schema.Struct({
|
|
89
102
|
name: Schema.optional(Schema.String),
|
|
@@ -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 { type Template } from '@dxos/blueprints';\nimport { StackItem } from '@dxos/react-ui-stack';\n\nimport { TemplateEditor } from './TemplateEditor';\n\nexport type TemplateContainerProps = {\n template: Template.Template;\n};\n\nexport const TemplateContainer = ({ template }: TemplateContainerProps) => {\n return (\n <StackItem.Content classNames='container-max-width'>\n <TemplateEditor template={template} />\n </StackItem.Content>\n );\n};\n\nexport default TemplateContainer;\n"],
|
|
5
|
-
"mappings": ";;;;;;;AAIA,OAAOA,WAAW;AAGlB,SAASC,iBAAiB;AAQnB,IAAMC,oBAAoB,CAAC,EAAEC,SAAQ,MAA0B;;;AACpE,WACE,sBAAA,cAACC,UAAUC,SAAO;MAACC,YAAW;OAC5B,sBAAA,cAACC,gBAAAA;MAAeJ;;;;;AAGtB;AAEA,IAAA,4BAAeD;",
|
|
6
|
-
"names": ["React", "StackItem", "TemplateContainer", "template", "StackItem", "Content", "classNames", "TemplateEditor"]
|
|
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 { Rx } from '@effect-rx/rx-react';\nimport { Option, pipe } from 'effect';\n\nimport {\n Capabilities,\n contributes,\n createIntent,\n LayoutAction,\n type PromiseIntentDispatcher,\n type PluginContext,\n} from '@dxos/app-framework';\nimport { Template } from '@dxos/blueprints';\nimport { Sequence } from '@dxos/conductor';\nimport { Obj } from '@dxos/echo';\nimport { invariant } from '@dxos/invariant';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { PLANK_COMPANION_TYPE, ATTENDABLE_PATH_SEPARATOR } from '@dxos/plugin-deck/types';\nimport { createExtension, ROOT_ID } from '@dxos/plugin-graph';\nimport { getActiveSpace, rxFromQuery } from '@dxos/plugin-space';\nimport { SPACE_TYPE, SpaceAction } from '@dxos/plugin-space/types';\nimport {\n type Space,\n Filter,\n Query,\n type QueryResult,\n fullyQualifiedId,\n getSpace,\n isSpace,\n} from '@dxos/react-client/echo';\n\nimport { ASSISTANT_DIALOG, meta } from '../meta';\nimport { Assistant } from '../types';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${meta.id}/assistant`,\n actions: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (node.id === ROOT_ID ? Option.some(node) : Option.none())),\n Option.map(() => [\n {\n id: `${LayoutAction.UpdateDialog._tag}/assistant/open`,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n const client = context.getCapability(ClientCapabilities.Client);\n const space = getActiveSpace(context) ?? client.spaces.default;\n const chat = await getOrCreateChat(dispatch, space);\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: meta.id }],\n icon: 'ph--sparkle--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 Option.getOrElse(() => []),\n ),\n ),\n }),\n\n createExtension({\n id: `${meta.id}/object-chat-companion`,\n connector: (node) => {\n let query: QueryResult<Assistant.Chat> | undefined;\n return Rx.make((get) => {\n const nodeOption = get(node);\n if (Option.isNone(nodeOption)) {\n return [];\n }\n\n const object = nodeOption.value.data;\n if (!Obj.isObject(object)) {\n return [];\n }\n\n const space = getSpace(object);\n if (!space) {\n return [];\n }\n\n if (!query) {\n query = space.db.query(Query.select(Filter.ids(object.id)).targetOf(Assistant.CompanionTo).source());\n }\n\n const chat = get(rxFromQuery(query))[0];\n return [\n {\n id: [fullyQualifiedId(object), 'assistant-chat'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: chat ?? 'assistant-chat',\n properties: {\n label: ['assistant chat label', { ns: meta.id }],\n icon: 'ph--sparkle--regular',\n position: 'hoist',\n disposition: 'hidden',\n },\n },\n ];\n });\n },\n }),\n\n createExtension({\n id: `${meta.id}/sequence-logs`,\n connector: (node) =>\n Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) => (Obj.instanceOf(Sequence, node.data) ? Option.some(node) : Option.none())),\n Option.map((node) => [\n {\n id: [node.id, 'logs'].join(ATTENDABLE_PATH_SEPARATOR),\n type: PLANK_COMPANION_TYPE,\n data: 'logs',\n properties: {\n label: ['sequence logs label', { ns: meta.id }],\n icon: 'ph--clock-countdown--regular',\n disposition: 'hidden',\n },\n },\n ]),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n\n createExtension({\n id: `${meta.id}/root`,\n connector: (node) => {\n let query: QueryResult<Template.Template> | undefined;\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n node.type === SPACE_TYPE && isSpace(node.data) ? Option.some(node.data) : Option.none(),\n ),\n Option.map((space) => {\n if (!query) {\n query = space.db.query(Query.type(Template.Template));\n }\n\n const templates = get(rxFromQuery(query));\n return templates.length > 0\n ? [\n {\n id: `${meta.id}/templates`,\n type: `${meta.id}/templates`,\n data: null,\n properties: {\n label: ['templates label', { ns: meta.id }],\n icon: 'ph--file-code--regular',\n space,\n },\n },\n ]\n : [];\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n }),\n\n createExtension({\n id: `${meta.id}/templates`,\n connector: (node) => {\n let query: QueryResult<Template.Template> | undefined;\n return Rx.make((get) =>\n pipe(\n get(node),\n Option.flatMap((node) =>\n node.id === `${meta.id}/templates` && isSpace(node.properties.space)\n ? Option.some(node.properties.space)\n : Option.none(),\n ),\n Option.map((space) => {\n if (!query) {\n query = space.db.query(Query.type(Template.Template));\n }\n return get(rxFromQuery(query))\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: `${meta.id}/template`,\n data: template,\n properties: {\n label: template.name ?? ['object placeholder', { ns: meta.id }],\n icon: 'ph--file-code--regular',\n },\n }));\n }),\n Option.getOrElse(() => []),\n ),\n );\n },\n }),\n ]);\n\n// TODO(burdon): Factor out.\nconst getOrCreateChat = async (\n dispatch: PromiseIntentDispatcher,\n space: Space,\n): Promise<Assistant.Chat | undefined> => {\n // TODO(wittjosiah): This should be possible with a single query.\n const { objects: allChats } = await space.db.query(Query.type(Assistant.Chat)).run();\n const { objects: relatedChats } = await space.db\n .query(Query.type(Assistant.Chat).sourceOf(Assistant.CompanionTo).source())\n .run();\n const chats = allChats.filter((chat) => !relatedChats.includes(chat));\n // console.log('objects', JSON.stringify(objects, null, 2));\n if (chats.length > 0) {\n // TODO(burdon): Is this the most recent?\n return chats[chats.length - 1];\n }\n\n const { data } = await dispatch(createIntent(Assistant.CreateChat, { space }));\n invariant(Obj.instanceOf(Assistant.Chat, data?.object));\n await dispatch(createIntent(SpaceAction.AddObject, { target: space, object: data.object }));\n return data.object;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "createIntent", "LayoutAction", "Template", "Sequence", "Obj", "invariant", "ClientCapabilities", "PLANK_COMPANION_TYPE", "ATTENDABLE_PATH_SEPARATOR", "createExtension", "ROOT_ID", "getActiveSpace", "rxFromQuery", "SPACE_TYPE", "SpaceAction", "Filter", "Query", "fullyQualifiedId", "getSpace", "isSpace", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "meta", "actions", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "LayoutAction", "UpdateDialog", "_tag", "data", "dispatchPromise", "dispatch", "getCapability", "IntentDispatcher", "client", "ClientCapabilities", "Client", "space", "getActiveSpace", "spaces", "default", "chat", "getOrCreateChat", "createIntent", "part", "subject", "ASSISTANT_DIALOG", "options", "state", "blockAlign", "props", "properties", "label", "ns", "icon", "disposition", "position", "keyBinding", "macos", "windows", "getOrElse", "connector", "query", "nodeOption", "isNone", "object", "value", "Obj", "isObject", "getSpace", "db", "Query", "select", "Filter", "ids", "targetOf", "Assistant", "CompanionTo", "source", "rxFromQuery", "fullyQualifiedId", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "PLANK_COMPANION_TYPE", "instanceOf", "Sequence", "SPACE_TYPE", "isSpace", "Template", "templates", "length", "toSorted", "a", "b", "nameA", "name", "nameB", "localeCompare", "template", "objects", "allChats", "Chat", "run", "relatedChats", "sourceOf", "chats", "filter", "includes", "CreateChat", "invariant", "SpaceAction", "AddObject", "target"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/components/TemplateEditor/TemplateEditor.tsx"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { HighlightStyle, LanguageSupport, syntaxHighlighting } from '@codemirror/language';\nimport { styleTags, tags } from '@lezer/highlight';\nimport { handlebarsLanguage } from '@xiechao/codemirror-lang-handlebars';\nimport React from 'react';\n\nimport { type Template } from '@dxos/blueprints';\nimport { invariant } from '@dxos/invariant';\nimport { createDocAccessor } from '@dxos/react-client/echo';\nimport { useThemeContext, useTranslation, type ThemedClassName } from '@dxos/react-ui';\nimport {\n createBasicExtensions,\n createDataExtensions,\n createThemeExtensions,\n useTextEditor,\n} from '@dxos/react-ui-editor';\nimport { mx } from '@dxos/react-ui-theme';\n\nimport { meta } from '../../meta';\n\nhandlebarsLanguage.configure({\n props: [\n styleTags({\n '---': tags.lineComment,\n }),\n ],\n});\n\nexport type TemplateEditorProps = ThemedClassName<{\n template: Template.Template;\n}>;\n\nexport const TemplateEditor = ({ classNames, template }: TemplateEditorProps) => {\n const { t } = useTranslation(meta.id);\n const { themeMode } = useThemeContext();\n const { parentRef } = useTextEditor(() => {\n invariant(template.source.target);\n return {\n initialValue: template.source.target.content,\n extensions: [\n createDataExtensions({\n id: template.id,\n text: createDocAccessor(template.source.target, ['content']),\n }),\n createBasicExtensions({\n bracketMatching: false,\n lineNumbers: true,\n lineWrapping: true,\n monospace: true,\n placeholder: t('template placeholder'),\n }),\n createThemeExtensions({\n themeMode,\n }),\n\n // https://github.com/xiechao/lang-handlebars\n new LanguageSupport(handlebarsLanguage, syntaxHighlighting(handlebarsHighlightStyle)),\n ],\n };\n }, [themeMode, template]);\n\n return <div ref={parentRef} className={mx('h-full', classNames)} />;\n};\n\n/**\n * https://github.com/xiechao/lang-handlebars/blob/direct/src/highlight.js\n */\nexport const handlebarsHighlightStyle = HighlightStyle.define([\n {\n // Braces.\n tag: tags.tagName,\n class: 'text-redText',\n },\n {\n tag: tags.variableName,\n class: 'text-blueText',\n },\n {\n tag: tags.keyword,\n class: 'text-greenText',\n },\n {\n tag: tags.comment,\n class: 'text-subdued',\n },\n]);\n"],
|
|
5
|
-
"mappings": ";;;;;;AAIA,SAASA,gBAAgBC,iBAAiBC,0BAA0B;AACpE,SAASC,WAAWC,YAAY;AAChC,SAASC,0BAA0B;AACnC,OAAOC,WAAW;AAGlB,SAASC,iBAAiB;AAC1B,SAASC,yBAAyB;AAClC,SAASC,iBAAiBC,sBAA4C;AACtE,SACEC,uBACAC,sBACAC,uBACAC,qBACK;AACP,SAASC,UAAU;;AAInBC,mBAAmBC,UAAU;EAC3BC,OAAO;IACLC,UAAU;MACR,OAAOC,KAAKC;IACd,CAAA;;AAEJ,CAAA;AAMO,IAAMC,iBAAiB,CAAC,EAAEC,YAAYC,SAAQ,MAAuB;;;AAC1E,UAAM,EAAEC,EAAC,IAAKC,eAAeC,KAAKC,EAAE;AACpC,UAAM,EAAEC,UAAS,IAAKC,gBAAAA;AACtB,UAAM,EAAEC,UAAS,IAAKC,cAAc,MAAA;AAClCC,gBAAUT,SAASU,OAAOC,QAAM,QAAA;;;;;;;;;AAChC,aAAO;QACLC,cAAcZ,SAASU,OAAOC,OAAOE;QACrCC,YAAY;UACVC,qBAAqB;YACnBX,IAAIJ,SAASI;YACbY,MAAMC,kBAAkBjB,SAASU,OAAOC,QAAQ;cAAC;aAAU;UAC7D,CAAA;UACAO,sBAAsB;YACpBC,iBAAiB;YACjBC,aAAa;YACbC,cAAc;YACdC,WAAW;YACXC,aAAatB,EAAE,sBAAA;UACjB,CAAA;UACAuB,sBAAsB;YACpBnB;UACF,CAAA;;UAGA,IAAIoB,gBAAgBjC,oBAAoBkC,mBAAmBC,wBAAAA,CAAAA;;MAE/D;IACF,GAAG;MAACtB;MAAWL;KAAS;AAExB,WAAO,sBAAA,cAAC4B,OAAAA;MAAIC,KAAKtB;MAAWuB,WAAWC,GAAG,UAAUhC,UAAAA;;;;;AACtD;AAKO,IAAM4B,2BAA2BK,eAAeC,OAAO;EAC5D;;IAEEC,KAAKtC,KAAKuC;IACVC,OAAO;EACT;EACA;IACEF,KAAKtC,KAAKyC;IACVD,OAAO;EACT;EACA;IACEF,KAAKtC,KAAK0C;IACVF,OAAO;EACT;EACA;IACEF,KAAKtC,KAAK2C;IACVH,OAAO;EACT;CACD;",
|
|
6
|
-
"names": ["HighlightStyle", "LanguageSupport", "syntaxHighlighting", "styleTags", "tags", "handlebarsLanguage", "React", "invariant", "createDocAccessor", "useThemeContext", "useTranslation", "createBasicExtensions", "createDataExtensions", "createThemeExtensions", "useTextEditor", "mx", "handlebarsLanguage", "configure", "props", "styleTags", "tags", "lineComment", "TemplateEditor", "classNames", "template", "t", "useTranslation", "meta", "id", "themeMode", "useThemeContext", "parentRef", "useTextEditor", "invariant", "source", "target", "initialValue", "content", "extensions", "createDataExtensions", "text", "createDocAccessor", "createBasicExtensions", "bracketMatching", "lineNumbers", "lineWrapping", "monospace", "placeholder", "createThemeExtensions", "LanguageSupport", "syntaxHighlighting", "handlebarsHighlightStyle", "div", "ref", "className", "mx", "HighlightStyle", "define", "tag", "tagName", "class", "variableName", "keyword", "comment"]
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/types/schema.ts", "../../../src/types/service.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { SpaceSchema, Queue } from '@dxos/client/echo';\nimport { Sequence } from '@dxos/conductor';\nimport { Type } from '@dxos/echo';\nimport { LabelAnnotation } from '@dxos/echo-schema';\nimport { DataType } from '@dxos/schema';\n\nimport { meta } from '../meta';\n\nexport const LLM_PROVIDERS = ['edge', 'ollama', 'lmstudio'] as const;\n\nexport namespace Assistant {\n //\n // Types\n //\n\n export const Chat = Schema.Struct({\n id: Type.ObjectId,\n name: Schema.optional(Schema.String),\n queue: Type.Ref(Queue),\n }).pipe(\n Type.Obj({\n typename: 'dxos.org/type/assistant/Chat',\n version: '0.2.0',\n }),\n LabelAnnotation.set(['name']),\n );\n\n export interface Chat extends Schema.Schema.Type<typeof Chat> {}\n\n export const CompanionTo = Schema.Struct({\n id: Type.ObjectId,\n }).pipe(\n Type.Relation({\n typename: 'dxos.org/relation/assistant/CompanionTo',\n version: '0.1.0',\n source: Chat,\n target: Type.Expando,\n }),\n );\n\n export interface CompanionTo extends Schema.Schema.Type<typeof CompanionTo> {}\n\n //\n // Settings\n //\n\n export const Settings = Schema.mutable(\n Schema.Struct({\n llmProvider: Schema.optional(Schema.Literal(...LLM_PROVIDERS)),\n edgeModel: Schema.optional(Schema.String),\n ollamaModel: Schema.optional(Schema.String),\n lmstudioModel: Schema.optional(Schema.String),\n customPrompts: Schema.optional(Schema.Boolean),\n }),\n );\n\n export type Settings = Schema.Schema.Type<typeof Settings>;\n\n //\n // Actions\n //\n\n export class OnSpaceCreated extends Schema.TaggedClass<OnSpaceCreated>()(`${meta.id}/on-space-created`, {\n input: Schema.Struct({\n space: SpaceSchema,\n rootCollection: DataType.Collection,\n }),\n output: Schema.Void,\n }) {}\n\n export class CreateChat extends Schema.TaggedClass<CreateChat>()(`${meta.id}/action/create-chat`, {\n input: Schema.Struct({\n space: SpaceSchema,\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: Assistant.Chat,\n }),\n }) {}\n\n export class CreateSequence extends Schema.TaggedClass<CreateSequence>()(`${meta.id}/action/create-sequence`, {\n input: Schema.Struct({\n name: Schema.optional(Schema.String),\n }),\n output: Schema.Struct({\n object: Sequence,\n }),\n }) {}\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { ComputeGraph } from '@dxos/conductor';\nimport { Type } from '@dxos/echo';\nimport { TypedObject } from '@dxos/echo-schema';\nimport { FunctionType } from '@dxos/functions';\n\nconst ApiAuthorizationKey = Schema.Struct({\n type: Schema.Literal('api-key'),\n key: Schema.String,\n placement: Schema.Union(\n Schema.Struct({\n type: Schema.Literal('authorization-header'),\n }),\n Schema.Struct({\n type: Schema.Literal('query'),\n name: Schema.String,\n }),\n ),\n});\n\nconst ApiAuthorizationOauth = Schema.Struct({\n type: Schema.Literal('oauth'),\n clientId: Schema.String,\n clientSecret: Schema.String,\n tokenUrl: Schema.String,\n grantType: Schema.String,\n});\n\nexport const ApiAuthorization = Schema.Union(ApiAuthorizationKey, ApiAuthorizationOauth);\nexport type ApiAuthorization = Schema.Schema.Type<typeof ApiAuthorization>;\n\nconst ServiceInterfaceFunction = Schema.Struct({\n kind: Schema.Literal('function'),\n fn: Type.Ref(FunctionType),\n});\n\nconst ServiceInterfaceWorkflow = Schema.Struct({\n kind: Schema.Literal('workflow'),\n workflow: Type.Ref(ComputeGraph),\n});\n\nconst ServiceInterfaceApi = Schema.Struct({\n kind: Schema.Literal('api'),\n\n /**\n * URL to fetch the openapi schema.\n */\n schemaUrl: Schema.optional(Schema.String),\n\n /**\n * Inlined openapi schema.\n */\n schema: Schema.optional(Schema.Any),\n\n /**\n * Authorization configuration if required.\n */\n authorization: Schema.optional(ApiAuthorization),\n});\n\nconst ServiceInterface = Schema.Union(ServiceInterfaceFunction, ServiceInterfaceWorkflow, ServiceInterfaceApi);\nexport type ServiceInterface = Schema.Schema.Type<typeof ServiceInterface>;\n\nexport class ServiceType extends TypedObject({\n typename: 'dxos.org/type/ServiceType',\n version: '0.1.0',\n})({\n serviceId: Schema.String,\n name: Schema.optional(Schema.String),\n description: Schema.optional(Schema.String),\n category: Schema.optional(Schema.String),\n enabled: Schema.optional(Schema.Boolean),\n\n /**\n * Entries exposed: functions, workflows, and APIs.\n */\n interfaces: Schema.optional(Schema.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"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Schema", "SpaceSchema", "Queue", "Sequence", "Type", "LabelAnnotation", "DataType", "LLM_PROVIDERS", "Assistant", "Chat", "Schema", "Struct", "id", "Type", "ObjectId", "name", "optional", "String", "queue", "Ref", "Queue", "pipe", "Obj", "typename", "version", "LabelAnnotation", "set", "CompanionTo", "Relation", "source", "target", "Expando", "Settings", "mutable", "llmProvider", "Literal", "edgeModel", "ollamaModel", "lmstudioModel", "customPrompts", "Boolean", "OnSpaceCreated", "TaggedClass", "meta", "input", "space", "SpaceSchema", "rootCollection", "DataType", "Collection", "output", "Void", "CreateChat", "object", "CreateSequence", "Sequence", "Schema", "ComputeGraph", "Type", "TypedObject", "FunctionType", "ApiAuthorizationKey", "Schema", "Struct", "type", "Literal", "key", "String", "placement", "Union", "name", "ApiAuthorizationOauth", "clientId", "clientSecret", "tokenUrl", "grantType", "ApiAuthorization", "ServiceInterfaceFunction", "kind", "fn", "Type", "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"]
|
|
7
|
-
}
|