@dxos/plugin-assistant 0.8.2 → 0.8.3-main.672df60
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-K6POM23O.mjs → AssistantDialog-UAZSN6GT.mjs} +3 -3
- package/dist/lib/browser/BlueprintEditor-DGV4KJDM.mjs +45 -0
- package/dist/lib/browser/BlueprintEditor-DGV4KJDM.mjs.map +7 -0
- package/dist/lib/browser/{ChatContainer-QTO4LE2C.mjs → ChatContainer-UTN3AO5U.mjs} +3 -3
- package/dist/lib/browser/{app-graph-builder-YH4EGNBC.mjs → app-graph-builder-56OZ5RW4.mjs} +2 -2
- package/dist/lib/browser/{chunk-USJBRB3H.mjs → chunk-6SD7S7W5.mjs} +6 -4
- package/dist/lib/browser/{chunk-USJBRB3H.mjs.map → chunk-6SD7S7W5.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-IHEBFO5O.mjs → chunk-NBSPGIHL.mjs} +5 -4
- package/dist/lib/browser/{chunk-IHEBFO5O.mjs.map → chunk-NBSPGIHL.mjs.map} +3 -3
- package/dist/lib/browser/{chunk-QTW7KVDO.mjs → chunk-Q6XE3O3E.mjs} +36 -12
- package/dist/lib/browser/{chunk-QTW7KVDO.mjs.map → chunk-Q6XE3O3E.mjs.map} +4 -4
- package/dist/lib/browser/index.mjs +15 -8
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/{intent-resolver-63EAHENI.mjs → intent-resolver-GWELYIX2.mjs} +7 -10
- package/dist/lib/browser/intent-resolver-GWELYIX2.mjs.map +7 -0
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/{react-surface-XCV6NR75.mjs → react-surface-DGS34EON.mjs} +23 -10
- package/dist/lib/browser/react-surface-DGS34EON.mjs.map +7 -0
- package/dist/lib/browser/{settings-SHNQ4XXP.mjs → settings-BTFB7IQ6.mjs} +2 -2
- package/dist/lib/browser/types/index.mjs +1 -1
- package/dist/lib/node/{AssistantDialog-FDATKYE5.cjs → AssistantDialog-RTB5Q7FP.cjs} +7 -7
- package/dist/lib/node/BlueprintEditor-43VM3XPO.cjs +72 -0
- package/dist/lib/node/BlueprintEditor-43VM3XPO.cjs.map +7 -0
- package/dist/lib/node/{ChatContainer-5CLHJOIQ.cjs → ChatContainer-P3JL4VZ7.cjs} +7 -7
- package/dist/lib/node/{app-graph-builder-PSHIOW3Q.cjs → app-graph-builder-QLF353LH.cjs} +11 -11
- package/dist/lib/node/{chunk-FLJWJ35M.cjs → chunk-BWL5A3O5.cjs} +12 -9
- package/dist/lib/node/{chunk-FLJWJ35M.cjs.map → chunk-BWL5A3O5.cjs.map} +3 -3
- package/dist/lib/node/{chunk-H4A42LNR.cjs → chunk-PG7YNQ4R.cjs} +45 -21
- package/dist/lib/node/chunk-PG7YNQ4R.cjs.map +7 -0
- package/dist/lib/node/{chunk-RXPA2C2A.cjs → chunk-UNVDZOLA.cjs} +8 -7
- package/dist/lib/node/{chunk-RXPA2C2A.cjs.map → chunk-UNVDZOLA.cjs.map} +3 -3
- package/dist/lib/node/index.cjs +52 -45
- package/dist/lib/node/index.cjs.map +3 -3
- package/dist/lib/node/{intent-resolver-66F7WLW6.cjs → intent-resolver-U7663JU7.cjs} +11 -13
- package/dist/lib/node/intent-resolver-U7663JU7.cjs.map +7 -0
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node/{react-surface-TASAPRPQ.cjs → react-surface-QXZTILW6.cjs} +37 -25
- package/dist/lib/node/react-surface-QXZTILW6.cjs.map +7 -0
- package/dist/lib/node/{settings-ERKLO6IO.cjs → settings-LBJMT6YB.cjs} +6 -6
- package/dist/lib/node/types/index.cjs +14 -14
- package/dist/lib/node/types/index.cjs.map +1 -1
- package/dist/lib/node-esm/{AssistantDialog-PIMYK774.mjs → AssistantDialog-DONAO6SA.mjs} +3 -3
- package/dist/lib/node-esm/BlueprintEditor-CTARB2FO.mjs +47 -0
- package/dist/lib/node-esm/BlueprintEditor-CTARB2FO.mjs.map +7 -0
- package/dist/lib/node-esm/{ChatContainer-QTC5NYE2.mjs → ChatContainer-FVIGCDIG.mjs} +3 -3
- package/dist/lib/node-esm/{app-graph-builder-Z3GMMJMD.mjs → app-graph-builder-5YX5TKKT.mjs} +2 -2
- package/dist/lib/node-esm/{chunk-QU626JMR.mjs → chunk-GJE4WCUJ.mjs} +6 -4
- package/dist/lib/node-esm/{chunk-QU626JMR.mjs.map → chunk-GJE4WCUJ.mjs.map} +3 -3
- package/dist/lib/node-esm/{chunk-SI5LOQEO.mjs → chunk-MNH6E6EB.mjs} +36 -12
- package/dist/lib/node-esm/{chunk-SI5LOQEO.mjs.map → chunk-MNH6E6EB.mjs.map} +4 -4
- package/dist/lib/node-esm/{chunk-ZKBACPIW.mjs → chunk-TQYSF2GS.mjs} +5 -4
- package/dist/lib/node-esm/{chunk-ZKBACPIW.mjs.map → chunk-TQYSF2GS.mjs.map} +3 -3
- package/dist/lib/node-esm/index.mjs +15 -8
- package/dist/lib/node-esm/index.mjs.map +3 -3
- package/dist/lib/node-esm/{intent-resolver-X3PWH7KM.mjs → intent-resolver-N5TM3RTL.mjs} +7 -10
- package/dist/lib/node-esm/intent-resolver-N5TM3RTL.mjs.map +7 -0
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/{react-surface-QMIQCXUM.mjs → react-surface-FTKGQQD2.mjs} +23 -10
- package/dist/lib/node-esm/react-surface-FTKGQQD2.mjs.map +7 -0
- package/dist/lib/node-esm/{settings-IVQRZUCU.mjs → settings-TGCCAH5D.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/intent-resolver.d.ts.map +1 -1
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts +2 -2
- package/dist/types/src/components/BlueprintEditor/BlueprintEditor.d.ts.map +1 -1
- package/dist/types/src/components/BlueprintEditor/index.d.ts +2 -1
- package/dist/types/src/components/BlueprintEditor/index.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/Prompt.stories.d.ts.map +1 -1
- package/dist/types/src/components/Prompt/PromptBar.stories.d.ts.map +1 -1
- package/dist/types/src/components/Thread/ThreadMessage.d.ts +2 -2
- package/dist/types/src/components/Thread/ThreadMessage.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/hooks/useContextProvider.d.ts.map +1 -1
- package/dist/types/src/stories/Prompt.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Query.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Research.stories.d.ts.map +1 -1
- package/dist/types/src/stories/testing.d.ts.map +1 -1
- package/dist/types/src/testing/index.d.ts +1 -1
- package/dist/types/src/testing/index.d.ts.map +1 -1
- package/dist/types/src/testing/test-blueprint.d.ts +14 -0
- package/dist/types/src/testing/test-blueprint.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +11 -5
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/package.json +68 -68
- package/src/AssistantPlugin.tsx +5 -5
- package/src/capabilities/intent-resolver.ts +4 -3
- package/src/capabilities/react-surface.tsx +26 -7
- package/src/components/BlueprintEditor/BlueprintEditor.tsx +3 -4
- package/src/components/BlueprintEditor/index.ts +3 -1
- package/src/components/Prompt/Prompt.stories.tsx +1 -0
- package/src/components/Prompt/PromptBar.stories.tsx +1 -0
- package/src/components/Thread/ThreadMessage.tsx +3 -3
- package/src/components/index.ts +1 -0
- package/src/hooks/useContextProvider.ts +5 -6
- package/src/stories/Prompt.stories.tsx +1 -0
- package/src/stories/Query.stories.tsx +107 -40
- package/src/stories/Research.stories.tsx +1 -0
- package/src/stories/testing.ts +1 -5
- package/src/testing/index.ts +1 -1
- package/src/testing/{blueprint.ts → test-blueprint.ts} +21 -18
- package/src/translations.ts +5 -0
- package/src/types/types.ts +3 -3
- package/dist/lib/browser/intent-resolver-63EAHENI.mjs.map +0 -7
- package/dist/lib/browser/react-surface-XCV6NR75.mjs.map +0 -7
- package/dist/lib/node/chunk-H4A42LNR.cjs.map +0 -7
- package/dist/lib/node/intent-resolver-66F7WLW6.cjs.map +0 -7
- package/dist/lib/node/react-surface-TASAPRPQ.cjs.map +0 -7
- package/dist/lib/node-esm/intent-resolver-X3PWH7KM.mjs.map +0 -7
- package/dist/lib/node-esm/react-surface-QMIQCXUM.mjs.map +0 -7
- package/dist/types/src/testing/blueprint.d.ts +0 -7
- package/dist/types/src/testing/blueprint.d.ts.map +0 -1
- /package/dist/lib/browser/{AssistantDialog-K6POM23O.mjs.map → AssistantDialog-UAZSN6GT.mjs.map} +0 -0
- /package/dist/lib/browser/{ChatContainer-QTO4LE2C.mjs.map → ChatContainer-UTN3AO5U.mjs.map} +0 -0
- /package/dist/lib/browser/{app-graph-builder-YH4EGNBC.mjs.map → app-graph-builder-56OZ5RW4.mjs.map} +0 -0
- /package/dist/lib/browser/{settings-SHNQ4XXP.mjs.map → settings-BTFB7IQ6.mjs.map} +0 -0
- /package/dist/lib/node/{AssistantDialog-FDATKYE5.cjs.map → AssistantDialog-RTB5Q7FP.cjs.map} +0 -0
- /package/dist/lib/node/{ChatContainer-5CLHJOIQ.cjs.map → ChatContainer-P3JL4VZ7.cjs.map} +0 -0
- /package/dist/lib/node/{app-graph-builder-PSHIOW3Q.cjs.map → app-graph-builder-QLF353LH.cjs.map} +0 -0
- /package/dist/lib/node/{settings-ERKLO6IO.cjs.map → settings-LBJMT6YB.cjs.map} +0 -0
- /package/dist/lib/node-esm/{AssistantDialog-PIMYK774.mjs.map → AssistantDialog-DONAO6SA.mjs.map} +0 -0
- /package/dist/lib/node-esm/{ChatContainer-QTC5NYE2.mjs.map → ChatContainer-FVIGCDIG.mjs.map} +0 -0
- /package/dist/lib/node-esm/{app-graph-builder-Z3GMMJMD.mjs.map → app-graph-builder-5YX5TKKT.mjs.map} +0 -0
- /package/dist/lib/node-esm/{settings-IVQRZUCU.mjs.map → settings-TGCCAH5D.mjs.map} +0 -0
|
@@ -6,7 +6,7 @@ import React, { type FC, type PropsWithChildren } from 'react';
|
|
|
6
6
|
|
|
7
7
|
import { type MessageContentBlock, type Message, type Tool } from '@dxos/ai';
|
|
8
8
|
import { Surface } from '@dxos/app-framework';
|
|
9
|
-
import type
|
|
9
|
+
import { type Obj } from '@dxos/echo';
|
|
10
10
|
import { invariant } from '@dxos/invariant';
|
|
11
11
|
import { type Space } from '@dxos/react-client/echo';
|
|
12
12
|
import { Button, Icon, IconButton, type ThemedClassName } from '@dxos/react-ui';
|
|
@@ -48,7 +48,7 @@ export type ThreadMessageProps = ThemedClassName<{
|
|
|
48
48
|
tools?: Tool[];
|
|
49
49
|
onPrompt?: (text: string) => void;
|
|
50
50
|
onDelete?: (id: string) => void;
|
|
51
|
-
onAddToGraph?: (object:
|
|
51
|
+
onAddToGraph?: (object: Obj.Any) => void;
|
|
52
52
|
}>;
|
|
53
53
|
|
|
54
54
|
export const ThreadMessage: FC<ThreadMessageProps> = ({
|
|
@@ -94,7 +94,7 @@ type BlockComponent = FC<{
|
|
|
94
94
|
space?: Space;
|
|
95
95
|
block: MessageContentBlock;
|
|
96
96
|
onPrompt?: (text: string) => void;
|
|
97
|
-
onAddToGraph?: (object:
|
|
97
|
+
onAddToGraph?: (object: Obj.Any) => void;
|
|
98
98
|
}>;
|
|
99
99
|
|
|
100
100
|
const components: Record<string, BlockComponent> = {
|
package/src/components/index.ts
CHANGED
|
@@ -16,5 +16,6 @@ export * from './Toolbox';
|
|
|
16
16
|
// Repro: open assistant dialog then close.
|
|
17
17
|
// https://github.com/microsoft/fluentui/issues/34020
|
|
18
18
|
export const AssistantDialog = lazy(() => import('./AssistantDialog'));
|
|
19
|
+
export const BlueprintEditor = lazy(() => import('./BlueprintEditor'));
|
|
19
20
|
export const ChatContainer = lazy(() => import('./ChatContainer'));
|
|
20
21
|
export const TemplateContainer = lazy(() => import('./TemplateContainer'));
|
|
@@ -2,13 +2,12 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import type { Schema } from 'effect';
|
|
6
5
|
import { useMemo } from 'react';
|
|
7
6
|
|
|
8
7
|
import { Capabilities, useCapabilities } from '@dxos/app-framework';
|
|
9
8
|
import { Filter, type Space } from '@dxos/client/echo';
|
|
10
|
-
import { Obj } from '@dxos/echo';
|
|
11
|
-
import {
|
|
9
|
+
import { Obj, type Type } from '@dxos/echo';
|
|
10
|
+
import { getObjectDXN, getLabel } from '@dxos/echo-schema';
|
|
12
11
|
import { log } from '@dxos/log';
|
|
13
12
|
|
|
14
13
|
export type ContextProvider = {
|
|
@@ -30,7 +29,7 @@ export const useContextProvider = (space?: Space): ContextProvider | undefined =
|
|
|
30
29
|
query: async ({ query }) => {
|
|
31
30
|
const artifactSchemas = artifactDefinitions.map((artifact) => artifact.schema);
|
|
32
31
|
const { objects } = await space.db
|
|
33
|
-
.query(Filter.or(...artifactSchemas.map((schema) => Filter.type(schema as
|
|
32
|
+
.query(Filter.or(...artifactSchemas.map((schema) => Filter.type(schema as Type.Schema))))
|
|
34
33
|
.run();
|
|
35
34
|
return (
|
|
36
35
|
objects
|
|
@@ -40,9 +39,9 @@ export const useContextProvider = (space?: Space): ContextProvider | undefined =
|
|
|
40
39
|
})
|
|
41
40
|
.filter((object) => stringMatch(query, getLabel(Obj.getSchema(object)!, object) ?? ''))
|
|
42
41
|
// TODO(dmaretskyi): `Type.getDXN` (at the point of writing) didn't work here as it was schema-only.
|
|
43
|
-
.filter((object) => !!
|
|
42
|
+
.filter((object) => !!getObjectDXN(object))
|
|
44
43
|
.map((object) => ({
|
|
45
|
-
uri:
|
|
44
|
+
uri: getObjectDXN(object as any)!.toString(),
|
|
46
45
|
label: getLabel(Obj.getSchema(object)!, object) ?? '',
|
|
47
46
|
}))
|
|
48
47
|
);
|
|
@@ -5,19 +5,21 @@
|
|
|
5
5
|
import '@dxos-theme';
|
|
6
6
|
|
|
7
7
|
import { type Meta, type StoryObj } from '@storybook/react';
|
|
8
|
-
import { Schema } from 'effect';
|
|
9
|
-
import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
8
|
+
import { Match, Schema } from 'effect';
|
|
9
|
+
import React, { useCallback, useEffect, useMemo, useRef, useState, type FC } from 'react';
|
|
10
10
|
|
|
11
11
|
import { AIServiceEdgeClient, type AIServiceEdgeClientOptions } from '@dxos/ai';
|
|
12
12
|
import { SpyAIService } from '@dxos/ai/testing';
|
|
13
13
|
import { Events } from '@dxos/app-framework';
|
|
14
14
|
import { withPluginManager } from '@dxos/app-framework/testing';
|
|
15
15
|
import { localServiceEndpoints, remoteServiceEndpoints } from '@dxos/artifact-testing';
|
|
16
|
-
import { BlueprintParser,
|
|
16
|
+
import { BlueprintMachine, BlueprintParser, Logger, setConsolePrinter, setLogger } from '@dxos/assistant';
|
|
17
|
+
import { combine } from '@dxos/async';
|
|
17
18
|
import { Filter, Queue, type Space } from '@dxos/client/echo';
|
|
18
|
-
import { Type } from '@dxos/echo';
|
|
19
|
-
import {
|
|
19
|
+
import { type Obj, Type } from '@dxos/echo';
|
|
20
|
+
import { Ref, create, getLabelForObject, getTypename, type AnyEchoObject } from '@dxos/echo-schema';
|
|
20
21
|
import { SelectionModel } from '@dxos/graph';
|
|
22
|
+
import { DXN } from '@dxos/keys';
|
|
21
23
|
import { log } from '@dxos/log';
|
|
22
24
|
import { D3ForceGraph, type D3ForceGraphProps } from '@dxos/plugin-explorer';
|
|
23
25
|
import { faker } from '@dxos/random';
|
|
@@ -34,16 +36,16 @@ import {
|
|
|
34
36
|
import { List } from '@dxos/react-ui-list';
|
|
35
37
|
import { JsonFilter } from '@dxos/react-ui-syntax-highlighter';
|
|
36
38
|
import { getHashColor, mx } from '@dxos/react-ui-theme';
|
|
37
|
-
import { DataType, SpaceGraphModel } from '@dxos/schema';
|
|
39
|
+
import { DataType, DataTypes, SpaceGraphModel } from '@dxos/schema';
|
|
38
40
|
import { createObjectFactory, type TypeSpec, type ValueGenerator } from '@dxos/schema/testing';
|
|
39
41
|
import { withLayout, withTheme } from '@dxos/storybook-utils';
|
|
40
42
|
|
|
41
43
|
import { addTestData } from './test-data';
|
|
42
44
|
import { testPlugins } from './testing';
|
|
43
|
-
import { AmbientDialog, PromptBar, type
|
|
45
|
+
import { AmbientDialog, PromptBar, type PromptBarProps, type PromptController } from '../components';
|
|
44
46
|
import { ASSISTANT_PLUGIN } from '../meta';
|
|
45
|
-
import { createFilter, type Expression
|
|
46
|
-
import { RESEARCH_BLUEPRINT,
|
|
47
|
+
import { QueryParser, createFilter, type Expression } from '../parser';
|
|
48
|
+
import { RESEARCH_BLUEPRINT, createRegistry } from '../testing';
|
|
47
49
|
import translations from '../translations';
|
|
48
50
|
|
|
49
51
|
faker.seed(1);
|
|
@@ -63,6 +65,18 @@ const aiConfig: AIServiceEdgeClientOptions = {
|
|
|
63
65
|
},
|
|
64
66
|
};
|
|
65
67
|
|
|
68
|
+
/**
|
|
69
|
+
* Container for a set of ephemeral research results.
|
|
70
|
+
*/
|
|
71
|
+
const ResearchGraph = Schema.Struct({
|
|
72
|
+
queue: Ref(Queue),
|
|
73
|
+
}).pipe(
|
|
74
|
+
Type.Obj({
|
|
75
|
+
typename: 'dxos.org/type/ResearchGraph',
|
|
76
|
+
version: '0.1.0',
|
|
77
|
+
}),
|
|
78
|
+
);
|
|
79
|
+
|
|
66
80
|
type Mode = 'graph' | 'list';
|
|
67
81
|
|
|
68
82
|
type StoryProps = { mode?: Mode; spec?: TypeSpec[] } & D3ForceGraphProps;
|
|
@@ -158,17 +172,16 @@ const DefaultStory = ({ mode, spec, ...props }: StoryProps) => {
|
|
|
158
172
|
//
|
|
159
173
|
|
|
160
174
|
const aiClient = useMemo(() => new SpyAIService(new AIServiceEdgeClient(aiConfig)), []);
|
|
175
|
+
const registry = useMemo(
|
|
176
|
+
() => space && researchGraph && createRegistry(space, researchGraph.queue.dxn),
|
|
177
|
+
[space, researchGraph?.queue.dxn],
|
|
178
|
+
);
|
|
161
179
|
|
|
162
180
|
const researchQueue = useQueue(researchGraph?.queue.dxn, { pollInterval: 1_000 });
|
|
163
181
|
|
|
164
|
-
const researchBlueprint = useMemo(() =>
|
|
165
|
-
if (!space || !researchGraph) {
|
|
166
|
-
return undefined;
|
|
167
|
-
}
|
|
182
|
+
const researchBlueprint = useMemo(() => BlueprintParser.create().parse(RESEARCH_BLUEPRINT), []);
|
|
168
183
|
|
|
169
|
-
|
|
170
|
-
return BlueprintParser.create(tools).parse(RESEARCH_BLUEPRINT);
|
|
171
|
-
}, [space, researchGraph?.queue.dxn]);
|
|
184
|
+
const logger = useMemo(() => new Logger(), []);
|
|
172
185
|
|
|
173
186
|
//
|
|
174
187
|
// Handlers
|
|
@@ -179,17 +192,27 @@ const DefaultStory = ({ mode, spec, ...props }: StoryProps) => {
|
|
|
179
192
|
}, [model]);
|
|
180
193
|
|
|
181
194
|
const handleResearch = useCallback(async () => {
|
|
182
|
-
if (!space || !researchBlueprint) {
|
|
195
|
+
if (!space || !registry || !researchBlueprint) {
|
|
183
196
|
return;
|
|
184
197
|
}
|
|
185
198
|
|
|
186
199
|
const selected = selection.selected.value;
|
|
187
200
|
log.info('starting research...', { selected });
|
|
188
|
-
const
|
|
189
|
-
|
|
190
|
-
|
|
201
|
+
const resolver = space.db.graph.createRefResolver({
|
|
202
|
+
context: {
|
|
203
|
+
space: space.db.spaceId,
|
|
204
|
+
queue: researchGraph?.queue.dxn,
|
|
205
|
+
},
|
|
206
|
+
});
|
|
207
|
+
const objects = await Promise.all(selected.map((id) => resolver.resolve(DXN.fromLocalObjectId(id))));
|
|
208
|
+
const machine = new BlueprintMachine(registry, researchBlueprint);
|
|
209
|
+
const cleanup = combine(setConsolePrinter(machine, true), setLogger(machine, logger));
|
|
210
|
+
|
|
211
|
+
log.info('starting research...', { selected });
|
|
191
212
|
await machine.runToCompletion({ aiService: aiClient, input: objects });
|
|
192
|
-
|
|
213
|
+
|
|
214
|
+
cleanup();
|
|
215
|
+
}, [space, aiClient, registry, researchBlueprint, selection]);
|
|
193
216
|
|
|
194
217
|
const handleGenerate = useCallback(async () => {
|
|
195
218
|
if (!space) {
|
|
@@ -202,9 +225,6 @@ const DefaultStory = ({ mode, spec, ...props }: StoryProps) => {
|
|
|
202
225
|
} else {
|
|
203
226
|
await addTestData(space);
|
|
204
227
|
}
|
|
205
|
-
|
|
206
|
-
// TODO(burdon): BUG: objects are not persisted unless this is called.
|
|
207
|
-
await space.db.flush({ indexes: true });
|
|
208
228
|
}, [space, generator, spec]);
|
|
209
229
|
|
|
210
230
|
const handleReset = useCallback(
|
|
@@ -262,6 +282,8 @@ const DefaultStory = ({ mode, spec, ...props }: StoryProps) => {
|
|
|
262
282
|
|
|
263
283
|
const extensions = useMemo(() => [typeahead({ onComplete: handleMatch })], [handleMatch]);
|
|
264
284
|
|
|
285
|
+
const { state: flushState, handleFlush } = useFlush(space);
|
|
286
|
+
|
|
265
287
|
return (
|
|
266
288
|
<div className='grow grid overflow-hidden'>
|
|
267
289
|
<div className={mx('grow grid overflow-hidden', !mode && 'grid-cols-[1fr_30rem]')}>
|
|
@@ -270,7 +292,7 @@ const DefaultStory = ({ mode, spec, ...props }: StoryProps) => {
|
|
|
270
292
|
)}
|
|
271
293
|
|
|
272
294
|
{showList && (
|
|
273
|
-
<div className='grow grid grid-rows-[min-
|
|
295
|
+
<div className='grow grid grid-rows-[min-content_1fr_1fr_1fr] overflow-hidden divide-y divide-separator'>
|
|
274
296
|
<Toolbar.Root>
|
|
275
297
|
<IconButton icon='ph--arrow-clockwise--regular' iconOnly label='refresh' onClick={handleRefresh} />
|
|
276
298
|
<IconButton icon='ph--sparkle--regular' iconOnly label='research' onClick={handleResearch} />
|
|
@@ -281,13 +303,29 @@ const DefaultStory = ({ mode, spec, ...props }: StoryProps) => {
|
|
|
281
303
|
label='reset'
|
|
282
304
|
onClick={(event) => handleReset(event.shiftKey)}
|
|
283
305
|
/>
|
|
306
|
+
<IconButton
|
|
307
|
+
disabled={flushState === 'flushing'}
|
|
308
|
+
icon={Match.value(flushState).pipe(
|
|
309
|
+
Match.when('idle', () => 'ph--floppy-disk--regular'),
|
|
310
|
+
Match.when('flushing', () => 'ph--spinner--regular'),
|
|
311
|
+
Match.when('flushed', () => 'ph--check--regular'),
|
|
312
|
+
Match.exhaustive,
|
|
313
|
+
)}
|
|
314
|
+
iconOnly
|
|
315
|
+
label='flush'
|
|
316
|
+
onClick={handleFlush}
|
|
317
|
+
/>
|
|
284
318
|
</Toolbar.Root>
|
|
285
319
|
<ItemList items={objects} />
|
|
320
|
+
<Log logger={logger} />
|
|
286
321
|
<JsonFilter
|
|
287
322
|
data={{
|
|
288
323
|
space: client.spaces.get().length,
|
|
289
324
|
db: space?.db.toJSON(),
|
|
290
|
-
queue:
|
|
325
|
+
queue: {
|
|
326
|
+
dxn: researchQueue?.dxn.toString(),
|
|
327
|
+
objects: researchQueue?.objects.length,
|
|
328
|
+
},
|
|
291
329
|
model: model?.toJSON(),
|
|
292
330
|
selection: selection.toJSON(),
|
|
293
331
|
ast,
|
|
@@ -340,20 +378,8 @@ const createMatcher =
|
|
|
340
378
|
}
|
|
341
379
|
};
|
|
342
380
|
|
|
343
|
-
/**
|
|
344
|
-
* Container for a set of ephemeral research results.
|
|
345
|
-
*/
|
|
346
|
-
const ResearchGraph = Schema.Struct({
|
|
347
|
-
queue: Ref(Queue),
|
|
348
|
-
}).pipe(
|
|
349
|
-
Type.Obj({
|
|
350
|
-
typename: 'dxos.org/type/ResearchGraph',
|
|
351
|
-
version: '0.1.0',
|
|
352
|
-
}),
|
|
353
|
-
);
|
|
354
|
-
|
|
355
381
|
// TODO(burdon): Replace with card list.
|
|
356
|
-
const ItemList = <T extends
|
|
382
|
+
const ItemList = <T extends Obj.Any>({ items = [] }: { items?: T[] }) => {
|
|
357
383
|
return (
|
|
358
384
|
<List.Root<T> items={items}>
|
|
359
385
|
{({ items }) => (
|
|
@@ -378,6 +404,46 @@ const ItemList = <T extends AnyEchoObject>({ items = [] }: { items?: T[] }) => {
|
|
|
378
404
|
);
|
|
379
405
|
};
|
|
380
406
|
|
|
407
|
+
const useFlush = (space?: Space) => {
|
|
408
|
+
const [state, setState] = useState<'idle' | 'flushing' | 'flushed'>('idle');
|
|
409
|
+
const resetTimer = useRef<NodeJS.Timeout | null>(null);
|
|
410
|
+
|
|
411
|
+
const handleFlush = useCallback(() => {
|
|
412
|
+
if (!space) {
|
|
413
|
+
return;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
queueMicrotask(async () => {
|
|
417
|
+
if (resetTimer.current) {
|
|
418
|
+
clearTimeout(resetTimer.current);
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
setState('flushing');
|
|
422
|
+
await space.db.flush();
|
|
423
|
+
setState('flushed');
|
|
424
|
+
|
|
425
|
+
resetTimer.current = setTimeout(() => {
|
|
426
|
+
setState('idle');
|
|
427
|
+
resetTimer.current = null;
|
|
428
|
+
}, 1_000);
|
|
429
|
+
});
|
|
430
|
+
}, [space]);
|
|
431
|
+
|
|
432
|
+
return { state, handleFlush };
|
|
433
|
+
};
|
|
434
|
+
|
|
435
|
+
const Log: FC<{ logger: Logger }> = ({ logger }) => {
|
|
436
|
+
return (
|
|
437
|
+
<div className='grow flex flex-col p-1 overflow-y-auto text-sm'>
|
|
438
|
+
{logger.messages.value.map((message, index) => (
|
|
439
|
+
<div key={index} className='text-subdued'>
|
|
440
|
+
{message}
|
|
441
|
+
</div>
|
|
442
|
+
))}
|
|
443
|
+
</div>
|
|
444
|
+
);
|
|
445
|
+
};
|
|
446
|
+
|
|
381
447
|
const meta: Meta<typeof DefaultStory> = {
|
|
382
448
|
title: 'plugins/plugin-assistant/Query',
|
|
383
449
|
render: DefaultStory,
|
|
@@ -385,7 +451,7 @@ const meta: Meta<typeof DefaultStory> = {
|
|
|
385
451
|
withPluginManager({
|
|
386
452
|
fireEvents: [Events.SetupArtifactDefinition],
|
|
387
453
|
plugins: testPlugins({
|
|
388
|
-
types: [ResearchGraph],
|
|
454
|
+
types: [...DataTypes, ResearchGraph],
|
|
389
455
|
config: {
|
|
390
456
|
runtime: {
|
|
391
457
|
client: {
|
|
@@ -403,6 +469,7 @@ const meta: Meta<typeof DefaultStory> = {
|
|
|
403
469
|
],
|
|
404
470
|
parameters: {
|
|
405
471
|
translations,
|
|
472
|
+
controls: { disable: true },
|
|
406
473
|
},
|
|
407
474
|
};
|
|
408
475
|
|
package/src/stories/testing.ts
CHANGED
|
@@ -20,11 +20,7 @@ import { type IndexConfig } from '@dxos/protocols/proto/dxos/echo/indexing';
|
|
|
20
20
|
import { Config } from '@dxos/react-client';
|
|
21
21
|
import { DataTypes } from '@dxos/schema';
|
|
22
22
|
|
|
23
|
-
type TestPluginsOptions = {
|
|
24
|
-
config?: ConfigProto;
|
|
25
|
-
types?: Schema.Schema.AnyNoContext[];
|
|
26
|
-
indexConfig?: IndexConfig;
|
|
27
|
-
};
|
|
23
|
+
type TestPluginsOptions = { config?: ConfigProto; types?: Schema.Schema.AnyNoContext[]; indexConfig?: IndexConfig };
|
|
28
24
|
|
|
29
25
|
export const testPlugins = ({ config, types = DataTypes, indexConfig }: TestPluginsOptions = {}) => [
|
|
30
26
|
ClientPlugin({
|
package/src/testing/index.ts
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
import {
|
|
5
|
+
import { ToolRegistry } from '@dxos/ai';
|
|
6
6
|
import { EXA_API_KEY } from '@dxos/ai/testing';
|
|
7
|
-
import {
|
|
7
|
+
import { BlueprintParser, createExaTool, createGraphWriterTool, createLocalSearchTool } from '@dxos/assistant';
|
|
8
8
|
import { type Space } from '@dxos/client/echo';
|
|
9
9
|
import { type DXN } from '@dxos/keys';
|
|
10
10
|
import { DataTypes } from '@dxos/schema';
|
|
@@ -12,23 +12,26 @@ import { isNonNullable } from '@dxos/util';
|
|
|
12
12
|
|
|
13
13
|
// TODO(dmaretskyi): make db available through services (same as function executor).
|
|
14
14
|
// TODO(burdon): Can tools implement "aspects" so that variants can be used rather than an explicit reference?
|
|
15
|
-
export const
|
|
16
|
-
return
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
15
|
+
export const createRegistry = (space: Space, queueDxn?: DXN): ToolRegistry => {
|
|
16
|
+
return new ToolRegistry(
|
|
17
|
+
[
|
|
18
|
+
createExaTool({ apiKey: EXA_API_KEY }),
|
|
19
|
+
createLocalSearchTool(space.db, queueDxn && space.queues.get(queueDxn)),
|
|
20
|
+
queueDxn &&
|
|
21
|
+
createGraphWriterTool({
|
|
22
|
+
db: space.db,
|
|
23
|
+
queue: space.queues.get(queueDxn),
|
|
24
|
+
schemaTypes: DataTypes,
|
|
25
|
+
onDone: async (objects) => {
|
|
26
|
+
const queue = space.queues.get(queueDxn);
|
|
27
|
+
queue.append(objects);
|
|
28
|
+
},
|
|
29
|
+
}),
|
|
30
|
+
].filter(isNonNullable),
|
|
31
|
+
);
|
|
29
32
|
};
|
|
30
33
|
|
|
31
|
-
export const RESEARCH_BLUEPRINT
|
|
34
|
+
export const RESEARCH_BLUEPRINT = BlueprintParser.create().parse({
|
|
32
35
|
steps: [
|
|
33
36
|
{
|
|
34
37
|
instructions: 'Research information and entities related to the selected objects.',
|
|
@@ -44,4 +47,4 @@ export const RESEARCH_BLUEPRINT: BlueprintParser.DSL = {
|
|
|
44
47
|
tools: ['search/local_search', 'graph/writer'],
|
|
45
48
|
},
|
|
46
49
|
],
|
|
47
|
-
};
|
|
50
|
+
});
|
package/src/translations.ts
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
// Copyright 2023 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
+
import { Blueprint } from '@dxos/assistant';
|
|
5
6
|
import { getSchemaTypename } from '@dxos/echo-schema';
|
|
6
7
|
|
|
7
8
|
import { ASSISTANT_PLUGIN } from './meta';
|
|
@@ -14,6 +15,10 @@ export default [
|
|
|
14
15
|
'typename label': 'Assistant',
|
|
15
16
|
'object name placeholder': 'AI Chat',
|
|
16
17
|
},
|
|
18
|
+
[getSchemaTypename(Blueprint)!]: {
|
|
19
|
+
'typename label': 'Blueprint',
|
|
20
|
+
'object name placeholder': 'New blueprint',
|
|
21
|
+
},
|
|
17
22
|
[TemplateType.typename]: {
|
|
18
23
|
'typename label': 'Template',
|
|
19
24
|
'object name placeholder': 'New template',
|
package/src/types/types.ts
CHANGED
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
import { Schema } from 'effect';
|
|
6
6
|
|
|
7
|
+
import { Blueprint } from '@dxos/assistant';
|
|
7
8
|
import { SpaceSchema } from '@dxos/react-client/echo';
|
|
8
9
|
|
|
9
10
|
import { AIChatType } from './chat';
|
|
10
|
-
import { TemplateType } from './template';
|
|
11
11
|
import { ASSISTANT_PLUGIN } from '../meta';
|
|
12
12
|
|
|
13
13
|
export namespace AssistantAction {
|
|
@@ -23,12 +23,12 @@ export namespace AssistantAction {
|
|
|
23
23
|
}),
|
|
24
24
|
}) {}
|
|
25
25
|
|
|
26
|
-
export class
|
|
26
|
+
export class CreateBlueprint extends Schema.TaggedClass<CreateBlueprint>()(`${ASSISTANT_ACTION}/create-blueprint`, {
|
|
27
27
|
input: Schema.Struct({
|
|
28
28
|
name: Schema.optional(Schema.String),
|
|
29
29
|
}),
|
|
30
30
|
output: Schema.Struct({
|
|
31
|
-
object:
|
|
31
|
+
object: Blueprint,
|
|
32
32
|
}),
|
|
33
33
|
}) {}
|
|
34
34
|
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../../src/capabilities/intent-resolver.ts"],
|
|
4
|
-
"sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { Capabilities, contributes, createResolver } from '@dxos/app-framework';\nimport { createQueueDxn } from '@dxos/echo-schema';\nimport { live, refFromDXN } from '@dxos/live-object';\n\nimport { AssistantAction, AIChatType, TemplateType } from '../types';\n\nexport default () => [\n contributes(\n Capabilities.IntentResolver,\n createResolver({\n intent: AssistantAction.CreateChat,\n resolve: ({ space, name }) => ({\n data: {\n object: live(AIChatType, {\n name,\n queue: refFromDXN(createQueueDxn(space.id)),\n }),\n },\n }),\n }),\n ),\n contributes(\n Capabilities.IntentResolver,\n createResolver({\n intent: AssistantAction.CreateTemplate,\n resolve: ({ name }) => ({\n data: {\n object: live(TemplateType, { name, kind: { include: 'manual' }, source: '{{! Template }}' }),\n },\n }),\n }),\n ),\n];\n"],
|
|
5
|
-
"mappings": ";;;;;;;;AAIA,SAASA,cAAcC,aAAaC,sBAAsB;AAC1D,SAASC,sBAAsB;AAC/B,SAASC,MAAMC,kBAAkB;AAIjC,IAAA,0BAAe,MAAM;EACnBC,YACEC,aAAaC,gBACbC,eAAe;IACbC,QAAQC,gBAAgBC;IACxBC,SAAS,CAAC,EAAEC,OAAOC,KAAI,OAAQ;MAC7BC,MAAM;QACJC,QAAQC,KAAKC,YAAY;UACvBJ;UACAK,OAAOC,WAAWC,eAAeR,MAAMS,EAAE,CAAA;QAC3C,CAAA;MACF;IACF;EACF,CAAA,CAAA;EAEFjB,YACEC,aAAaC,gBACbC,eAAe;IACbC,QAAQC,gBAAgBa;IACxBX,SAAS,CAAC,EAAEE,KAAI,OAAQ;MACtBC,MAAM;QACJC,QAAQC,KAAKO,cAAc;UAAEV;UAAMW,MAAM;YAAEC,SAAS;UAAS;UAAGC,QAAQ;QAAkB,CAAA;MAC5F;IACF;EACF,CAAA,CAAA;;",
|
|
6
|
-
"names": ["Capabilities", "contributes", "createResolver", "createQueueDxn", "live", "refFromDXN", "contributes", "Capabilities", "IntentResolver", "createResolver", "intent", "AssistantAction", "CreateChat", "resolve", "space", "name", "data", "object", "live", "AIChatType", "queue", "refFromDXN", "createQueueDxn", "id", "CreateTemplate", "TemplateType", "kind", "include", "source"]
|
|
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 { Effect } from 'effect';\nimport React, { useEffect, useMemo } from 'react';\n\nimport { Capabilities, contributes, createIntent, createSurface, useIntentDispatcher } from '@dxos/app-framework';\nimport { Obj } from '@dxos/echo';\nimport { Filter, isInstanceOf, Query } from '@dxos/echo-schema';\nimport { SettingsStore } from '@dxos/local-storage';\nimport { SpaceAction } from '@dxos/plugin-space/types';\nimport {\n type AnyLiveObject,\n fullyQualifiedId,\n getSpace,\n getTypename,\n isEchoObject,\n type SpaceId,\n} from '@dxos/react-client/echo';\n\nimport { AssistantDialog, AssistantSettings, ChatContainer, PromptSettings, TemplateContainer } from '../components';\nimport { ASSISTANT_PLUGIN, ASSISTANT_DIALOG } from '../meta';\nimport { AIChatType, AssistantAction, type AssistantSettingsProps, CompanionTo, TemplateType } from '../types';\n\nexport default () =>\n contributes(Capabilities.ReactSurface, [\n createSurface({\n id: `${ASSISTANT_PLUGIN}/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; variant: undefined } =>\n Obj.instanceOf(AIChatType, data.subject) && data.variant !== 'assistant-chat',\n component: ({ data, role }) => <ChatContainer role={role} chat={data.subject} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/object-chat`,\n role: 'article',\n filter: (data): data is { companionTo: AnyLiveObject<any>; subject: AIChatType | 'assistant-chat' } =>\n isEchoObject(data.companionTo) && (isInstanceOf(AIChatType, data.subject) || data.subject === 'assistant-chat'),\n component: ({ data, role }) => {\n const { dispatch } = useIntentDispatcher();\n const associatedArtifact = useMemo(\n () => ({\n id: fullyQualifiedId(data.companionTo),\n typename: getTypename(data.companionTo) ?? 'unknown',\n spaceId: (getSpace(data.companionTo)?.id ?? 'unknown') as SpaceId,\n }),\n [data.companionTo],\n );\n\n // TODO(wittjosiah): Factor out to container.\n useEffect(() => {\n const timeout = setTimeout(async () => {\n const space = getSpace(data.companionTo);\n if (space && data.subject === 'assistant-chat') {\n const result = await space.db\n .query(Query.select(Filter.ids(data.companionTo.id)).targetOf(CompanionTo).source())\n .run();\n if (result.objects.length > 0) {\n return;\n }\n\n const program = Effect.gen(function* () {\n const { object } = yield* dispatch(createIntent(AssistantAction.CreateChat, { space }));\n yield* dispatch(createIntent(SpaceAction.AddObject, { object, target: space, hidden: true }));\n yield* dispatch(\n createIntent(SpaceAction.AddRelation, {\n space,\n schema: CompanionTo,\n source: object,\n target: data.companionTo,\n }),\n );\n });\n void Effect.runPromise(program);\n }\n });\n\n return () => clearTimeout(timeout);\n }, [data.subject]);\n\n if (data.subject === 'assistant-chat') {\n return null;\n }\n\n return <ChatContainer role={role} chat={data.subject} associatedArtifact={associatedArtifact} />;\n },\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/template`,\n role: 'article',\n filter: (data): data is { subject: TemplateType } => Obj.instanceOf(TemplateType, data.subject),\n component: ({ data, role }) => <TemplateContainer role={role} template={data.subject} />,\n }),\n createSurface({\n id: `${ASSISTANT_PLUGIN}/prompt-settings`,\n role: 'object-settings',\n filter: (data): data is { subject: TemplateType } => Obj.instanceOf(TemplateType, data.subject),\n component: ({ data }) => <PromptSettings template={data.subject} />,\n }),\n ]);\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["Effect", "React", "useEffect", "useMemo", "Capabilities", "contributes", "createIntent", "createSurface", "useIntentDispatcher", "Obj", "Filter", "isInstanceOf", "Query", "SettingsStore", "SpaceAction", "fullyQualifiedId", "getSpace", "getTypename", "isEchoObject", "contributes", "Capabilities", "ReactSurface", "createSurface", "id", "ASSISTANT_PLUGIN", "role", "filter", "data", "subject", "SettingsStore", "prefix", "component", "AssistantSettings", "settings", "value", "ASSISTANT_DIALOG", "AssistantDialog", "props", "Obj", "instanceOf", "AIChatType", "variant", "ChatContainer", "chat", "isEchoObject", "companionTo", "isInstanceOf", "dispatch", "useIntentDispatcher", "associatedArtifact", "useMemo", "fullyQualifiedId", "typename", "getTypename", "spaceId", "getSpace", "useEffect", "timeout", "setTimeout", "space", "result", "db", "query", "Query", "select", "Filter", "ids", "targetOf", "CompanionTo", "source", "run", "objects", "length", "program", "Effect", "gen", "object", "createIntent", "AssistantAction", "CreateChat", "SpaceAction", "AddObject", "target", "hidden", "AddRelation", "schema", "runPromise", "clearTimeout", "TemplateType", "TemplateContainer", "template", "PromptSettings"]
|
|
7
|
-
}
|