@dbx-tools/appkit-lakebox 0.9.131 → 0.9.136

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/README.md CHANGED
@@ -1,105 +1,198 @@
1
1
  # @dbx-tools/appkit-lakebox
2
2
 
3
- Give every user of a Databricks App a terminal, a desktop, and long-running
4
- services in one shared, lazily created Databricks Lakebox.
5
-
6
- - One Lakebox per app, created on first use by the app service principal and
7
- stopped by the platform after its idle timeout. Databricks assigns the
8
- machine name; users see only the Lakebox product label.
9
- - Each signed-in user gets a locked, non-sudo Linux account with a persistent
10
- home. Other users cannot read the home or reach the user's service ports.
11
- - Services run OCI images detached with direct crun. Terminal and desktop are
12
- built-in services. Saved services restart when the Lakebox starts.
13
- - Every service is reachable at `/lakebox/<user hash>/<service>` behind the
14
- app's authentication.
15
- - Agent tools, a Mastra workspace sandbox, and live machine metrics.
3
+ Give each authenticated Databricks App user a persistent Linux home, terminal,
4
+ desktop, OCI image services, agent tools, and machine metrics in one shared
5
+ Databricks Lakebox.
16
6
 
17
7
  ## Register the plugin
18
8
 
19
9
  ```ts
20
10
  import { createApp, lakebase, server } from "@databricks/appkit";
21
- import { lakebox } from "@dbx-tools/appkit-lakebox";
11
+ import { lakebox, LakeboxRuntime } from "@dbx-tools/appkit-lakebox";
12
+ import { resolveLakeboxPluginConfig } from "@dbx-tools/appkit-lakebox/config";
13
+
14
+ const runtime = new LakeboxRuntime(resolveLakeboxPluginConfig({ idleTimeoutSeconds: 1_800 }));
22
15
 
23
- await createApp({ plugins: [server(), lakebase(), lakebox({ idleTimeoutSeconds: 1_800 })] });
16
+ await createApp({
17
+ plugins: [server(), lakebase(), lakebox({ runtime })],
18
+ });
24
19
  ```
25
20
 
26
21
  Lakebase persists the Databricks-assigned Lakebox ID, serializes first creation
27
- across app replicas, and retains last-known service definitions while the
28
- machine is stopped. The registry adopts an existing
29
- `dbx-lakebox-<application>` machine once, but new machines use the name
30
- Databricks assigns. Startup also deletes legacy per-user
31
- `dbx-<adjective>-<animal>-<nonce>` Lakeboxes and drops legacy Sandbox ownership
32
- schemas; no user data is migrated between machines.
22
+ across app replicas, and retains the last observed service definitions while
23
+ the machine is stopped. Register AppKit's `lakebase()` plugin before users
24
+ access Lakebox routes.
33
25
 
34
- To share the runtime with Mastra, create it once:
26
+ ## Connect Mastra to the same runtime
27
+
28
+ Pass the same `LakeboxRuntime` to the AppKit plugin and Mastra sandbox. This
29
+ keeps commands, services, routes, metrics, and user accounts on the same
30
+ Lakebox:
35
31
 
36
32
  ```ts
33
+ import { createApp, lakebase, server } from "@databricks/appkit";
37
34
  import { lakebox, LakeboxRuntime } from "@dbx-tools/appkit-lakebox";
38
35
  import { resolveLakeboxPluginConfig } from "@dbx-tools/appkit-lakebox/config";
39
36
  import { lakeboxSkillMounts } from "@dbx-tools/appkit-lakebox/skills";
40
37
  import { lakeboxWorkspaceSandbox } from "@dbx-tools/appkit-lakebox/workspace";
38
+ import { agents, mastra } from "@dbx-tools/appkit-mastra";
41
39
 
42
40
  const runtime = new LakeboxRuntime(resolveLakeboxPluginConfig());
41
+ const analyst = agents.createAgent({
42
+ name: "Analyst",
43
+ instructions: "Use the workspace when the task requires files or commands.",
44
+ });
45
+
46
+ await createApp({
47
+ plugins: [
48
+ server(),
49
+ lakebase(),
50
+ lakebox({ runtime }),
51
+ mastra({
52
+ agents: { analyst },
53
+ sandbox: lakeboxWorkspaceSandbox(runtime),
54
+ localSkillMounts: lakeboxSkillMounts(),
55
+ }),
56
+ ],
57
+ });
58
+ ```
43
59
 
44
- lakebox({ runtime });
45
- mastra({ sandbox: lakeboxWorkspaceSandbox(runtime), localSkillMounts: lakeboxSkillMounts() });
60
+ The sandbox resolves the authenticated Mastra user for each request. It doesn't
61
+ create compute during agent registration. The first command or service starts
62
+ the Lakebox when `auto` is enabled.
63
+
64
+ ## Render the Lakebox UI
65
+
66
+ Register the backend plugin, then render the React package in the same
67
+ application:
68
+
69
+ ```tsx
70
+ import { LakeboxIndicator, LakeboxPanel } from "@dbx-tools/ui-lakebox/react";
71
+
72
+ export function LakeboxPage() {
73
+ return (
74
+ <>
75
+ <LakeboxIndicator />
76
+ <LakeboxPanel />
77
+ </>
78
+ );
79
+ }
46
80
  ```
47
81
 
82
+ Import the package stylesheet after your AppKit UI theme:
83
+
84
+ ```css
85
+ @import "@dbx-tools/ui-lakebox/styles.css";
86
+ ```
87
+
88
+ The components read the API base path from the plugin's published client
89
+ configuration. You don't need to copy route strings or pass Databricks
90
+ credentials to the browser.
91
+
48
92
  ## Create a service
49
93
 
50
- Agents call `create_lakebox_service`; REST clients `POST /api/lakebox/services`:
94
+ Agents call `create_lakebox_service`. REST clients send
95
+ `POST /api/lakebox/services`:
51
96
 
52
97
  ```json
53
98
  {
54
99
  "name": "hello",
55
100
  "image": "docker.io/library/python:3.12-alpine",
56
- "command": ["python", "-m", "http.server", "--bind", "127.0.0.1"],
101
+ "command": ["sh", "-lc", "python -m http.server \"$SERVICE_PORT\" --bind 127.0.0.1"],
57
102
  "mounts": [{ "source": "data", "target": "/data" }]
58
103
  }
59
104
  ```
60
105
 
61
106
  The call returns after the service listens. The runtime injects
62
- `SERVICE_NAME`, `SERVICE_PATH`, `SERVICE_PORT`, and `PORT`; routed services must
63
- listen on `127.0.0.1:$SERVICE_PORT`. Mount sources are relative to the user's
64
- home.
107
+ `SERVICE_NAME`, `SERVICE_PATH`, `SERVICE_PORT`, and `PORT`. Routed services
108
+ must listen on `127.0.0.1:$SERVICE_PORT`. Mount sources are relative to the
109
+ user's home.
65
110
 
66
111
  This is a constrained container API, not the Docker CLI. There is no daemon,
67
112
  port publishing, privileged mode, device access, or bridge network. A Lakebox
68
- stop and start restarts services from their saved definitions; process memory
113
+ stop and start restarts services from their saved definitions. Process memory
69
114
  does not resume.
70
115
 
71
- ## Agent tools
116
+ ## Use the agent tools
117
+
118
+ | Tool | Effect |
119
+ | ----------------------------------------------- | -------------------------------------------------------------------------------------- |
120
+ | `get_lakebox` | Returns status, the current user's account, and services without creating the Lakebox. |
121
+ | `execute_lakebox_command` | Run a command as the user's account. |
122
+ | `list_lakebox_services` | List the user's services. |
123
+ | `create_lakebox_service` | Create or replace an image service and wait until ready. |
124
+ | `start_lakebox_service`, `stop_lakebox_service` | Start or stop a saved service, `terminal`, or `desktop`. |
125
+ | `remove_lakebox_service` | Delete a saved service. Requires approval. |
126
+ | `get_lakebox_service_logs` | Read a bounded service log. |
127
+
128
+ The plugin creates or starts the Lakebox for commands and service mutations
129
+ when `auto` is enabled. Listing and status operations don't create it.
130
+
131
+ ## Understand the lifecycle
132
+
133
+ The app service principal owns Lakebox lifecycle calls. An on-behalf-of user
134
+ identity selects that user's Linux account and authorizes routes, but it never
135
+ creates, starts, stops, or deletes the Databricks resource.
136
+
137
+ Lifecycle behavior is:
138
+
139
+ 1. The first explicit start, command, service mutation, or routed request
140
+ creates the app's Lakebox when none exists.
141
+ 2. The runtime starts the Lakebox and restores saved service definitions.
142
+ 3. Each authenticated identity maps to a locked non-sudo account with a
143
+ persistent home and private service ports.
144
+ 4. The Databricks platform stops the Lakebox after the configured idle period.
145
+ 5. A later request starts it again. User files and saved service definitions
146
+ persist, but process memory doesn't.
72
147
 
73
- | Tool | Effect |
74
- | --- | --- |
75
- | `get_lakebox` | Status, the current user's account, and services. Never creates the Lakebox. |
76
- | `execute_lakebox_command` | Run a command as the user's account. |
77
- | `list_lakebox_services` | List the user's services. |
78
- | `create_lakebox_service` | Create or replace an image service and wait until ready. |
79
- | `start_lakebox_service`, `stop_lakebox_service` | Start a saved service, `terminal`, or `desktop`; stop one. |
80
- | `remove_lakebox_service` | Delete a saved service. Requires approval. |
81
- | `get_lakebox_service_logs` | Read a bounded service log. |
148
+ `runtime.stop()` stops the shared Lakebox for every user. `runtime.delete()`
149
+ permanently deletes the Lakebox and every user's files. Normal AppKit shutdown
150
+ closes SSH sessions and forwarding bridges but leaves idle shutdown to the
151
+ platform.
82
152
 
83
153
  ## Configuration
84
154
 
85
- | Option | Default | Description |
86
- | --- | --- | --- |
87
- | `application` | `DBX_TOOLS_LAKEBOX_APPLICATION`, `DATABRICKS_APP_NAME`, or the project directory | Stable key for the persisted Lakebox resource ID. |
88
- | `idleTimeoutSeconds` | `3600` | Platform idle timeout, 60 to 86400 seconds. |
89
- | `auto` | `true` | Create or start the Lakebox on demand. |
90
- | `routePrefix` | `/lakebox` | AppKit root for service routes. |
91
- | `metricsIntervalSeconds` | `5` | Sample interval while a client watches metrics. |
92
- | `sshTransport` | `auto` | `auto`, `openssh`, or `ssh2`. |
155
+ | Option | Default | Description |
156
+ | ------------------------ | -------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
157
+ | `application` | `DBX_TOOLS_LAKEBOX_APPLICATION`, `DATABRICKS_APP_NAME`, or the project directory | Stable key for the persisted Lakebox resource ID. |
158
+ | `idleTimeoutSeconds` | `3600` | Platform idle timeout, 60 to 86400 seconds. |
159
+ | `auto` | `true` | Create or start the Lakebox on demand. |
160
+ | `routePrefix` | `/lakebox` | AppKit root for service routes. |
161
+ | `metricsIntervalSeconds` | `5` | Sample interval while a client watches metrics. |
162
+ | `sshTransport` | `auto` | `auto`, `openssh`, or `ssh2`. |
163
+ | `ssh2Patch` | `auto` | Apply the ssh2 missing-exec-reply workaround only in development, always, or never. |
164
+ | `gatewayPort` | `2222` | Lakebox SSH gateway port. |
165
+ | `connectTimeoutMs` | `30000` | SSH connection timeout. |
166
+ | `commandTimeoutMs` | `120000` | Default command timeout. |
167
+ | `keyDirectory` | `~/.dbx-tools/lakebox` | Optional server-side SSH key and known-host storage root. |
93
168
 
94
169
  ## Interactive testing
95
170
 
96
171
  `test/cli.ts` runs the real runtime against a workspace profile as any user:
97
172
 
98
- ```sh
173
+ ```bash
99
174
  bun packages/js/node/appkit-lakebox/test/cli.ts --profile <profile> --user a@example.com status
100
175
  bun packages/js/node/appkit-lakebox/test/cli.ts --profile <profile> --user b@example.com exec id
101
- bun packages/js/node/appkit-lakebox/test/cli.ts --profile <profile> --user a@example.com serve
176
+ bunx tsx packages/js/node/appkit-lakebox/test/cli.ts --profile <profile> --user a@example.com serve
102
177
  ```
103
178
 
104
179
  `serve` starts that user's terminal and desktop and proxies their routes on
105
- `http://127.0.0.1:8787`.
180
+ [http://127.0.0.1:8787](http://127.0.0.1:8787).
181
+
182
+ Pass a configured profile explicitly. In this harness, the profile identity
183
+ stands in for the app service principal.
184
+
185
+ ## Understand security and runtime limits
186
+
187
+ - Each app has at most one managed Lakebox. Users share the machine but not
188
+ Linux accounts, homes, or service ports.
189
+ - Commands and services don't receive Databricks environment variables,
190
+ forwarded credentials, cookies, or SSH agent access.
191
+ - Service routes fail closed when a non-loopback request has no authenticated
192
+ identity.
193
+ - Image services run with private PID, IPC, mount, and user namespaces. They
194
+ share host networking and must bind only to the injected loopback port.
195
+ - Metrics cover machine CPU, memory, persistent storage, and network counters.
196
+ They don't expose process data and are sampled only while a client watches.
197
+ - Lakebase is required for app resource identity, replica convergence, and
198
+ last-known service definitions.
package/index.ts CHANGED
@@ -3,7 +3,7 @@
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
 
5
5
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-lakebox";
6
- export const PACKAGE_VERSION = "0.9.131";
6
+ export const PACKAGE_VERSION = "0.9.136";
7
7
  export * as config from "./src/config.ts";
8
8
  export * as desktop from "./src/desktop.ts";
9
9
  export * as metrics from "./src/metrics.ts";
package/lib/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  export declare const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-lakebox";
2
- export declare const PACKAGE_VERSION = "0.9.131";
2
+ export declare const PACKAGE_VERSION = "0.9.136";
3
3
  export * as config from "./src/config.ts";
4
4
  export * as desktop from "./src/desktop.ts";
5
5
  export * as metrics from "./src/metrics.ts";
package/lib/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  // Regenerated from the exporting modules in ./src.
3
3
  // Hand edits are overwritten on the next watch; this file is read-only.
4
4
  export const PACKAGE_IDENTIFIER = "@dbx-tools/appkit-lakebox";
5
- export const PACKAGE_VERSION = "0.9.131";
5
+ export const PACKAGE_VERSION = "0.9.136";
6
6
  export * as config from "./src/config.js";
7
7
  export * as desktop from "./src/desktop.js";
8
8
  export * as metrics from "./src/metrics.js";
@@ -23,4 +23,4 @@ export { LakeboxControllerDefinitionSchema, LakeboxControllerServiceSchema } fro
23
23
  export { LAKEBOX_SKILLS_MOUNT } from "./src/skills.js";
24
24
  export { LAKEBOX_AGENT_USER, LAKEBOX_AGENT_HOME, LAKEBOX_STATE_ROOT, LAKEBOX_USERS_ROOT, LAKEBOX_RUNTIME_ROOT, LAKEBOX_RUN_ROOT, LAKEBOX_UID_MIN, LAKEBOX_UID_COUNT, LAKEBOX_PORT_MIN, LAKEBOX_PORT_COUNT } from "./src/user.js";
25
25
  export { LakeboxWorkspaceSandbox } from "./src/workspace.js";
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pPLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hcHBraXQtbGFrZWJveFwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEzMVwiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRlc2t0b3AgZnJvbSBcIi4vc3JjL2Rlc2t0b3AudHNcIjtcbmV4cG9ydCAqIGFzIG1ldHJpY3MgZnJvbSBcIi4vc3JjL21ldHJpY3MudHNcIjtcbmV4cG9ydCAqIGFzIHBsdWdpbiBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgKiBhcyByb3V0ZXMgZnJvbSBcIi4vc3JjL3JvdXRlcy50c1wiO1xuZXhwb3J0ICogYXMgcnVudGltZSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0ICogYXMgc2VydmljZXMgZnJvbSBcIi4vc3JjL3NlcnZpY2VzLnRzXCI7XG5leHBvcnQgKiBhcyBza2lsbHMgZnJvbSBcIi4vc3JjL3NraWxscy50c1wiO1xuZXhwb3J0ICogYXMgdXNlciBmcm9tIFwiLi9zcmMvdXNlci50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlIGZyb20gXCIuL3NyYy93b3Jrc3BhY2UudHNcIjtcbmV4cG9ydCB7IExha2Vib3hQbHVnaW5Db25maWdTY2hlbWEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZUxha2Vib3hQbHVnaW5Db25maWcsIFJlc29sdmVkTGFrZWJveFBsdWdpbkNvbmZpZywgTGFrZWJveFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IGRlc2t0b3BIdG1sSGVhZCB9IGZyb20gXCIuL3NyYy9kZXNrdG9wLnRzXCI7XG5leHBvcnQgeyBMYWtlYm94TWV0cmljcyB9IGZyb20gXCIuL3NyYy9tZXRyaWNzLnRzXCI7XG5leHBvcnQgdHlwZSB7IExha2Vib3hDb3VudGVycywgTGFrZWJveE1ldHJpY3NFdmVudHMgfSBmcm9tIFwiLi9zcmMvbWV0cmljcy50c1wiO1xuZXhwb3J0IHsgQXBwS2l0TGFrZWJveFBsdWdpbiwgbGFrZWJveCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB7IExha2Vib3hSb3V0ZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL3JvdXRlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYm94Um91dGVSZXNvbHV0aW9uLCBMYWtlYm94Um91dGVSZXNvbHZlciB9IGZyb20gXCIuL3NyYy9yb3V0ZXMudHNcIjtcbmV4cG9ydCB7IExha2Vib3hSdW50aW1lIH0gZnJvbSBcIi4vc3JjL3J1bnRpbWUudHNcIjtcbmV4cG9ydCB0eXBlIHsgTGFrZWJveElkZW50aXR5UmVzb2x2ZXIsIExha2Vib3hMZWdhY3lQb29sIH0gZnJvbSBcIi4vc3JjL3J1bnRpbWUudHNcIjtcbmV4cG9ydCB7IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvblNjaGVtYSwgTGFrZWJveENvbnRyb2xsZXJTZXJ2aWNlU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3NlcnZpY2VzLnRzXCI7XG5leHBvcnQgdHlwZSB7IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbiwgTGFrZWJveENvbnRyb2xsZXJTZXJ2aWNlLCBMYWtlYm94U2VydmljZVJvdXRlIH0gZnJvbSBcIi4vc3JjL3NlcnZpY2VzLnRzXCI7XG5leHBvcnQgeyBMQUtFQk9YX1NLSUxMU19NT1VOVCB9IGZyb20gXCIuL3NyYy9za2lsbHMudHNcIjtcbmV4cG9ydCB7IExBS0VCT1hfQUdFTlRfVVNFUiwgTEFLRUJPWF9BR0VOVF9IT01FLCBMQUtFQk9YX1NUQVRFX1JPT1QsIExBS0VCT1hfVVNFUlNfUk9PVCwgTEFLRUJPWF9SVU5USU1FX1JPT1QsIExBS0VCT1hfUlVOX1JPT1QsIExBS0VCT1hfVUlEX01JTiwgTEFLRUJPWF9VSURfQ09VTlQsIExBS0VCT1hfUE9SVF9NSU4sIExBS0VCT1hfUE9SVF9DT1VOVCB9IGZyb20gXCIuL3NyYy91c2VyLnRzXCI7XG5leHBvcnQgeyBMYWtlYm94V29ya3NwYWNlU2FuZGJveCB9IGZyb20gXCIuL3NyYy93b3Jrc3BhY2UudHNcIjtcbmV4cG9ydCB0eXBlIHsgTGFrZWJveFdvcmtzcGFjZVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZS50c1wiO1xuIl19
26
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSwyQ0FBMkM7QUFDM0MsbURBQW1EO0FBQ25ELHdFQUF3RTtBQUV4RSxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRywyQkFBMkIsQ0FBQztBQUM5RCxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUcsU0FBUyxDQUFDO0FBQ3pDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE9BQU8sTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxNQUFNLE1BQU0saUJBQWlCLENBQUM7QUFDMUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssT0FBTyxNQUFNLGtCQUFrQixDQUFDO0FBQzVDLE9BQU8sS0FBSyxRQUFRLE1BQU0sbUJBQW1CLENBQUM7QUFDOUMsT0FBTyxLQUFLLE1BQU0sTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEtBQUssSUFBSSxNQUFNLGVBQWUsQ0FBQztBQUN0QyxPQUFPLEtBQUssU0FBUyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRTVELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE9BQU8sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRXZELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVsRCxPQUFPLEVBQUUsaUNBQWlDLEVBQUUsOEJBQThCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUV0RyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2pPLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gR0VORVJBVEVEIGJ5IHByb2plbiB3YXRjaCAtIERPIE5PVCBFRElULlxuLy8gUmVnZW5lcmF0ZWQgZnJvbSB0aGUgZXhwb3J0aW5nIG1vZHVsZXMgaW4gLi9zcmMuXG4vLyBIYW5kIGVkaXRzIGFyZSBvdmVyd3JpdHRlbiBvbiB0aGUgbmV4dCB3YXRjaDsgdGhpcyBmaWxlIGlzIHJlYWQtb25seS5cblxuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfSURFTlRJRklFUiA9IFwiQGRieC10b29scy9hcHBraXQtbGFrZWJveFwiO1xuZXhwb3J0IGNvbnN0IFBBQ0tBR0VfVkVSU0lPTiA9IFwiMC45LjEzNlwiO1xuZXhwb3J0ICogYXMgY29uZmlnIGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCAqIGFzIGRlc2t0b3AgZnJvbSBcIi4vc3JjL2Rlc2t0b3AudHNcIjtcbmV4cG9ydCAqIGFzIG1ldHJpY3MgZnJvbSBcIi4vc3JjL21ldHJpY3MudHNcIjtcbmV4cG9ydCAqIGFzIHBsdWdpbiBmcm9tIFwiLi9zcmMvcGx1Z2luLnRzXCI7XG5leHBvcnQgKiBhcyByb3V0ZXMgZnJvbSBcIi4vc3JjL3JvdXRlcy50c1wiO1xuZXhwb3J0ICogYXMgcnVudGltZSBmcm9tIFwiLi9zcmMvcnVudGltZS50c1wiO1xuZXhwb3J0ICogYXMgc2VydmljZXMgZnJvbSBcIi4vc3JjL3NlcnZpY2VzLnRzXCI7XG5leHBvcnQgKiBhcyBza2lsbHMgZnJvbSBcIi4vc3JjL3NraWxscy50c1wiO1xuZXhwb3J0ICogYXMgdXNlciBmcm9tIFwiLi9zcmMvdXNlci50c1wiO1xuZXhwb3J0ICogYXMgd29ya3NwYWNlIGZyb20gXCIuL3NyYy93b3Jrc3BhY2UudHNcIjtcbmV4cG9ydCB7IExha2Vib3hQbHVnaW5Db25maWdTY2hlbWEgfSBmcm9tIFwiLi9zcmMvY29uZmlnLnRzXCI7XG5leHBvcnQgdHlwZSB7IFNlcmlhbGl6YWJsZUxha2Vib3hQbHVnaW5Db25maWcsIFJlc29sdmVkTGFrZWJveFBsdWdpbkNvbmZpZywgTGFrZWJveFBsdWdpbkNvbmZpZyB9IGZyb20gXCIuL3NyYy9jb25maWcudHNcIjtcbmV4cG9ydCB7IGRlc2t0b3BIdG1sSGVhZCB9IGZyb20gXCIuL3NyYy9kZXNrdG9wLnRzXCI7XG5leHBvcnQgeyBMYWtlYm94TWV0cmljcyB9IGZyb20gXCIuL3NyYy9tZXRyaWNzLnRzXCI7XG5leHBvcnQgdHlwZSB7IExha2Vib3hDb3VudGVycywgTGFrZWJveE1ldHJpY3NFdmVudHMgfSBmcm9tIFwiLi9zcmMvbWV0cmljcy50c1wiO1xuZXhwb3J0IHsgQXBwS2l0TGFrZWJveFBsdWdpbiwgbGFrZWJveCB9IGZyb20gXCIuL3NyYy9wbHVnaW4udHNcIjtcbmV4cG9ydCB7IExha2Vib3hSb3V0ZVJlZ2lzdHJ5IH0gZnJvbSBcIi4vc3JjL3JvdXRlcy50c1wiO1xuZXhwb3J0IHR5cGUgeyBMYWtlYm94Um91dGVSZXNvbHV0aW9uLCBMYWtlYm94Um91dGVSZXNvbHZlciB9IGZyb20gXCIuL3NyYy9yb3V0ZXMudHNcIjtcbmV4cG9ydCB7IExha2Vib3hSdW50aW1lIH0gZnJvbSBcIi4vc3JjL3J1bnRpbWUudHNcIjtcbmV4cG9ydCB0eXBlIHsgTGFrZWJveElkZW50aXR5UmVzb2x2ZXIsIExha2Vib3hMZWdhY3lQb29sIH0gZnJvbSBcIi4vc3JjL3J1bnRpbWUudHNcIjtcbmV4cG9ydCB7IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvblNjaGVtYSwgTGFrZWJveENvbnRyb2xsZXJTZXJ2aWNlU2NoZW1hIH0gZnJvbSBcIi4vc3JjL3NlcnZpY2VzLnRzXCI7XG5leHBvcnQgdHlwZSB7IExha2Vib3hDb250cm9sbGVyRGVmaW5pdGlvbiwgTGFrZWJveENvbnRyb2xsZXJTZXJ2aWNlLCBMYWtlYm94U2VydmljZVJvdXRlIH0gZnJvbSBcIi4vc3JjL3NlcnZpY2VzLnRzXCI7XG5leHBvcnQgeyBMQUtFQk9YX1NLSUxMU19NT1VOVCB9IGZyb20gXCIuL3NyYy9za2lsbHMudHNcIjtcbmV4cG9ydCB7IExBS0VCT1hfQUdFTlRfVVNFUiwgTEFLRUJPWF9BR0VOVF9IT01FLCBMQUtFQk9YX1NUQVRFX1JPT1QsIExBS0VCT1hfVVNFUlNfUk9PVCwgTEFLRUJPWF9SVU5USU1FX1JPT1QsIExBS0VCT1hfUlVOX1JPT1QsIExBS0VCT1hfVUlEX01JTiwgTEFLRUJPWF9VSURfQ09VTlQsIExBS0VCT1hfUE9SVF9NSU4sIExBS0VCT1hfUE9SVF9DT1VOVCB9IGZyb20gXCIuL3NyYy91c2VyLnRzXCI7XG5leHBvcnQgeyBMYWtlYm94V29ya3NwYWNlU2FuZGJveCB9IGZyb20gXCIuL3NyYy93b3Jrc3BhY2UudHNcIjtcbmV4cG9ydCB0eXBlIHsgTGFrZWJveFdvcmtzcGFjZVNhbmRib3hPcHRpb25zIH0gZnJvbSBcIi4vc3JjL3dvcmtzcGFjZS50c1wiO1xuIl19
package/package.json CHANGED
@@ -19,7 +19,7 @@
19
19
  "projen": "projen"
20
20
  },
21
21
  "devDependencies": {
22
- "@dbx-tools/auth": "^0.9.131",
22
+ "@dbx-tools/auth": "^0.9.136",
23
23
  "@types/express": "^5.0.5",
24
24
  "@types/json-schema": "^7",
25
25
  "@types/node": "^24.6.0",
@@ -29,14 +29,14 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@databricks/appkit": "0.81.0",
32
- "@dbx-tools/appkit": "^0.9.131",
33
- "@dbx-tools/appkit-mastra": "^0.9.131",
34
- "@dbx-tools/core": "^0.9.131",
35
- "@dbx-tools/lakebox": "^0.9.131",
36
- "@dbx-tools/postgres": "^0.9.131",
37
- "@dbx-tools/shared-core": "^0.9.131",
38
- "@dbx-tools/shared-lakebox": "^0.9.131",
39
- "@dbx-tools/ui": "^0.9.131",
32
+ "@dbx-tools/appkit": "^0.9.136",
33
+ "@dbx-tools/appkit-mastra": "^0.9.136",
34
+ "@dbx-tools/core": "^0.9.136",
35
+ "@dbx-tools/lakebox": "^0.9.136",
36
+ "@dbx-tools/postgres": "^0.9.136",
37
+ "@dbx-tools/shared-core": "^0.9.136",
38
+ "@dbx-tools/shared-lakebox": "^0.9.136",
39
+ "@dbx-tools/ui": "^0.9.136",
40
40
  "@mastra/core": "1.71.0",
41
41
  "http-proxy-3": "^1.23.1",
42
42
  "zod": "4.3.6"
@@ -99,7 +99,7 @@
99
99
  "./package.json": "./package.json"
100
100
  }
101
101
  },
102
- "version": "0.9.131",
102
+ "version": "0.9.136",
103
103
  "types": "./lib/index.d.ts",
104
104
  "dbxToolsConfig": {
105
105
  "tags": [