@dxos/plugin-search 0.8.4-main.b97322e → 0.8.4-main.bc2380dfbc
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/LICENSE +102 -5
- package/README.md +0 -1
- package/dist/lib/neutral/SearchArticle-CQMZ46ZS.mjs +51 -0
- package/dist/lib/neutral/SearchArticle-CQMZ46ZS.mjs.map +7 -0
- package/dist/lib/neutral/SearchDialog-UM27KP5U.mjs +74 -0
- package/dist/lib/neutral/SearchDialog-UM27KP5U.mjs.map +7 -0
- package/dist/lib/neutral/SearchPlugin.mjs +10 -0
- package/dist/lib/neutral/SearchPlugin.mjs.map +7 -0
- package/dist/lib/neutral/app-graph-builder-B3W3UWHV.mjs +71 -0
- package/dist/lib/neutral/app-graph-builder-B3W3UWHV.mjs.map +7 -0
- package/dist/lib/neutral/capabilities/index.mjs +13 -0
- package/dist/lib/neutral/capabilities/index.mjs.map +7 -0
- package/dist/lib/neutral/chunk-7VNJDD75.mjs +22 -0
- package/dist/lib/neutral/chunk-7VNJDD75.mjs.map +7 -0
- package/dist/lib/neutral/chunk-EBXWOGAD.mjs +26 -0
- package/dist/lib/neutral/chunk-EBXWOGAD.mjs.map +7 -0
- package/dist/lib/neutral/chunk-IXRPYAX5.mjs +8 -0
- package/dist/lib/neutral/chunk-IXRPYAX5.mjs.map +7 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
- package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
- package/dist/lib/neutral/chunk-LUDADYMK.mjs +277 -0
- package/dist/lib/neutral/chunk-LUDADYMK.mjs.map +7 -0
- package/dist/lib/neutral/chunk-NAKPT2JM.mjs +8 -0
- package/dist/lib/neutral/chunk-NAKPT2JM.mjs.map +7 -0
- package/dist/lib/neutral/chunk-NC3YYBHS.mjs +22 -0
- package/dist/lib/neutral/chunk-NC3YYBHS.mjs.map +7 -0
- package/dist/lib/neutral/components/index.mjs +97 -0
- package/dist/lib/neutral/components/index.mjs.map +7 -0
- package/dist/lib/neutral/containers/index.mjs +11 -0
- package/dist/lib/neutral/containers/index.mjs.map +7 -0
- package/dist/lib/neutral/hooks/index.mjs +30 -0
- package/dist/lib/neutral/hooks/index.mjs.map +7 -0
- package/dist/lib/neutral/index.mjs +40 -0
- package/dist/lib/neutral/index.mjs.map +7 -0
- package/dist/lib/neutral/meta.json +1 -0
- package/dist/lib/neutral/meta.mjs +10 -0
- package/dist/lib/neutral/meta.mjs.map +7 -0
- package/dist/lib/neutral/open-search-DY6ZGVKR.mjs +23 -0
- package/dist/lib/neutral/open-search-DY6ZGVKR.mjs.map +7 -0
- package/dist/lib/neutral/operation-handler-DY624P2R.mjs +13 -0
- package/dist/lib/neutral/operation-handler-DY624P2R.mjs.map +7 -0
- package/dist/lib/neutral/operations/index.mjs +8 -0
- package/dist/lib/neutral/operations/index.mjs.map +7 -0
- package/dist/lib/neutral/plugin.mjs +16 -0
- package/dist/lib/neutral/plugin.mjs.map +7 -0
- package/dist/lib/neutral/react-surface-ER7Q4W6Y.mjs +61 -0
- package/dist/lib/neutral/react-surface-ER7Q4W6Y.mjs.map +7 -0
- package/dist/lib/neutral/testing.mjs +8 -0
- package/dist/lib/neutral/testing.mjs.map +7 -0
- package/dist/lib/neutral/translations.mjs +25 -0
- package/dist/lib/neutral/translations.mjs.map +7 -0
- package/dist/lib/neutral/types/index.mjs +8 -0
- package/dist/lib/neutral/types/index.mjs.map +7 -0
- package/dist/types/src/SearchPlugin.d.ts +3 -1
- package/dist/types/src/SearchPlugin.d.ts.map +1 -1
- package/dist/types/src/capabilities/app-graph-builder.d.ts +4 -2
- package/dist/types/src/capabilities/app-graph-builder.d.ts.map +1 -1
- package/dist/types/src/capabilities/index.d.ts +5 -3
- package/dist/types/src/capabilities/index.d.ts.map +1 -1
- package/dist/types/src/capabilities/operation-handler.d.ts +6 -0
- package/dist/types/src/capabilities/operation-handler.d.ts.map +1 -0
- package/dist/types/src/capabilities/react-surface.d.ts +3 -2
- package/dist/types/src/capabilities/react-surface.d.ts.map +1 -1
- package/dist/types/src/components/SearchResultStack/SearchResultStack.d.ts +9 -0
- package/dist/types/src/components/SearchResultStack/SearchResultStack.d.ts.map +1 -0
- package/dist/types/src/components/SearchResultStack/index.d.ts +2 -0
- package/dist/types/src/components/SearchResultStack/index.d.ts.map +1 -0
- package/dist/types/src/components/index.d.ts +1 -3
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/constants.d.ts +2 -0
- package/dist/types/src/constants.d.ts.map +1 -0
- package/dist/types/src/containers/SearchArticle/SearchArticle.d.ts +4 -0
- package/dist/types/src/containers/SearchArticle/SearchArticle.d.ts.map +1 -0
- package/dist/types/src/containers/SearchArticle/SearchArticle.stories.d.ts +14 -0
- package/dist/types/src/containers/SearchArticle/SearchArticle.stories.d.ts.map +1 -0
- package/dist/types/src/containers/SearchArticle/index.d.ts +2 -0
- package/dist/types/src/containers/SearchArticle/index.d.ts.map +1 -0
- package/dist/types/src/containers/SearchDialog/SearchDialog.d.ts +7 -0
- package/dist/types/src/containers/SearchDialog/SearchDialog.d.ts.map +1 -0
- package/dist/types/src/containers/SearchDialog/SearchDialog.stories.d.ts +16 -0
- package/dist/types/src/containers/SearchDialog/SearchDialog.stories.d.ts.map +1 -0
- package/dist/types/src/containers/SearchDialog/index.d.ts +2 -0
- package/dist/types/src/containers/SearchDialog/index.d.ts.map +1 -0
- package/dist/types/src/containers/index.d.ts +4 -0
- package/dist/types/src/containers/index.d.ts.map +1 -0
- 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/sync.d.ts +4 -3
- package/dist/types/src/hooks/sync.d.ts.map +1 -1
- package/dist/types/src/hooks/useGlobalSearch.d.ts +8 -4
- package/dist/types/src/hooks/useGlobalSearch.d.ts.map +1 -1
- package/dist/types/src/hooks/useSearchResults.d.ts +3 -2
- package/dist/types/src/hooks/useSearchResults.d.ts.map +1 -1
- package/dist/types/src/hooks/useWebSearch.d.ts +7 -4
- package/dist/types/src/hooks/useWebSearch.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/meta.d.ts +3 -4
- package/dist/types/src/meta.d.ts.map +1 -1
- package/dist/types/src/operations/index.d.ts +3 -0
- package/dist/types/src/operations/index.d.ts.map +1 -0
- package/dist/types/src/operations/open-search.d.ts +5 -0
- package/dist/types/src/operations/open-search.d.ts.map +1 -0
- package/dist/types/src/plugin.d.ts +4 -0
- package/dist/types/src/plugin.d.ts.map +1 -0
- package/dist/types/src/search/exa.d.ts +4 -4
- package/dist/types/src/search/exa.d.ts.map +1 -1
- package/dist/types/src/testing.d.ts +2 -0
- package/dist/types/src/testing.d.ts.map +1 -0
- package/dist/types/src/translations.d.ts +15 -10
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/SearchOperation.d.ts +3 -0
- package/dist/types/src/types/SearchOperation.d.ts.map +1 -0
- package/dist/types/src/types/index.d.ts +1 -1
- package/dist/types/src/types/index.d.ts.map +1 -1
- package/dist/types/src/types/search.d.ts +1 -20
- package/dist/types/src/types/search.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +120 -48
- package/src/SearchPlugin.tsx +14 -48
- package/src/capabilities/app-graph-builder.ts +55 -68
- package/src/capabilities/index.ts +8 -4
- package/src/capabilities/operation-handler.ts +16 -0
- package/src/capabilities/react-surface.tsx +68 -55
- package/src/components/SearchResultStack/SearchResultStack.tsx +118 -0
- package/src/components/SearchResultStack/index.ts +5 -0
- package/src/components/index.ts +1 -3
- package/src/constants.ts +7 -0
- package/src/containers/SearchArticle/SearchArticle.stories.tsx +79 -0
- package/src/containers/SearchArticle/SearchArticle.tsx +60 -0
- package/src/containers/SearchArticle/index.ts +5 -0
- package/src/containers/SearchDialog/SearchDialog.stories.tsx +108 -0
- package/src/containers/SearchDialog/SearchDialog.tsx +93 -0
- package/src/containers/SearchDialog/index.ts +5 -0
- package/src/containers/index.ts +8 -0
- package/src/hooks/index.ts +2 -0
- package/src/hooks/sync.test.ts +9 -7
- package/src/hooks/sync.ts +28 -32
- package/src/hooks/useGlobalSearch.tsx +33 -13
- package/src/hooks/useSearchResults.ts +9 -6
- package/src/hooks/useWebSearch.ts +25 -19
- package/src/index.ts +2 -2
- package/src/meta.ts +10 -7
- package/src/operations/index.ts +7 -0
- package/src/operations/open-search.ts +24 -0
- package/src/plugin.ts +11 -0
- package/src/search/exa.test.ts +8 -19
- package/src/search/exa.ts +135 -154
- package/src/testing.ts +7 -0
- package/src/translations.ts +10 -9
- package/src/types/SearchOperation.ts +19 -0
- package/src/types/command-score.d.ts +16 -0
- package/src/types/index.ts +2 -1
- package/src/types/search.ts +1 -25
- package/dist/lib/browser/app-graph-builder-FLW7KDC5.mjs +0 -77
- package/dist/lib/browser/app-graph-builder-FLW7KDC5.mjs.map +0 -7
- package/dist/lib/browser/chunk-BXSF7IAU.mjs +0 -190
- package/dist/lib/browser/chunk-BXSF7IAU.mjs.map +0 -7
- package/dist/lib/browser/chunk-JVMYGOKS.mjs +0 -21
- package/dist/lib/browser/chunk-JVMYGOKS.mjs.map +0 -7
- package/dist/lib/browser/chunk-KNS62YL2.mjs +0 -20
- package/dist/lib/browser/chunk-KNS62YL2.mjs.map +0 -7
- package/dist/lib/browser/index.mjs +0 -112
- package/dist/lib/browser/index.mjs.map +0 -7
- package/dist/lib/browser/intent-resolver-JPBGEKFT.mjs +0 -22
- package/dist/lib/browser/intent-resolver-JPBGEKFT.mjs.map +0 -7
- package/dist/lib/browser/meta.json +0 -1
- package/dist/lib/browser/react-surface-MPPIWDBF.mjs +0 -651
- package/dist/lib/browser/react-surface-MPPIWDBF.mjs.map +0 -7
- package/dist/types/src/capabilities/intent-resolver.d.ts +0 -4
- package/dist/types/src/capabilities/intent-resolver.d.ts.map +0 -1
- package/dist/types/src/components/Search.stories.d.ts +0 -15
- package/dist/types/src/components/Search.stories.d.ts.map +0 -1
- package/dist/types/src/components/SearchDialog.d.ts +0 -7
- package/dist/types/src/components/SearchDialog.d.ts.map +0 -1
- package/dist/types/src/components/SearchMain.d.ts +0 -7
- package/dist/types/src/components/SearchMain.d.ts.map +0 -1
- package/dist/types/src/components/SearchResults/SearchResults.d.ts +0 -20
- package/dist/types/src/components/SearchResults/SearchResults.d.ts.map +0 -1
- package/dist/types/src/components/SearchResults/SearchResults.stories.d.ts +0 -12
- package/dist/types/src/components/SearchResults/SearchResults.stories.d.ts.map +0 -1
- package/dist/types/src/components/SearchResults/index.d.ts +0 -2
- package/dist/types/src/components/SearchResults/index.d.ts.map +0 -1
- package/dist/types/src/components/Searchbar/Searchbar.d.ts +0 -14
- package/dist/types/src/components/Searchbar/Searchbar.d.ts.map +0 -1
- package/dist/types/src/components/Searchbar/Searchbar.stories.d.ts +0 -11
- package/dist/types/src/components/Searchbar/Searchbar.stories.d.ts.map +0 -1
- package/dist/types/src/components/Searchbar/index.d.ts +0 -2
- package/dist/types/src/components/Searchbar/index.d.ts.map +0 -1
- package/dist/types/src/types/action.d.ts +0 -13
- package/dist/types/src/types/action.d.ts.map +0 -1
- package/src/capabilities/intent-resolver.ts +0 -18
- package/src/components/Search.stories.tsx +0 -66
- package/src/components/SearchDialog.tsx +0 -124
- package/src/components/SearchMain.tsx +0 -67
- package/src/components/SearchResults/SearchResults.stories.tsx +0 -57
- package/src/components/SearchResults/SearchResults.tsx +0 -86
- package/src/components/SearchResults/index.ts +0 -5
- package/src/components/Searchbar/Searchbar.stories.tsx +0 -28
- package/src/components/Searchbar/Searchbar.tsx +0 -67
- package/src/components/Searchbar/index.ts +0 -5
- package/src/types/action.tsx +0 -16
package/src/search/exa.ts
CHANGED
|
@@ -2,30 +2,24 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
import Exa from 'exa-js';
|
|
5
|
+
// ISSUE(burdon): deprecated types: MixedStreamParser => effect
|
|
7
6
|
|
|
8
|
-
import
|
|
9
|
-
import
|
|
7
|
+
import * as Option from 'effect/Option';
|
|
8
|
+
import * as Schema from 'effect/Schema';
|
|
9
|
+
import * as SchemaAST from 'effect/SchemaAST';
|
|
10
|
+
|
|
11
|
+
import { type Entity, Key, Obj, type Type } from '@dxos/echo';
|
|
10
12
|
import { isEncodedReference } from '@dxos/echo-protocol';
|
|
11
|
-
import { ReferenceAnnotationId } from '@dxos/echo
|
|
13
|
+
import { ReferenceAnnotationId } from '@dxos/echo/internal';
|
|
12
14
|
import { mapAst } from '@dxos/effect';
|
|
13
|
-
import { assertArgument, failedInvariant } from '@dxos/invariant';
|
|
14
|
-
import { log } from '@dxos/log';
|
|
15
|
-
import { type ContentBlock, DataType } from '@dxos/schema';
|
|
16
15
|
import { deepMapValues, trim } from '@dxos/util';
|
|
17
16
|
|
|
18
17
|
export type SearchOptions<Schema extends Schema.Schema.AnyNoContext> = {
|
|
19
18
|
query?: string;
|
|
20
|
-
|
|
21
19
|
// TODO(dmaretskyi): How can we pass this through.
|
|
22
20
|
context?: string;
|
|
23
|
-
|
|
24
21
|
schema: Schema[];
|
|
25
|
-
|
|
26
|
-
AiService: AiServiceClient;
|
|
27
22
|
exaApiKey: string;
|
|
28
|
-
|
|
29
23
|
liveCrawl?: boolean;
|
|
30
24
|
};
|
|
31
25
|
|
|
@@ -37,94 +31,81 @@ export type SearchResult<T = unknown> = {
|
|
|
37
31
|
};
|
|
38
32
|
};
|
|
39
33
|
|
|
34
|
+
/** @deprecated Use MixedStreamParser */
|
|
40
35
|
export const search = async <Schema extends Schema.Schema.AnyNoContext>(
|
|
41
36
|
options: SearchOptions<Schema>,
|
|
42
|
-
): Promise<SearchResult<
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
let contextSearchTerms: readonly string[] = [];
|
|
46
|
-
if (options.context) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
//
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
schema: options.schema[i],
|
|
115
|
-
})) ?? []
|
|
116
|
-
);
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
// log('verified objects', { entries });
|
|
120
|
-
|
|
121
|
-
return {
|
|
122
|
-
data: sanitizeObjects(entries),
|
|
123
|
-
metrics: {
|
|
124
|
-
sourceQueryTime,
|
|
125
|
-
dataExtractionTime,
|
|
126
|
-
},
|
|
127
|
-
};
|
|
37
|
+
): Promise<SearchResult<Entity.Unknown>> => {
|
|
38
|
+
throw new Error('Not implemented');
|
|
39
|
+
// assertArgument(options.query || options.context, "query or context", "query or context is required");
|
|
40
|
+
// let contextSearchTerms: readonly string[] = [];
|
|
41
|
+
// if (options.context) {
|
|
42
|
+
// contextSearchTerms = await getSearchTerms(options.AiService, options.context);
|
|
43
|
+
// log.info('context search terms', { additionalSearchTerms: contextSearchTerms });
|
|
44
|
+
// }
|
|
45
|
+
// const mappedSchema = options.schema.map(mapSchemaRefs);
|
|
46
|
+
// let startTime = performance.now();
|
|
47
|
+
// const exa = new Exa(options.exaApiKey);
|
|
48
|
+
// const context = await exa.searchAndContents(options.query + ' ' + contextSearchTerms.join(' '), {
|
|
49
|
+
// type: 'auto',
|
|
50
|
+
// text: { maxCharacters: 3_000 },
|
|
51
|
+
// livecrawl: options.liveCrawl ? 'always' : undefined,
|
|
52
|
+
// });
|
|
53
|
+
// log.info('context', { context });
|
|
54
|
+
// const sourceQueryTime = performance.now() - startTime;
|
|
55
|
+
// startTime = performance.now();
|
|
56
|
+
// let systemPrompt = DATA_EXTRACTION_INSTRUCTIONS;
|
|
57
|
+
// if (options.query) {
|
|
58
|
+
// systemPrompt += `\n<query>${options.query}</query>`;
|
|
59
|
+
// }
|
|
60
|
+
// if (options.context) {
|
|
61
|
+
// systemPrompt += `\n<search_context>${options.context}</search_context>`;
|
|
62
|
+
// }
|
|
63
|
+
// const result = await getStructuredOutput(options.AiService, {
|
|
64
|
+
// model: '@anthropic/claude-3-5-haiku-20241022',
|
|
65
|
+
// systemPrompt,
|
|
66
|
+
// history: [
|
|
67
|
+
// Obj.make(Message.Message, {
|
|
68
|
+
// created: new Date().toISOString(),
|
|
69
|
+
// sender: { role: 'user' },
|
|
70
|
+
// blocks: context.results.map(
|
|
71
|
+
// (result): ContentBlock.Text => ({
|
|
72
|
+
// _tag: 'text',
|
|
73
|
+
// text: `# ${result.title}\n\n${result.text}`,
|
|
74
|
+
// }),
|
|
75
|
+
// ),
|
|
76
|
+
// }),
|
|
77
|
+
// ],
|
|
78
|
+
// schema: Schema.Struct({
|
|
79
|
+
// ...Object.fromEntries(
|
|
80
|
+
// mappedSchema.map((schema, index) => [
|
|
81
|
+
// `objects_${index}`,
|
|
82
|
+
// Schema.Array(schema).annotations({
|
|
83
|
+
// description: `The objects to answer the query of type ${Type.getTypename(schema) ?? SchemaAST.getIdentifierAnnotation(schema.ast).pipe(Option.getOrNull)}`,
|
|
84
|
+
// }),
|
|
85
|
+
// ]),
|
|
86
|
+
// ),
|
|
87
|
+
// }),
|
|
88
|
+
// });
|
|
89
|
+
// const dataExtractionTime = performance.now() - startTime;
|
|
90
|
+
// log.info('result', { result });
|
|
91
|
+
// const rawObjects = Object.values(result);
|
|
92
|
+
// // log('rawObjects', { rawObjects });
|
|
93
|
+
// const entries = mappedSchema.flatMap((schema, i) => {
|
|
94
|
+
// return (
|
|
95
|
+
// (rawObjects[i] as any[])?.map((object: any) => ({
|
|
96
|
+
// data: object,
|
|
97
|
+
// schema: options.schema[i],
|
|
98
|
+
// })) ?? []
|
|
99
|
+
// );
|
|
100
|
+
// });
|
|
101
|
+
// // log('verified objects', { entries });
|
|
102
|
+
// return {
|
|
103
|
+
// data: sanitizeObjects(entries),
|
|
104
|
+
// metrics: {
|
|
105
|
+
// sourceQueryTime,
|
|
106
|
+
// dataExtractionTime,
|
|
107
|
+
// },
|
|
108
|
+
// };
|
|
128
109
|
};
|
|
129
110
|
|
|
130
111
|
const DATA_EXTRACTION_INSTRUCTIONS = trim`
|
|
@@ -146,61 +127,61 @@ const DATA_EXTRACTION_INSTRUCTIONS = trim`
|
|
|
146
127
|
/**
|
|
147
128
|
* Runs the LLM to produce a structured output matching a schema
|
|
148
129
|
*/
|
|
149
|
-
const getStructuredOutput = async <S extends Schema.Schema.AnyNoContext>(
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
): Promise<Schema.Schema.Type<S>> => {
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
const getSearchTerms = async (AiService: AiServiceClient, context: string) => {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
};
|
|
202
|
-
|
|
203
|
-
const sanitizeObjects = (entries: { data: any; schema:
|
|
130
|
+
// const getStructuredOutput = async <S extends Schema.Schema.AnyNoContext>(
|
|
131
|
+
// AiService: AiServiceClient,
|
|
132
|
+
// request: Omit<GenerateRequest, 'tools'> & { schema: S },
|
|
133
|
+
// ): Promise<Schema.Schema.Type<S>> => {
|
|
134
|
+
// const result = await new MixedStreamParser().parse(
|
|
135
|
+
// await AiService.execStream({
|
|
136
|
+
// ...request,
|
|
137
|
+
// systemPrompt:
|
|
138
|
+
// request.systemPrompt +
|
|
139
|
+
// '\nDo not output anything other then the tool call. Call the submit_result tool with the result.',
|
|
140
|
+
// tools: [
|
|
141
|
+
// createTool('submit_result', {
|
|
142
|
+
// name: 'submit_result',
|
|
143
|
+
// description: 'Submit the result',
|
|
144
|
+
// schema: request.schema,
|
|
145
|
+
// execute: async () => failedInvariant(),
|
|
146
|
+
// }),
|
|
147
|
+
// ],
|
|
148
|
+
// }),
|
|
149
|
+
// );
|
|
150
|
+
// return result[0].blocks.find((c) => c._tag === 'toolCall')?.input as any;
|
|
151
|
+
// };
|
|
152
|
+
|
|
153
|
+
// const getSearchTerms = async (AiService: AiServiceClient, context: string) => {
|
|
154
|
+
// const { terms } = await getStructuredOutput(AiService, {
|
|
155
|
+
// model: '@anthropic/claude-3-5-haiku-20241022',
|
|
156
|
+
// systemPrompt: trim`
|
|
157
|
+
// You are a search term extraction agent.
|
|
158
|
+
// Extract the relevant search terms from the context.
|
|
159
|
+
// Return the search terms as an array of strings.
|
|
160
|
+
// Prefer own names of people, companies, and projects, technologies, and other entities.
|
|
161
|
+
// `,
|
|
162
|
+
// history: [
|
|
163
|
+
// Obj.make(Message.Message, {
|
|
164
|
+
// created: new Date().toISOString(),
|
|
165
|
+
// sender: { role: 'user' },
|
|
166
|
+
// blocks: [
|
|
167
|
+
// {
|
|
168
|
+
// _tag: 'text',
|
|
169
|
+
// text: `# Context to extract search terms from:\n\n${context}`,
|
|
170
|
+
// },
|
|
171
|
+
// ],
|
|
172
|
+
// }),
|
|
173
|
+
// ],
|
|
174
|
+
// schema: Schema.Struct({
|
|
175
|
+
// terms: Schema.Array(Schema.String).annotations({
|
|
176
|
+
// description: 'The search terms to use to find the objects. 0-10 terms.',
|
|
177
|
+
// }),
|
|
178
|
+
// }),
|
|
179
|
+
// });
|
|
180
|
+
|
|
181
|
+
// return terms;
|
|
182
|
+
// };
|
|
183
|
+
|
|
184
|
+
const sanitizeObjects = (entries: { data: any; schema: Type.AnyObj }[]) => {
|
|
204
185
|
const idMap = new Map<string, string>();
|
|
205
186
|
|
|
206
187
|
return entries
|
package/src/testing.ts
ADDED
package/src/translations.ts
CHANGED
|
@@ -3,21 +3,22 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import { type Resource } from '@dxos/react-ui';
|
|
6
|
+
import { translations as searchTranslations } from '@dxos/react-ui-search/translations';
|
|
6
7
|
|
|
7
|
-
import { meta } from '
|
|
8
|
+
import { meta } from '#meta';
|
|
8
9
|
|
|
9
10
|
export const translations = [
|
|
11
|
+
...searchTranslations,
|
|
10
12
|
{
|
|
11
13
|
'en-US': {
|
|
12
14
|
[meta.id]: {
|
|
13
|
-
'plugin
|
|
14
|
-
'search
|
|
15
|
-
'search
|
|
16
|
-
'search
|
|
17
|
-
'recently
|
|
18
|
-
'pending
|
|
19
|
-
'
|
|
20
|
-
'search label': 'Search',
|
|
15
|
+
'plugin.name': 'Search',
|
|
16
|
+
'search-action.label': 'Search spaces',
|
|
17
|
+
'search.placeholder': 'Search…',
|
|
18
|
+
'search-dialog.title': 'Search',
|
|
19
|
+
'recently-closed.heading': 'Recently closed',
|
|
20
|
+
'pending-results.message': 'Searching…',
|
|
21
|
+
'search.label': 'Search',
|
|
21
22
|
},
|
|
22
23
|
},
|
|
23
24
|
},
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
// @import-as-namespace
|
|
6
|
+
|
|
7
|
+
import * as Schema from 'effect/Schema';
|
|
8
|
+
|
|
9
|
+
import { Operation } from '@dxos/compute';
|
|
10
|
+
|
|
11
|
+
import { meta } from '#meta';
|
|
12
|
+
|
|
13
|
+
const SEARCH_OPERATION = `${meta.id}.operation`;
|
|
14
|
+
|
|
15
|
+
export const OpenSearch = Operation.make({
|
|
16
|
+
meta: { key: `${SEARCH_OPERATION}.open-search`, name: 'Open Search' },
|
|
17
|
+
input: Schema.Void,
|
|
18
|
+
output: Schema.Void,
|
|
19
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
//
|
|
2
|
+
// Copyright 2025 DXOS.org
|
|
3
|
+
//
|
|
4
|
+
|
|
5
|
+
declare module 'command-score' {
|
|
6
|
+
/**
|
|
7
|
+
* Scores how well a string matches a query using a fuzzy matching algorithm.
|
|
8
|
+
* Used by cmdk for its built-in filtering.
|
|
9
|
+
*
|
|
10
|
+
* @param string - The string to score against.
|
|
11
|
+
* @param query - The search query.
|
|
12
|
+
* @returns A score between 0 and 1, where higher values indicate better matches.
|
|
13
|
+
*/
|
|
14
|
+
function commandScore(string: string, query: string): number;
|
|
15
|
+
export default commandScore;
|
|
16
|
+
}
|
package/src/types/index.ts
CHANGED
package/src/types/search.ts
CHANGED
|
@@ -2,28 +2,4 @@
|
|
|
2
2
|
// Copyright 2025 DXOS.org
|
|
3
3
|
//
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
export type SearchResult = {
|
|
8
|
-
id: string;
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Type kind: "contact", "project", "org", etc.
|
|
12
|
-
*/
|
|
13
|
-
type?: string;
|
|
14
|
-
label?: string;
|
|
15
|
-
match?: RegExp;
|
|
16
|
-
snippet?: string;
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* Icon id.
|
|
20
|
-
*/
|
|
21
|
-
icon?: string;
|
|
22
|
-
|
|
23
|
-
/**
|
|
24
|
-
* DXN of the object type.
|
|
25
|
-
*/
|
|
26
|
-
objectType?: DXN.String;
|
|
27
|
-
|
|
28
|
-
object?: any;
|
|
29
|
-
};
|
|
5
|
+
export type { SearchResult } from '@dxos/react-ui-search';
|
|
@@ -1,77 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
SearchAction
|
|
3
|
-
} from "./chunk-JVMYGOKS.mjs";
|
|
4
|
-
import {
|
|
5
|
-
SEARCH_PLUGIN
|
|
6
|
-
} from "./chunk-KNS62YL2.mjs";
|
|
7
|
-
|
|
8
|
-
// src/capabilities/app-graph-builder.ts
|
|
9
|
-
import { Rx } from "@effect-rx/rx-react";
|
|
10
|
-
import { Option, pipe } from "effect";
|
|
11
|
-
import { Capabilities, contributes, createIntent } from "@dxos/app-framework";
|
|
12
|
-
import { ClientCapabilities } from "@dxos/plugin-client";
|
|
13
|
-
import { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE } from "@dxos/plugin-deck/types";
|
|
14
|
-
import { createExtension, ROOT_ID, rxFromSignal } from "@dxos/plugin-graph";
|
|
15
|
-
import { parseId } from "@dxos/react-client/echo";
|
|
16
|
-
var app_graph_builder_default = (context) => contributes(Capabilities.AppGraphBuilder, [
|
|
17
|
-
createExtension({
|
|
18
|
-
id: `${SEARCH_PLUGIN}/space-search`,
|
|
19
|
-
connector: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map((node2) => {
|
|
20
|
-
const workspace = get(rxFromSignal(() => context.getCapability(Capabilities.Layout).workspace));
|
|
21
|
-
const client = context.getCapability(ClientCapabilities.Client);
|
|
22
|
-
const { spaceId } = parseId(workspace);
|
|
23
|
-
const space = spaceId ? client.spaces.get(spaceId) : null;
|
|
24
|
-
return [
|
|
25
|
-
{
|
|
26
|
-
id: [
|
|
27
|
-
node2.id,
|
|
28
|
-
"search"
|
|
29
|
-
].join(ATTENDABLE_PATH_SEPARATOR),
|
|
30
|
-
type: DECK_COMPANION_TYPE,
|
|
31
|
-
data: space,
|
|
32
|
-
properties: {
|
|
33
|
-
label: [
|
|
34
|
-
"search label",
|
|
35
|
-
{
|
|
36
|
-
ns: SEARCH_PLUGIN
|
|
37
|
-
}
|
|
38
|
-
],
|
|
39
|
-
icon: "ph--magnifying-glass--regular",
|
|
40
|
-
disposition: "hidden"
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
];
|
|
44
|
-
}), Option.getOrElse(() => [])))
|
|
45
|
-
}),
|
|
46
|
-
createExtension({
|
|
47
|
-
id: SEARCH_PLUGIN,
|
|
48
|
-
actions: (node) => Rx.make((get) => pipe(get(node), Option.flatMap((node2) => node2.id === ROOT_ID ? Option.some(node2) : Option.none()), Option.map(() => {
|
|
49
|
-
return [
|
|
50
|
-
{
|
|
51
|
-
id: SearchAction.OpenSearch._tag,
|
|
52
|
-
data: async () => {
|
|
53
|
-
const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);
|
|
54
|
-
await dispatch(createIntent(SearchAction.OpenSearch));
|
|
55
|
-
},
|
|
56
|
-
properties: {
|
|
57
|
-
label: [
|
|
58
|
-
"search action label",
|
|
59
|
-
{
|
|
60
|
-
ns: SEARCH_PLUGIN
|
|
61
|
-
}
|
|
62
|
-
],
|
|
63
|
-
icon: "ph--magnifying-glass--regular",
|
|
64
|
-
keyBinding: {
|
|
65
|
-
macos: "shift+meta+f",
|
|
66
|
-
windows: "shift+alt+f"
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
];
|
|
71
|
-
}), Option.getOrElse(() => [])))
|
|
72
|
-
})
|
|
73
|
-
]);
|
|
74
|
-
export {
|
|
75
|
-
app_graph_builder_default as default
|
|
76
|
-
};
|
|
77
|
-
//# sourceMappingURL=app-graph-builder-FLW7KDC5.mjs.map
|
|
@@ -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 { Capabilities, contributes, createIntent, type PluginContext } from '@dxos/app-framework';\nimport { ClientCapabilities } from '@dxos/plugin-client';\nimport { ATTENDABLE_PATH_SEPARATOR, DECK_COMPANION_TYPE } from '@dxos/plugin-deck/types';\nimport { createExtension, ROOT_ID, rxFromSignal } from '@dxos/plugin-graph';\nimport { parseId } from '@dxos/react-client/echo';\n\nimport { SEARCH_PLUGIN } from '../meta';\nimport { SearchAction } from '../types';\n\nexport default (context: PluginContext) =>\n contributes(Capabilities.AppGraphBuilder, [\n createExtension({\n id: `${SEARCH_PLUGIN}/space-search`,\n connector: (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((node) => {\n const workspace = get(rxFromSignal(() => context.getCapability(Capabilities.Layout).workspace));\n const client = context.getCapability(ClientCapabilities.Client);\n const { spaceId } = parseId(workspace);\n const space = spaceId ? client.spaces.get(spaceId) : null;\n\n return [\n {\n id: [node.id, 'search'].join(ATTENDABLE_PATH_SEPARATOR),\n type: DECK_COMPANION_TYPE,\n data: space,\n properties: {\n label: ['search label', { ns: SEARCH_PLUGIN }],\n icon: 'ph--magnifying-glass--regular',\n disposition: 'hidden',\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n createExtension({\n id: SEARCH_PLUGIN,\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 return [\n {\n id: SearchAction.OpenSearch._tag,\n data: async () => {\n const { dispatchPromise: dispatch } = context.getCapability(Capabilities.IntentDispatcher);\n await dispatch(createIntent(SearchAction.OpenSearch));\n },\n properties: {\n label: ['search action label', { ns: SEARCH_PLUGIN }],\n icon: 'ph--magnifying-glass--regular',\n keyBinding: {\n macos: 'shift+meta+f',\n windows: 'shift+alt+f',\n },\n },\n },\n ];\n }),\n Option.getOrElse(() => []),\n ),\n ),\n }),\n ]);\n"],
|
|
5
|
-
"mappings": ";;;;;;;;AAIA,SAASA,UAAU;AACnB,SAASC,QAAQC,YAAY;AAE7B,SAASC,cAAcC,aAAaC,oBAAwC;AAC5E,SAASC,0BAA0B;AACnC,SAASC,2BAA2BC,2BAA2B;AAC/D,SAASC,iBAAiBC,SAASC,oBAAoB;AACvD,SAASC,eAAe;AAKxB,IAAA,4BAAe,CAACC,YACdC,YAAYC,aAAaC,iBAAiB;EACxCC,gBAAgB;IACdC,IAAI,GAAGC,aAAAA;IACPC,WAAW,CAACC,SACVC,GAAGC,KAAK,CAACC,QACPC,KACED,IAAIH,IAAAA,GACJK,OAAOC,QAAQ,CAACN,UAAUA,MAAKH,OAAOU,UAAUF,OAAOG,KAAKR,KAAAA,IAAQK,OAAOI,KAAI,CAAA,GAC/EJ,OAAOK,IAAI,CAACV,UAAAA;AACV,YAAMW,YAAYR,IAAIS,aAAa,MAAMpB,QAAQqB,cAAcnB,aAAaoB,MAAM,EAAEH,SAAS,CAAA;AAC7F,YAAMI,SAASvB,QAAQqB,cAAcG,mBAAmBC,MAAM;AAC9D,YAAM,EAAEC,QAAO,IAAKC,QAAQR,SAAAA;AAC5B,YAAMS,QAAQF,UAAUH,OAAOM,OAAOlB,IAAIe,OAAAA,IAAW;AAErD,aAAO;QACL;UACErB,IAAI;YAACG,MAAKH;YAAI;YAAUyB,KAAKC,yBAAAA;UAC7BC,MAAMC;UACNC,MAAMN;UACNO,YAAY;YACVC,OAAO;cAAC;cAAgB;gBAAEC,IAAI/B;cAAc;;YAC5CgC,MAAM;YACNC,aAAa;UACf;QACF;;IAEJ,CAAA,GACA1B,OAAO2B,UAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;EACApC,gBAAgB;IACdC,IAAIC;IACJmC,SAAS,CAACjC,SACRC,GAAGC,KAAK,CAACC,QACPC,KACED,IAAIH,IAAAA,GACJK,OAAOC,QAAQ,CAACN,UAAUA,MAAKH,OAAOU,UAAUF,OAAOG,KAAKR,KAAAA,IAAQK,OAAOI,KAAI,CAAA,GAC/EJ,OAAOK,IAAI,MAAA;AACT,aAAO;QACL;UACEb,IAAIqC,aAAaC,WAAWC;UAC5BV,MAAM,YAAA;AACJ,kBAAM,EAAEW,iBAAiBC,SAAQ,IAAK9C,QAAQqB,cAAcnB,aAAa6C,gBAAgB;AACzF,kBAAMD,SAASE,aAAaN,aAAaC,UAAU,CAAA;UACrD;UACAR,YAAY;YACVC,OAAO;cAAC;cAAuB;gBAAEC,IAAI/B;cAAc;;YACnDgC,MAAM;YACNW,YAAY;cACVC,OAAO;cACPC,SAAS;YACX;UACF;QACF;;IAEJ,CAAA,GACAtC,OAAO2B,UAAU,MAAM,CAAA,CAAE,CAAA,CAAA;EAGjC,CAAA;CACD;",
|
|
6
|
-
"names": ["Rx", "Option", "pipe", "Capabilities", "contributes", "createIntent", "ClientCapabilities", "ATTENDABLE_PATH_SEPARATOR", "DECK_COMPANION_TYPE", "createExtension", "ROOT_ID", "rxFromSignal", "parseId", "context", "contributes", "Capabilities", "AppGraphBuilder", "createExtension", "id", "SEARCH_PLUGIN", "connector", "node", "Rx", "make", "get", "pipe", "Option", "flatMap", "ROOT_ID", "some", "none", "map", "workspace", "rxFromSignal", "getCapability", "Layout", "client", "ClientCapabilities", "Client", "spaceId", "parseId", "space", "spaces", "join", "ATTENDABLE_PATH_SEPARATOR", "type", "DECK_COMPANION_TYPE", "data", "properties", "label", "ns", "icon", "disposition", "getOrElse", "actions", "SearchAction", "OpenSearch", "_tag", "dispatchPromise", "dispatch", "IntentDispatcher", "createIntent", "keyBinding", "macos", "windows"]
|
|
7
|
-
}
|