@dbx-tools/search 0.6.9

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.
@@ -0,0 +1,145 @@
1
+ /**
2
+ * The `search`, `universal_search`, and (opt-in) `add_documents`,
3
+ * `create_index`, and `sync_index` Mastra tools.
4
+ *
5
+ * All three read the shared runtime primed by the plugin, so a tool spread
6
+ * into an agent uses the deployment's default index, columns, page size, and
7
+ * mode without any per-tool wiring. They run under the caller's OBO scope (the
8
+ * client resolves the execution context's workspace client), so search runs as
9
+ * the requesting user and Unity Catalog ACLs apply.
10
+ *
11
+ * The same tools are exposed to AppKit's own agents through the plugin's
12
+ * `ToolProvider` (see `plugin.ts`); this module is the Mastra half.
13
+ *
14
+ * @module
15
+ */
16
+ import { search as searchContract } from "@dbx-tools/shared-search";
17
+ import { createTool } from "@mastra/core/tools";
18
+ import { z } from "zod";
19
+ import { toCreateIndexOptions } from "./index-tools.js";
20
+ import { toDocumentArray } from "./query.js";
21
+ import { getSearchRuntime } from "./runtime.js";
22
+ import { ADD_DOCUMENTS_TOOL_DESCRIPTION, CREATE_INDEX_TOOL_DESCRIPTION, SEARCH_TOOL_DESCRIPTION, SYNC_INDEX_TOOL_DESCRIPTION, UNIVERSAL_SEARCH_TOOL_DESCRIPTION, createIndexToolSchema, indexInfoSchema, searchResultSchema, searchToolSchema, syncIndexToolSchema, universalSearchToolSchema, } from "./schema.js";
23
+ /**
24
+ * Build the `search` tool. Spread it into any agent that should be able to look
25
+ * things up in an index.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * import { searchTool } from "@dbx-tools/search";
30
+ * import { createAgent } from "@dbx-tools/appkit-mastra";
31
+ *
32
+ * const support = createAgent({
33
+ * instructions: "Answer from the docs. Use `search` to find them.",
34
+ * tools: () => ({ search: searchTool() }),
35
+ * });
36
+ * ```
37
+ */
38
+ export function searchTool(options = {}) {
39
+ return createTool({
40
+ id: options.id ?? "search",
41
+ description: SEARCH_TOOL_DESCRIPTION,
42
+ inputSchema: searchToolSchema,
43
+ outputSchema: searchResultSchema,
44
+ execute: async (input, context) => {
45
+ const request = searchToolSchema.parse(input);
46
+ const { client } = getSearchRuntime();
47
+ return client.search(request.query, {
48
+ ...(request.index ? { index: request.index } : {}),
49
+ ...(request.limit ? { limit: request.limit } : {}),
50
+ ...(request.mode ? { mode: request.mode } : {}),
51
+ ...(request.columns ? { columns: request.columns } : {}),
52
+ ...(request.filter ? { filter: request.filter } : {}),
53
+ ...(request.scoreThreshold !== undefined ? { scoreThreshold: request.scoreThreshold } : {}),
54
+ ...(context?.abortSignal ? { signal: context.abortSignal } : {}),
55
+ });
56
+ },
57
+ });
58
+ }
59
+ /** Build the `universal_search` tool (federated search across every index). */
60
+ export function universalSearchTool(options = {}) {
61
+ return createTool({
62
+ id: options.id ?? "universal_search",
63
+ description: UNIVERSAL_SEARCH_TOOL_DESCRIPTION,
64
+ inputSchema: universalSearchToolSchema,
65
+ outputSchema: searchResultSchema,
66
+ execute: async (input, context) => {
67
+ const request = universalSearchToolSchema.parse(input);
68
+ const { client } = getSearchRuntime();
69
+ return client.universalSearch(request.query, {
70
+ ...(request.indexes ? { indexes: request.indexes } : {}),
71
+ ...(request.limit ? { limit: request.limit } : {}),
72
+ ...(request.mode ? { mode: request.mode } : {}),
73
+ ...(context?.abortSignal ? { signal: context.abortSignal } : {}),
74
+ });
75
+ },
76
+ });
77
+ }
78
+ /**
79
+ * Build the opt-in `add_documents` tool (write into a direct-access index).
80
+ * Only install it when the plugin's write surface is enabled.
81
+ */
82
+ export function addDocumentsTool(options = {}) {
83
+ const inputSchema = searchContract.searchDocumentSchema
84
+ .array()
85
+ .describe("Documents to add or update. Each must include the index primary key.");
86
+ return createTool({
87
+ id: options.id ?? "add_documents",
88
+ description: ADD_DOCUMENTS_TOOL_DESCRIPTION,
89
+ inputSchema: searchContract.searchRequestSchema
90
+ .pick({ index: true })
91
+ .extend({ documents: inputSchema }),
92
+ outputSchema: searchContract.upsertResultSchema,
93
+ execute: async (input, context) => {
94
+ const { client, config } = getSearchRuntime();
95
+ const record = input;
96
+ const documents = toDocumentArray(record.documents);
97
+ const index = record.index ?? config.defaultIndex ?? "";
98
+ return client.addDocuments(index, documents, context?.abortSignal);
99
+ },
100
+ });
101
+ }
102
+ /**
103
+ * Build the opt-in `create_index` tool (provision a Vector Search index).
104
+ * Only install it when the plugin's write surface is enabled. Delegates to
105
+ * {@link SearchClient.createIndex}, inferring the endpoint, embedding model,
106
+ * key, and columns from the request + plugin config.
107
+ */
108
+ export function createIndexTool(options = {}) {
109
+ return createTool({
110
+ id: options.id ?? "create_index",
111
+ description: CREATE_INDEX_TOOL_DESCRIPTION,
112
+ inputSchema: createIndexToolSchema,
113
+ outputSchema: indexInfoSchema,
114
+ execute: async (input, context) => {
115
+ const request = createIndexToolSchema.parse(input);
116
+ const { client } = getSearchRuntime();
117
+ return client.createIndex(request.name, toCreateIndexOptions(request, context?.abortSignal));
118
+ },
119
+ });
120
+ }
121
+ /** Output schema for the `sync_index` tool. */
122
+ const syncIndexResultSchema = z.object({
123
+ index: z.string().describe("The index that was synced."),
124
+ synced: z.boolean().describe("True once the sync was triggered."),
125
+ });
126
+ /**
127
+ * Build the opt-in `sync_index` tool (refresh a Delta Sync index from its
128
+ * source table). Only install it when the plugin's write surface is enabled.
129
+ */
130
+ export function syncIndexTool(options = {}) {
131
+ return createTool({
132
+ id: options.id ?? "sync_index",
133
+ description: SYNC_INDEX_TOOL_DESCRIPTION,
134
+ inputSchema: syncIndexToolSchema,
135
+ outputSchema: syncIndexResultSchema,
136
+ execute: async (input, context) => {
137
+ const request = syncIndexToolSchema.parse(input);
138
+ const { client, config } = getSearchRuntime();
139
+ const index = request.index ?? config.defaultIndex ?? "";
140
+ await client.syncIndex(index, context?.abortSignal);
141
+ return { index, synced: true };
142
+ },
143
+ });
144
+ }
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9vbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90b29sLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7OztHQWNHO0FBRUgsT0FBTyxFQUFFLE1BQU0sSUFBSSxjQUFjLEVBQXFCLE1BQU0sMEJBQTBCLENBQUM7QUFDdkYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxDQUFDLEVBQUUsTUFBTSxLQUFLLENBQUM7QUFDeEIsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM3QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDaEQsT0FBTyxFQUNMLDhCQUE4QixFQUM5Qiw2QkFBNkIsRUFDN0IsdUJBQXVCLEVBQ3ZCLDJCQUEyQixFQUMzQixpQ0FBaUMsRUFDakMscUJBQXFCLEVBQ3JCLGVBQWUsRUFDZixrQkFBa0IsRUFDbEIsZ0JBQWdCLEVBQ2hCLG1CQUFtQixFQUNuQix5QkFBeUIsR0FDMUIsTUFBTSxhQUFhLENBQUM7QUFRckI7Ozs7Ozs7Ozs7Ozs7O0dBY0c7QUFDSCxNQUFNLFVBQVUsVUFBVSxDQUFDLFVBQTZCLEVBQUU7SUFDeEQsT0FBTyxVQUFVLENBQUM7UUFDaEIsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksUUFBUTtRQUMxQixXQUFXLEVBQUUsdUJBQXVCO1FBQ3BDLFdBQVcsRUFBRSxnQkFBZ0I7UUFDN0IsWUFBWSxFQUFFLGtCQUFrQjtRQUNoQyxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTtZQUNoQyxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLGdCQUFnQixF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LE1BQU0sQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQztZQUNwRCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUNqQyxDQUFDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGBzZWFyY2hgLCBgdW5pdmVyc2FsX3NlYXJjaGAsIGFuZCAob3B0LWluKSBgYWRkX2RvY3VtZW50c2AsXG4gKiBgY3JlYXRlX2luZGV4YCwgYW5kIGBzeW5jX2luZGV4YCBNYXN0cmEgdG9vbHMuXG4gKlxuICogQWxsIHRocmVlIHJlYWQgdGhlIHNoYXJlZCBydW50aW1lIHByaW1lZCBieSB0aGUgcGx1Z2luLCBzbyBhIHRvb2wgc3ByZWFkXG4gKiBpbnRvIGFuIGFnZW50IHVzZXMgdGhlIGRlcGxveW1lbnQncyBkZWZhdWx0IGluZGV4LCBjb2x1bW5zLCBwYWdlIHNpemUsIGFuZFxuICogbW9kZSB3aXRob3V0IGFueSBwZXItdG9vbCB3aXJpbmcuIFRoZXkgcnVuIHVuZGVyIHRoZSBjYWxsZXIncyBPQk8gc2NvcGUgKHRoZVxuICogY2xpZW50IHJlc29sdmVzIHRoZSBleGVjdXRpb24gY29udGV4dCdzIHdvcmtzcGFjZSBjbGllbnQpLCBzbyBzZWFyY2ggcnVucyBhc1xuICogdGhlIHJlcXVlc3RpbmcgdXNlciBhbmQgVW5pdHkgQ2F0YWxvZyBBQ0xzIGFwcGx5LlxuICpcbiAqIFRoZSBzYW1lIHRvb2xzIGFyZSBleHBvc2VkIHRvIEFwcEtpdCdzIG93biBhZ2VudHMgdGhyb3VnaCB0aGUgcGx1Z2luJ3NcbiAqIGBUb29sUHJvdmlkZXJgIChzZWUgYHBsdWdpbi50c2ApOyB0aGlzIG1vZHVsZSBpcyB0aGUgTWFzdHJhIGhhbGYuXG4gKlxuICogQG1vZHVsZVxuICovXG5cbmltcG9ydCB7IHNlYXJjaCBhcyBzZWFyY2hDb250cmFjdCwgdHlwZSBVcHNlcnRSZXN1bHQgfSBmcm9tIFwiQGRieC10b29scy9zaGFyZWQtc2VhcmNoXCI7XG5pbXBvcnQgeyBjcmVhdGVUb29sIH0gZnJvbSBcIkBtYXN0cmEvY29yZS90b29sc1wiO1xuaW1wb3J0IHsgeiB9IGZyb20gXCJ6b2RcIjtcbmltcG9ydCB7IHRvQ3JlYXRlSW5kZXhPcHRpb25zIH0gZnJvbSBcIi4vaW5kZXgtdG9vbHMudHNcIjtcbmltcG9ydCB7IHRvRG9jdW1lbnRBcnJheSB9IGZyb20gXCIuL3F1ZXJ5LnRzXCI7XG5pbXBvcnQgeyBnZXRTZWFyY2hSdW50aW1lIH0gZnJvbSBcIi4vcnVudGltZS50c1wiO1xuaW1wb3J0IHtcbiAgQUREX0RPQ1VNRU5UU19UT09MX0RFU0NSSVBUSU9OLFxuICBDUkVBVEVfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gIFNZTkNfSU5ERVhfVE9PTF9ERVNDUklQVElPTixcbiAgVU5JVkVSU0FMX1NFQVJDSF9UT09MX0RFU0NSSVBUSU9OLFxuICBjcmVhdGVJbmRleFRvb2xTY2hlbWEsXG4gIGluZGV4SW5mb1NjaGVtYSxcbiAgc2VhcmNoUmVzdWx0U2NoZW1hLFxuICBzZWFyY2hUb29sU2NoZW1hLFxuICBzeW5jSW5kZXhUb29sU2NoZW1hLFxuICB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLFxufSBmcm9tIFwiLi9zY2hlbWEudHNcIjtcblxuLyoqIENvbW1vbiBvcHRpb24gYWNjZXB0ZWQgYnkgZXZlcnkgdG9vbCBmYWN0b3J5OiBvdmVycmlkZSB0aGUgdG9vbCBpZC4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoVG9vbE9wdGlvbnMge1xuICAvKiogT3ZlcnJpZGUgdGhlIHRvb2wgaWQgKGRlZmF1bHRzIHBlciB0b29sKS4gKi9cbiAgaWQ/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQnVpbGQgdGhlIGBzZWFyY2hgIHRvb2wuIFNwcmVhZCBpdCBpbnRvIGFueSBhZ2VudCB0aGF0IHNob3VsZCBiZSBhYmxlIHRvIGxvb2tcbiAqIHRoaW5ncyB1cCBpbiBhbiBpbmRleC5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNlYXJjaFRvb2wgfSBmcm9tIFwiQGRieC10b29scy9zZWFyY2hcIjtcbiAqIGltcG9ydCB7IGNyZWF0ZUFnZW50IH0gZnJvbSBcIkBkYngtdG9vbHMvYXBwa2l0LW1hc3RyYVwiO1xuICpcbiAqIGNvbnN0IHN1cHBvcnQgPSBjcmVhdGVBZ2VudCh7XG4gKiAgIGluc3RydWN0aW9uczogXCJBbnN3ZXIgZnJvbSB0aGUgZG9jcy4gVXNlIGBzZWFyY2hgIHRvIGZpbmQgdGhlbS5cIixcbiAqICAgdG9vbHM6ICgpID0+ICh7IHNlYXJjaDogc2VhcmNoVG9vbCgpIH0pLFxuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNlYXJjaFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJzZWFyY2hcIixcbiAgICBkZXNjcmlwdGlvbjogU0VBUkNIX1RPT0xfREVTQ1JJUFRJT04sXG4gICAgaW5wdXRTY2hlbWE6IHNlYXJjaFRvb2xTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBzZWFyY2hSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gc2VhcmNoVG9vbFNjaGVtYS5wYXJzZShpbnB1dCk7XG4gICAgICBjb25zdCB7IGNsaWVudCB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgcmV0dXJuIGNsaWVudC5zZWFyY2gocmVxdWVzdC5xdWVyeSwge1xuICAgICAgICAuLi4ocmVxdWVzdC5pbmRleCA/IHsgaW5kZXg6IHJlcXVlc3QuaW5kZXggfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QubGltaXQgPyB7IGxpbWl0OiByZXF1ZXN0LmxpbWl0IH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0Lm1vZGUgPyB7IG1vZGU6IHJlcXVlc3QubW9kZSB9IDoge30pLFxuICAgICAgICAuLi4ocmVxdWVzdC5jb2x1bW5zID8geyBjb2x1bW5zOiByZXF1ZXN0LmNvbHVtbnMgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QuZmlsdGVyID8geyBmaWx0ZXI6IHJlcXVlc3QuZmlsdGVyIH0gOiB7fSksXG4gICAgICAgIC4uLihyZXF1ZXN0LnNjb3JlVGhyZXNob2xkICE9PSB1bmRlZmluZWQgPyB7IHNjb3JlVGhyZXNob2xkOiByZXF1ZXN0LnNjb3JlVGhyZXNob2xkIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0Py5hYm9ydFNpZ25hbCA/IHsgc2lnbmFsOiBjb250ZXh0LmFib3J0U2lnbmFsIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIEJ1aWxkIHRoZSBgdW5pdmVyc2FsX3NlYXJjaGAgdG9vbCAoZmVkZXJhdGVkIHNlYXJjaCBhY3Jvc3MgZXZlcnkgaW5kZXgpLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHVuaXZlcnNhbFNlYXJjaFRvb2wob3B0aW9uczogU2VhcmNoVG9vbE9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJ1bml2ZXJzYWxfc2VhcmNoXCIsXG4gICAgZGVzY3JpcHRpb246IFVOSVZFUlNBTF9TRUFSQ0hfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogdW5pdmVyc2FsU2VhcmNoVG9vbFNjaGVtYSxcbiAgICBvdXRwdXRTY2hlbWE6IHNlYXJjaFJlc3VsdFNjaGVtYSxcbiAgICBleGVjdXRlOiBhc3luYyAoaW5wdXQsIGNvbnRleHQpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSB1bml2ZXJzYWxTZWFyY2hUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICByZXR1cm4gY2xpZW50LnVuaXZlcnNhbFNlYXJjaChyZXF1ZXN0LnF1ZXJ5LCB7XG4gICAgICAgIC4uLihyZXF1ZXN0LmluZGV4ZXMgPyB7IGluZGV4ZXM6IHJlcXVlc3QuaW5kZXhlcyB9IDoge30pLFxuICAgICAgICAuLi4ocmVxdWVzdC5saW1pdCA/IHsgbGltaXQ6IHJlcXVlc3QubGltaXQgfSA6IHt9KSxcbiAgICAgICAgLi4uKHJlcXVlc3QubW9kZSA/IHsgbW9kZTogcmVxdWVzdC5tb2RlIH0gOiB7fSksXG4gICAgICAgIC4uLihjb250ZXh0Py5hYm9ydFNpZ25hbCA/IHsgc2lnbmFsOiBjb250ZXh0LmFib3J0U2lnbmFsIH0gOiB7fSksXG4gICAgICB9KTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqXG4gKiBCdWlsZCB0aGUgb3B0LWluIGBhZGRfZG9jdW1lbnRzYCB0b29sICh3cml0ZSBpbnRvIGEgZGlyZWN0LWFjY2VzcyBpbmRleCkuXG4gKiBPbmx5IGluc3RhbGwgaXQgd2hlbiB0aGUgcGx1Z2luJ3Mgd3JpdGUgc3VyZmFjZSBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYWRkRG9jdW1lbnRzVG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIGNvbnN0IGlucHV0U2NoZW1hID0gc2VhcmNoQ29udHJhY3Quc2VhcmNoRG9jdW1lbnRTY2hlbWFcbiAgICAuYXJyYXkoKVxuICAgIC5kZXNjcmliZShcIkRvY3VtZW50cyB0byBhZGQgb3IgdXBkYXRlLiBFYWNoIG11c3QgaW5jbHVkZSB0aGUgaW5kZXggcHJpbWFyeSBrZXkuXCIpO1xuICByZXR1cm4gY3JlYXRlVG9vbCh7XG4gICAgaWQ6IG9wdGlvbnMuaWQgPz8gXCJhZGRfZG9jdW1lbnRzXCIsXG4gICAgZGVzY3JpcHRpb246IEFERF9ET0NVTUVOVFNfVE9PTF9ERVNDUklQVElPTixcbiAgICBpbnB1dFNjaGVtYTogc2VhcmNoQ29udHJhY3Quc2VhcmNoUmVxdWVzdFNjaGVtYVxuICAgICAgLnBpY2soeyBpbmRleDogdHJ1ZSB9KVxuICAgICAgLmV4dGVuZCh7IGRvY3VtZW50czogaW5wdXRTY2hlbWEgfSksXG4gICAgb3V0cHV0U2NoZW1hOiBzZWFyY2hDb250cmFjdC51cHNlcnRSZXN1bHRTY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KTogUHJvbWlzZTxVcHNlcnRSZXN1bHQ+ID0+IHtcbiAgICAgIGNvbnN0IHsgY2xpZW50LCBjb25maWcgfSA9IGdldFNlYXJjaFJ1bnRpbWUoKTtcbiAgICAgIGNvbnN0IHJlY29yZCA9IGlucHV0IGFzIHsgaW5kZXg/OiBzdHJpbmc7IGRvY3VtZW50czogdW5rbm93biB9O1xuICAgICAgY29uc3QgZG9jdW1lbnRzID0gdG9Eb2N1bWVudEFycmF5KHJlY29yZC5kb2N1bWVudHMpO1xuICAgICAgY29uc3QgaW5kZXggPSByZWNvcmQuaW5kZXggPz8gY29uZmlnLmRlZmF1bHRJbmRleCA/PyBcIlwiO1xuICAgICAgcmV0dXJuIGNsaWVudC5hZGREb2N1bWVudHMoaW5kZXgsIGRvY3VtZW50cywgY29udGV4dD8uYWJvcnRTaWduYWwpO1xuICAgIH0sXG4gIH0pO1xufVxuXG4vKipcbiAqIEJ1aWxkIHRoZSBvcHQtaW4gYGNyZWF0ZV9pbmRleGAgdG9vbCAocHJvdmlzaW9uIGEgVmVjdG9yIFNlYXJjaCBpbmRleCkuXG4gKiBPbmx5IGluc3RhbGwgaXQgd2hlbiB0aGUgcGx1Z2luJ3Mgd3JpdGUgc3VyZmFjZSBpcyBlbmFibGVkLiBEZWxlZ2F0ZXMgdG9cbiAqIHtAbGluayBTZWFyY2hDbGllbnQuY3JlYXRlSW5kZXh9LCBpbmZlcnJpbmcgdGhlIGVuZHBvaW50LCBlbWJlZGRpbmcgbW9kZWwsXG4gKiBrZXksIGFuZCBjb2x1bW5zIGZyb20gdGhlIHJlcXVlc3QgKyBwbHVnaW4gY29uZmlnLlxuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlSW5kZXhUb29sKG9wdGlvbnM6IFNlYXJjaFRvb2xPcHRpb25zID0ge30pIHtcbiAgcmV0dXJuIGNyZWF0ZVRvb2woe1xuICAgIGlkOiBvcHRpb25zLmlkID8/IFwiY3JlYXRlX2luZGV4XCIsXG4gICAgZGVzY3JpcHRpb246IENSRUFURV9JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBjcmVhdGVJbmRleFRvb2xTY2hlbWEsXG4gICAgb3V0cHV0U2NoZW1hOiBpbmRleEluZm9TY2hlbWEsXG4gICAgZXhlY3V0ZTogYXN5bmMgKGlucHV0LCBjb250ZXh0KSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gY3JlYXRlSW5kZXhUb29sU2NoZW1hLnBhcnNlKGlucHV0KTtcbiAgICAgIGNvbnN0IHsgY2xpZW50IH0gPSBnZXRTZWFyY2hSdW50aW1lKCk7XG4gICAgICByZXR1cm4gY2xpZW50LmNyZWF0ZUluZGV4KHJlcXVlc3QubmFtZSwgdG9DcmVhdGVJbmRleE9wdGlvbnMocmVxdWVzdCwgY29udGV4dD8uYWJvcnRTaWduYWwpKTtcbiAgICB9LFxuICB9KTtcbn1cblxuLyoqIE91dHB1dCBzY2hlbWEgZm9yIHRoZSBgc3luY19pbmRleGAgdG9vbC4gKi9cbmNvbnN0IHN5bmNJbmRleFJlc3VsdFNjaGVtYSA9IHoub2JqZWN0KHtcbiAgaW5kZXg6IHouc3RyaW5nKCkuZGVzY3JpYmUoXCJUaGUgaW5kZXggdGhhdCB3YXMgc3luY2VkLlwiKSxcbiAgc3luY2VkOiB6LmJvb2xlYW4oKS5kZXNjcmliZShcIlRydWUgb25jZSB0aGUgc3luYyB3YXMgdHJpZ2dlcmVkLlwiKSxcbn0pO1xuXG4vKipcbiAqIEJ1aWxkIHRoZSBvcHQtaW4gYHN5bmNfaW5kZXhgIHRvb2wgKHJlZnJlc2ggYSBEZWx0YSBTeW5jIGluZGV4IGZyb20gaXRzXG4gKiBzb3VyY2UgdGFibGUpLiBPbmx5IGluc3RhbGwgaXQgd2hlbiB0aGUgcGx1Z2luJ3Mgd3JpdGUgc3VyZmFjZSBpcyBlbmFibGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gc3luY0luZGV4VG9vbChvcHRpb25zOiBTZWFyY2hUb29sT3B0aW9ucyA9IHt9KSB7XG4gIHJldHVybiBjcmVhdGVUb29sKHtcbiAgICBpZDogb3B0aW9ucy5pZCA/PyBcInN5bmNfaW5kZXhcIixcbiAgICBkZXNjcmlwdGlvbjogU1lOQ19JTkRFWF9UT09MX0RFU0NSSVBUSU9OLFxuICAgIGlucHV0U2NoZW1hOiBzeW5jSW5kZXhUb29sU2NoZW1hLFxuICAgIG91dHB1dFNjaGVtYTogc3luY0luZGV4UmVzdWx0U2NoZW1hLFxuICAgIGV4ZWN1dGU6IGFzeW5jIChpbnB1dCwgY29udGV4dCkgPT4ge1xuICAgICAgY29uc3QgcmVxdWVzdCA9IHN5bmNJbmRleFRvb2xTY2hlbWEucGFyc2UoaW5wdXQpO1xuICAgICAgY29uc3QgeyBjbGllbnQsIGNvbmZpZyB9ID0gZ2V0U2VhcmNoUnVudGltZSgpO1xuICAgICAgY29uc3QgaW5kZXggPSByZXF1ZXN0LmluZGV4ID8/IGNvbmZpZy5kZWZhdWx0SW5kZXggPz8gXCJcIjtcbiAgICAgIGF3YWl0IGNsaWVudC5zeW5jSW5kZXgoaW5kZXgsIGNvbnRleHQ/LmFib3J0U2lnbmFsKTtcbiAgICAgIHJldHVybiB7IGluZGV4LCBzeW5jZWQ6IHRydWUgfTtcbiAgICB9LFxuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1 @@
1
+ {"root":["../src/client.ts","../src/config.ts","../src/index-tools.ts","../src/lakebase.ts","../src/plugin.ts","../src/query.ts","../src/runtime.ts","../src/schema.ts","../src/tool.ts","../index.ts"],"version":"5.9.3"}
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "name": "@dbx-tools/search",
3
+ "repository": {
4
+ "type": "git",
5
+ "url": "git+https://github.com/reggie-db/dbx-tools.git",
6
+ "directory": "packages/node/search"
7
+ },
8
+ "devDependencies": {
9
+ "@types/express": "^5.0.5",
10
+ "@types/json-schema": "^7",
11
+ "@types/node": "^24.6.0",
12
+ "@types/pg": "^8",
13
+ "tsx": "^4.23.0",
14
+ "typescript": "^5.9.3"
15
+ },
16
+ "dependencies": {
17
+ "@databricks/appkit": "^0.43.0",
18
+ "@databricks/sdk-experimental": "^0.17.0",
19
+ "@mastra/core": "^1.47.0",
20
+ "pg": "^8.22.0",
21
+ "zod": "4.3.6",
22
+ "@dbx-tools/appkit": "0.6.9",
23
+ "@dbx-tools/model": "0.6.9",
24
+ "@dbx-tools/shared-search": "0.6.9",
25
+ "@dbx-tools/shared-model": "0.6.9",
26
+ "@dbx-tools/shared-core": "0.6.9"
27
+ },
28
+ "main": "./lib/index.js",
29
+ "license": "UNLICENSED",
30
+ "publishConfig": {
31
+ "access": "public"
32
+ },
33
+ "version": "0.6.9",
34
+ "types": "./lib/index.d.ts",
35
+ "type": "module",
36
+ "exports": {
37
+ ".": {
38
+ "types": "./lib/index.d.ts",
39
+ "default": "./lib/index.js"
40
+ },
41
+ "./package.json": "./package.json"
42
+ },
43
+ "files": [
44
+ "index.ts",
45
+ "src",
46
+ "lib"
47
+ ],
48
+ "dbxToolsConfig": {
49
+ "tags": [
50
+ "node"
51
+ ]
52
+ },
53
+ "//": "~~ Generated by projen. To modify, edit .projenrc.js and run \"pnpm exec projen\".",
54
+ "scripts": {
55
+ "build": "projen build",
56
+ "compile": "projen compile",
57
+ "default": "projen default",
58
+ "package": "projen package",
59
+ "post-compile": "projen post-compile",
60
+ "pre-compile": "projen pre-compile",
61
+ "test": "projen test",
62
+ "watch": "projen watch",
63
+ "projen": "projen"
64
+ }
65
+ }