@databricks/appkit 0.23.0 → 0.25.0

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.
Files changed (88) hide show
  1. package/CLAUDE.md +9 -1
  2. package/dist/appkit/package.js +1 -1
  3. package/dist/cache/index.js.map +1 -1
  4. package/dist/cli/commands/docs.js +7 -1
  5. package/dist/cli/commands/docs.js.map +1 -1
  6. package/dist/cli/commands/generate-types.js +20 -10
  7. package/dist/cli/commands/generate-types.js.map +1 -1
  8. package/dist/cli/commands/lint.js +3 -1
  9. package/dist/cli/commands/lint.js.map +1 -1
  10. package/dist/cli/commands/plugin/add-resource/add-resource.js +73 -8
  11. package/dist/cli/commands/plugin/add-resource/add-resource.js.map +1 -1
  12. package/dist/cli/commands/plugin/create/create.js +164 -20
  13. package/dist/cli/commands/plugin/create/create.js.map +1 -1
  14. package/dist/cli/commands/plugin/create/resource-defaults.js +5 -1
  15. package/dist/cli/commands/plugin/create/resource-defaults.js.map +1 -1
  16. package/dist/cli/commands/plugin/index.js +7 -1
  17. package/dist/cli/commands/plugin/index.js.map +1 -1
  18. package/dist/cli/commands/plugin/list/list.js +7 -1
  19. package/dist/cli/commands/plugin/list/list.js.map +1 -1
  20. package/dist/cli/commands/plugin/sync/sync.js +27 -14
  21. package/dist/cli/commands/plugin/sync/sync.js.map +1 -1
  22. package/dist/cli/commands/plugin/validate/validate.js +39 -9
  23. package/dist/cli/commands/plugin/validate/validate.js.map +1 -1
  24. package/dist/cli/commands/setup.js +6 -5
  25. package/dist/cli/commands/setup.js.map +1 -1
  26. package/dist/connectors/index.js +1 -0
  27. package/dist/connectors/lakebase/index.js.map +1 -1
  28. package/dist/connectors/lakebase-v1/client.js.map +1 -1
  29. package/dist/connectors/vector-search/client.js +9 -0
  30. package/dist/connectors/vector-search/client.js.map +1 -0
  31. package/dist/connectors/vector-search/index.js +3 -0
  32. package/dist/context/execution-context.js +1 -7
  33. package/dist/context/execution-context.js.map +1 -1
  34. package/dist/context/index.js +1 -1
  35. package/dist/context/index.js.map +1 -1
  36. package/dist/index.d.ts +2 -1
  37. package/dist/index.js +2 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/plugin/dev-reader.js.map +1 -1
  40. package/dist/plugins/files/plugin.d.ts +46 -15
  41. package/dist/plugins/files/plugin.d.ts.map +1 -1
  42. package/dist/plugins/files/plugin.js +182 -103
  43. package/dist/plugins/files/plugin.js.map +1 -1
  44. package/dist/plugins/files/policy.d.ts +45 -0
  45. package/dist/plugins/files/policy.d.ts.map +1 -0
  46. package/dist/plugins/files/policy.js +63 -0
  47. package/dist/plugins/files/policy.js.map +1 -0
  48. package/dist/plugins/files/types.d.ts +16 -8
  49. package/dist/plugins/files/types.d.ts.map +1 -1
  50. package/dist/plugins/server/vite-dev-server.js.map +1 -1
  51. package/dist/plugins/serving/serving.d.ts.map +1 -1
  52. package/dist/plugins/serving/serving.js +22 -8
  53. package/dist/plugins/serving/serving.js.map +1 -1
  54. package/dist/plugins/serving/types.d.ts +11 -10
  55. package/dist/plugins/serving/types.d.ts.map +1 -1
  56. package/dist/type-generator/index.js +13 -1
  57. package/dist/type-generator/index.js.map +1 -1
  58. package/dist/type-generator/migration.js +155 -0
  59. package/dist/type-generator/migration.js.map +1 -0
  60. package/dist/type-generator/serving/generator.js +22 -1
  61. package/dist/type-generator/serving/generator.js.map +1 -1
  62. package/dist/type-generator/serving/vite-plugin.d.ts +1 -1
  63. package/dist/type-generator/serving/vite-plugin.js +2 -2
  64. package/dist/type-generator/serving/vite-plugin.js.map +1 -1
  65. package/dist/type-generator/vite-plugin.d.ts.map +1 -1
  66. package/dist/type-generator/vite-plugin.js +3 -4
  67. package/dist/type-generator/vite-plugin.js.map +1 -1
  68. package/docs/api/appkit/Class.PolicyDeniedError.md +52 -0
  69. package/docs/api/appkit/Interface.FilePolicyUser.md +23 -0
  70. package/docs/api/appkit/Interface.FileResource.md +36 -0
  71. package/docs/api/appkit/TypeAlias.FileAction.md +18 -0
  72. package/docs/api/appkit/TypeAlias.FilePolicy.md +20 -0
  73. package/docs/api/appkit/TypeAlias.ServingFactory.md +9 -5
  74. package/docs/api/appkit/Variable.READ_ACTIONS.md +8 -0
  75. package/docs/api/appkit/Variable.WRITE_ACTIONS.md +8 -0
  76. package/docs/api/appkit.md +19 -12
  77. package/docs/development/type-generation.md +6 -5
  78. package/docs/faq.md +8 -8
  79. package/docs/plugins/analytics.md +1 -1
  80. package/docs/plugins/custom-plugins.md +4 -0
  81. package/docs/plugins/execution-context.md +0 -1
  82. package/docs/plugins/files.md +150 -2
  83. package/docs/plugins/{serving.md → model-serving.md} +1 -1
  84. package/docs/plugins/plugin-management.md +22 -6
  85. package/docs/plugins/vector-search.md +247 -0
  86. package/llms.txt +9 -1
  87. package/package.json +1 -1
  88. package/sbom.cdx.json +1 -1
@@ -0,0 +1,247 @@
1
+ # Vector Search plugin
2
+
3
+ Query Databricks Vector Search indexes with hybrid search, reranking, and cursor pagination from your AppKit application.
4
+
5
+ **Key features:**
6
+
7
+ * Named index aliases for multiple Vector Search indexes
8
+ * Hybrid, ANN, and full-text query modes
9
+ * Optional reranking with column-level control
10
+ * Cursor-based pagination for large result sets
11
+ * Service principal (default) and on-behalf-of-user auth
12
+ * Self-managed embedding indexes via custom `embeddingFn`
13
+
14
+ ## Basic usage[​](#basic-usage "Direct link to Basic usage")
15
+
16
+ ```ts
17
+ import { createApp, vectorSearch, server } from "@databricks/appkit";
18
+
19
+ await createApp({
20
+ plugins: [
21
+ server(),
22
+ vectorSearch({
23
+ indexes: {
24
+ products: {
25
+ indexName: "catalog.schema.products_idx",
26
+ columns: ["id", "name", "description"],
27
+ queryType: "hybrid",
28
+ numResults: 20,
29
+ },
30
+ },
31
+ }),
32
+ ],
33
+ });
34
+
35
+ ```
36
+
37
+ ## Configuration options[​](#configuration-options "Direct link to Configuration options")
38
+
39
+ | Option | Type | Default | Description |
40
+ | --------- | ----------------------------- | ------- | -------------------------------------------------------- |
41
+ | `indexes` | `Record<string, IndexConfig>` | — | **Required.** Map of alias names to index configurations |
42
+ | `timeout` | `number` | `30000` | Query timeout in ms |
43
+
44
+ ### Index aliases[​](#index-aliases "Direct link to Index aliases")
45
+
46
+ Index aliases let you reference multiple Vector Search indexes by name. The alias is used in API routes and programmatic calls:
47
+
48
+ ```ts
49
+ vectorSearch({
50
+ indexes: {
51
+ products: {
52
+ indexName: "catalog.schema.products_idx",
53
+ columns: ["id", "name", "description"],
54
+ },
55
+ docs: {
56
+ indexName: "catalog.schema.docs_idx",
57
+ columns: ["id", "title", "content", "url"],
58
+ queryType: "full_text",
59
+ },
60
+ },
61
+ });
62
+
63
+ ```
64
+
65
+ ## IndexConfig[​](#indexconfig "Direct link to IndexConfig")
66
+
67
+ | Field | Type | Default | Description |
68
+ | -------------- | -------------------------------------------- | --------------------- | ------------------------------------------------------------------------------- |
69
+ | `indexName` | `string` | — | **Required.** Three-level Unity Catalog name (`catalog.schema.index`) |
70
+ | `columns` | `string[]` | — | **Required.** Columns to return in query results |
71
+ | `queryType` | `"ann" \| "hybrid" \| "full_text"` | `"hybrid"` | Search mode |
72
+ | `numResults` | `number` | `20` | Maximum results per query |
73
+ | `reranker` | `boolean \| { columnsToRerank: string[] }` | — | Enable reranking. Pass `true` to rerank all result columns, or specify a subset |
74
+ | `auth` | `"service-principal" \| "on-behalf-of-user"` | `"service-principal"` | Authentication mode for query execution |
75
+ | `pagination` | `boolean` | — | Enable cursor-based pagination |
76
+ | `endpointName` | `string` | — | Vector Search endpoint name. Required when `pagination` is `true` |
77
+ | `embeddingFn` | `(text: string) => Promise<number[]>` | — | Custom embedding function for self-managed embedding indexes |
78
+
79
+ ### Query types[​](#query-types "Direct link to Query types")
80
+
81
+ * **`hybrid`** — Combines vector similarity and keyword search. Best for general-purpose retrieval.
82
+ * **`ann`** — Approximate nearest neighbor search using embeddings only. Best for semantic similarity.
83
+ * **`full_text`** — Keyword-based search with no embedding required.
84
+
85
+ ### Reranking[​](#reranking "Direct link to Reranking")
86
+
87
+ Reranking improves result relevance by running a second-stage model over the initial candidates:
88
+
89
+ ```ts
90
+ vectorSearch({
91
+ indexes: {
92
+ products: {
93
+ indexName: "catalog.schema.products_idx",
94
+ columns: ["id", "name", "description", "category"],
95
+ reranker: { columnsToRerank: ["name", "description"] },
96
+ },
97
+ },
98
+ });
99
+
100
+ ```
101
+
102
+ Pass `reranker: true` to rerank across all returned columns.
103
+
104
+ ### On-behalf-of-user auth[​](#on-behalf-of-user-auth "Direct link to On-behalf-of-user auth")
105
+
106
+ By default, queries run as the app's service principal. Set `auth: "on-behalf-of-user"` to execute queries as the signed-in user instead:
107
+
108
+ ```ts
109
+ vectorSearch({
110
+ indexes: {
111
+ documents: {
112
+ indexName: "catalog.schema.documents_idx",
113
+ columns: ["id", "title", "body"],
114
+ auth: "on-behalf-of-user",
115
+ },
116
+ },
117
+ });
118
+
119
+ ```
120
+
121
+ ### Pagination[​](#pagination "Direct link to Pagination")
122
+
123
+ Enable cursor pagination to page through large result sets:
124
+
125
+ ```ts
126
+ vectorSearch({
127
+ indexes: {
128
+ products: {
129
+ indexName: "catalog.schema.products_idx",
130
+ columns: ["id", "name", "description"],
131
+ pagination: true,
132
+ endpointName: "my-vector-search-endpoint",
133
+ },
134
+ },
135
+ });
136
+
137
+ ```
138
+
139
+ `endpointName` is required when `pagination` is `true`. Use the `/:alias/next-page` route to fetch subsequent pages.
140
+
141
+ ### Self-managed embedding indexes[​](#self-managed-embedding-indexes "Direct link to Self-managed embedding indexes")
142
+
143
+ For indexes that manage their own embeddings, provide an `embeddingFn` that takes a query string and returns a vector:
144
+
145
+ ```ts
146
+ import { embed } from "./my-embedding-client";
147
+
148
+ vectorSearch({
149
+ indexes: {
150
+ products: {
151
+ indexName: "catalog.schema.products_idx",
152
+ columns: ["id", "name", "description"],
153
+ queryType: "ann",
154
+ embeddingFn: (text) => embed(text),
155
+ },
156
+ },
157
+ });
158
+
159
+ ```
160
+
161
+ ## HTTP routes[​](#http-routes "Direct link to HTTP routes")
162
+
163
+ Routes are mounted at `/api/vector-search`.
164
+
165
+ | Method | Path | Description |
166
+ | ------ | ------------------- | ------------------------------------------------------------ |
167
+ | `POST` | `/:alias/query` | Query an index by alias |
168
+ | `POST` | `/:alias/next-page` | Fetch the next page of results (requires `pagination: true`) |
169
+ | `GET` | `/:alias/config` | Return the resolved config for an index alias |
170
+
171
+ ### Query an index[​](#query-an-index "Direct link to Query an index")
172
+
173
+ ```text
174
+ POST /api/vector-search/:alias/query
175
+ Content-Type: application/json
176
+
177
+ {
178
+ "queryText": "machine learning guide",
179
+ "numResults": 10
180
+ }
181
+
182
+ ```
183
+
184
+ Response:
185
+
186
+ ```json
187
+ {
188
+ "results": [
189
+ { "id": "42", "name": "Intro to ML", "description": "..." }
190
+ ],
191
+ "nextPageToken": "eyJvZmZzZXQiOjEwfQ=="
192
+ }
193
+
194
+ ```
195
+
196
+ `nextPageToken` is only present when `pagination` is enabled and more results are available.
197
+
198
+ ### Fetch the next page[​](#fetch-the-next-page "Direct link to Fetch the next page")
199
+
200
+ ```text
201
+ POST /api/vector-search/:alias/next-page
202
+ Content-Type: application/json
203
+
204
+ {
205
+ "queryText": "machine learning guide",
206
+ "pageToken": "eyJvZmZzZXQiOjEwfQ=="
207
+ }
208
+
209
+ ```
210
+
211
+ ### Get index config[​](#get-index-config "Direct link to Get index config")
212
+
213
+ ```text
214
+ GET /api/vector-search/:alias/config
215
+
216
+ ```
217
+
218
+ Returns the resolved `IndexConfig` for the alias (excluding `embeddingFn`).
219
+
220
+ ## Programmatic access[​](#programmatic-access "Direct link to Programmatic access")
221
+
222
+ The plugin exposes a `query` method for server-side use:
223
+
224
+ ```ts
225
+ const AppKit = await createApp({
226
+ plugins: [
227
+ server(),
228
+ vectorSearch({
229
+ indexes: {
230
+ products: {
231
+ indexName: "catalog.schema.products_idx",
232
+ columns: ["id", "name", "description"],
233
+ },
234
+ },
235
+ }),
236
+ ],
237
+ });
238
+
239
+ const result = await AppKit.vectorSearch.query("products", {
240
+ queryText: "machine learning guide",
241
+ });
242
+
243
+ console.log(result.results);
244
+
245
+ ```
246
+
247
+ Pass optional overrides as a second argument to `query` to adjust `numResults` or other per-call settings.
package/llms.txt CHANGED
@@ -49,9 +49,10 @@ npx @databricks/appkit docs <query>
49
49
  - [Files plugin](./docs/plugins/files.md): File operations against Databricks Unity Catalog Volumes. Supports listing, reading, downloading, uploading, deleting, and previewing files with built-in caching, retry, and timeout handling via the execution interceptor pipeline.
50
50
  - [Genie plugin](./docs/plugins/genie.md): Integrates Databricks AI/BI Genie spaces into your AppKit application, enabling natural language data queries via a conversational interface.
51
51
  - [Lakebase plugin](./docs/plugins/lakebase.md): Provides a PostgreSQL connection pool for Databricks Lakebase Autoscaling with automatic OAuth token refresh.
52
+ - [Model Serving plugin](./docs/plugins/model-serving.md): Provides an authenticated proxy to Databricks Model Serving endpoints, with invoke and streaming support.
52
53
  - [Plugin management](./docs/plugins/plugin-management.md): AppKit includes a CLI for managing plugins. All commands are available under npx @databricks/appkit plugin.
53
54
  - [Server plugin](./docs/plugins/server.md): Provides HTTP server capabilities with development and production modes.
54
- - [Serving plugin](./docs/plugins/serving.md): Provides an authenticated proxy to Databricks Model Serving endpoints, with invoke and streaming support.
55
+ - [Vector Search plugin](./docs/plugins/vector-search.md): Query Databricks Vector Search indexes with hybrid search, reranking, and cursor pagination from your AppKit application.
55
56
 
56
57
  ## appkit API reference [collapsed]
57
58
 
@@ -63,6 +64,7 @@ npx @databricks/appkit docs <query>
63
64
  - [Class: ExecutionError](./docs/api/appkit/Class.ExecutionError.md): Error thrown when an operation execution fails.
64
65
  - [Class: InitializationError](./docs/api/appkit/Class.InitializationError.md): Error thrown when a service or component is not properly initialized.
65
66
  - [Abstract Class: Plugin<TConfig>](./docs/api/appkit/Class.Plugin.md): Base abstract class for creating AppKit plugins.
67
+ - [Class: PolicyDeniedError](./docs/api/appkit/Class.PolicyDeniedError.md): Thrown when a policy denies an action.
66
68
  - [Class: ResourceRegistry](./docs/api/appkit/Class.ResourceRegistry.md): Central registry for tracking plugin resource requirements.
67
69
  - [Class: ServerError](./docs/api/appkit/Class.ServerError.md): Error thrown when server lifecycle operations fail.
68
70
  - [Class: TunnelError](./docs/api/appkit/Class.TunnelError.md): Error thrown when remote tunnel operations fail.
@@ -88,6 +90,8 @@ npx @databricks/appkit docs <query>
88
90
  - [Interface: CacheConfig](./docs/api/appkit/Interface.CacheConfig.md): Configuration for the CacheInterceptor. Controls TTL, size limits, storage backend, and probabilistic cleanup.
89
91
  - [Interface: DatabaseCredential](./docs/api/appkit/Interface.DatabaseCredential.md): Database credentials with OAuth token for Postgres connection
90
92
  - [Interface: EndpointConfig](./docs/api/appkit/Interface.EndpointConfig.md): Properties
93
+ - [Interface: FilePolicyUser](./docs/api/appkit/Interface.FilePolicyUser.md): Minimal user identity passed to the policy function.
94
+ - [Interface: FileResource](./docs/api/appkit/Interface.FileResource.md): Describes the file or directory being acted upon.
91
95
  - [Interface: GenerateDatabaseCredentialRequest](./docs/api/appkit/Interface.GenerateDatabaseCredentialRequest.md): Request parameters for generating database OAuth credentials
92
96
  - [Interface: ITelemetry](./docs/api/appkit/Interface.ITelemetry.md): Plugin-facing interface for OpenTelemetry instrumentation.
93
97
  - [Interface: LakebasePoolConfig](./docs/api/appkit/Interface.LakebasePoolConfig.md): Configuration for creating a Lakebase connection pool
@@ -104,12 +108,16 @@ npx @databricks/appkit docs <query>
104
108
  - [Interface: ValidationResult](./docs/api/appkit/Interface.ValidationResult.md): Result of validating all registered resources against the environment.
105
109
  - [Type Alias: ConfigSchema](./docs/api/appkit/TypeAlias.ConfigSchema.md): Configuration schema definition for plugin config.
106
110
  - [Type Alias: ExecutionResult<T>](./docs/api/appkit/TypeAlias.ExecutionResult.md): Discriminated union for plugin execution results.
111
+ - [Type Alias: FileAction](./docs/api/appkit/TypeAlias.FileAction.md): Every action the files plugin can perform.
112
+ - [Type Alias: FilePolicy()](./docs/api/appkit/TypeAlias.FilePolicy.md): A policy function that decides whether user may perform action on
107
113
  - [Type Alias: IAppRouter](./docs/api/appkit/TypeAlias.IAppRouter.md): Express router type for plugin route registration
108
114
  - [Type Alias: PluginData<T, U, N>](./docs/api/appkit/TypeAlias.PluginData.md): Tuple of plugin class, config, and name. Created by toPlugin() and passed to createApp().
109
115
  - [Type Alias: ResourcePermission](./docs/api/appkit/TypeAlias.ResourcePermission.md): Union of all possible permission levels across all resource types.
110
116
  - [Type Alias: ServingFactory](./docs/api/appkit/TypeAlias.ServingFactory.md): Factory function returned by AppKit.serving.
111
117
  - [Type Alias: ToPlugin()<T, U, N>](./docs/api/appkit/TypeAlias.ToPlugin.md): Factory function type returned by toPlugin(). Accepts optional config and returns a PluginData tuple.
118
+ - [Variable: READ_ACTIONS](./docs/api/appkit/Variable.READ_ACTIONS.md): Actions that only read data.
112
119
  - [Variable: sql](./docs/api/appkit/Variable.sql.md): SQL helper namespace
120
+ - [Variable: WRITE_ACTIONS](./docs/api/appkit/Variable.WRITE_ACTIONS.md): Actions that mutate data.
113
121
 
114
122
  ## appkit-ui API reference [collapsed]
115
123
 
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@databricks/appkit",
3
3
  "type": "module",
4
- "version": "0.23.0",
4
+ "version": "0.25.0",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
7
7
  "packageManager": "pnpm@10.21.0",