@fabric-harness/databricks 0.5.0 → 0.6.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.
package/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  Databricks integration helpers for Fabric Harness.
4
4
 
5
- Current surface:
5
+ ## Current surface
6
6
 
7
7
  - `DatabricksRestClient` — small token-authenticated REST client.
8
8
  - `databricksSqlTool()` — run SQL Warehouse statements from an agent tool.
@@ -11,5 +11,53 @@ Current surface:
11
11
  - `unityCatalogTablesTool()` — list Unity Catalog tables.
12
12
  - `databricksMlflowLogMetricTool()` / `databricksMlflowLogParamTool()` — write MLflow telemetry from an agent run.
13
13
  - `databricksWorkspaceSource()` — mount exported workspace notebooks/files as a Fabric filesystem source.
14
+ - **`databricksSqlSandbox()`** (subpath: `@fabric-harness/databricks/sql-sandbox`) — full `SandboxEnv` whose `exec(sql)` runs against a SQL Warehouse, with results serialized as JSONL or CSV.
15
+
16
+ ## Install
17
+
18
+ ```sh
19
+ npm install @fabric-harness/databricks @fabric-harness/sdk
20
+ ```
21
+
22
+ ## SQL Warehouse sandbox
23
+
24
+ Run an entire agent against a SQL Warehouse, with `session.shell()` (or `session.prompt()` tool calls) routed to SQL statement execution:
25
+
26
+ ```ts
27
+ import { init } from '@fabric-harness/sdk';
28
+ import { databricksSqlSandbox } from '@fabric-harness/databricks/sql-sandbox';
29
+
30
+ const fabric = await init({
31
+ sandbox: databricksSqlSandbox({
32
+ host: process.env.DATABRICKS_HOST!,
33
+ token: process.env.DATABRICKS_TOKEN!,
34
+ warehouseId: process.env.DATABRICKS_WAREHOUSE_ID!,
35
+ catalog: 'main',
36
+ schema: 'analytics',
37
+ resultFormat: 'jsonl', // or 'csv'
38
+ }),
39
+ });
40
+
41
+ const session = await fabric.session();
42
+ const result = await session.shell('SELECT customer_id, SUM(amount) FROM orders GROUP BY 1');
43
+ console.log(result.stdout); // newline-delimited JSON rows
44
+ ```
45
+
46
+ For real data files, mount with `databricksVolumeSource` from `@fabric-harness/connectors/databricks-volume`:
47
+
48
+ ```ts
49
+ import { databricksVolumeSource } from '@fabric-harness/connectors/databricks-volume';
50
+
51
+ await session.mount('/mnt/landing', databricksVolumeSource({
52
+ host: process.env.DATABRICKS_HOST!,
53
+ token: process.env.DATABRICKS_TOKEN!,
54
+ volumePath: '/Volumes/main/landing/raw',
55
+ }));
56
+ ```
57
+
58
+ ## Documentation
59
+
60
+ - [Databricks deployment guide](https://harness.fabric.pro/docs/deployment/databricks)
61
+ - [Roadmap](https://github.com/Fabric-Pro/fabric-harness/blob/main/docs/ROADMAP.md) — cluster/notebook-backed `SandboxEnv` and Jobs deploy target are planned.
14
62
 
15
63
  Keep Databricks hostnames and tokens in environment variables or secret stores; do not put them in prompts or payloads.
@@ -0,0 +1,48 @@
1
+ import type { SandboxEnv } from '@fabric-harness/sdk';
2
+ import { DatabricksRestClient } from './index.js';
3
+ /**
4
+ * Sandbox backend that maps `exec(command)` to a Databricks SQL Statement
5
+ * Execution API call against a SQL Warehouse. Useful for data agents whose
6
+ * "shell" is a query interface.
7
+ *
8
+ * Behavior:
9
+ * - `exec(sql)` runs the SQL synchronously (with a timeout) and returns the
10
+ * serialized result set as `stdout` (newline-delimited JSON rows by default,
11
+ * or CSV when `resultFormat: 'csv'`).
12
+ * - File operations are intentionally minimal: the sandbox-virtual filesystem
13
+ * keeps a small in-memory map. SQL warehouses are not file servers; mount
14
+ * actual data via `databricksVolumeSource` from `@fabric-harness/connectors`.
15
+ *
16
+ * Usage:
17
+ * ```ts
18
+ * import { databricksSqlSandbox } from '@fabric-harness/databricks/sql-sandbox';
19
+ *
20
+ * const fabric = await init({
21
+ * sandbox: databricksSqlSandbox({
22
+ * host: process.env.DATABRICKS_HOST!,
23
+ * token: process.env.DATABRICKS_TOKEN!,
24
+ * warehouseId: process.env.DATABRICKS_WAREHOUSE_ID!,
25
+ * }),
26
+ * });
27
+ * ```
28
+ */
29
+ export interface DatabricksSqlSandboxOptions {
30
+ host: string;
31
+ token: string | (() => string | Promise<string>);
32
+ /** SQL Warehouse ID to execute against. */
33
+ warehouseId: string;
34
+ /** Optional Unity Catalog. */
35
+ catalog?: string;
36
+ /** Optional schema. */
37
+ schema?: string;
38
+ /** Result row serialization. Defaults to `'jsonl'`. */
39
+ resultFormat?: 'jsonl' | 'csv';
40
+ /** Wait timeout for the statement, in seconds (10–50). Defaults to `30`. */
41
+ waitTimeoutSeconds?: number;
42
+ /** Custom fetch implementation (testing, OBO tokens, etc.). */
43
+ fetchImpl?: typeof fetch;
44
+ /** Inject a pre-built REST client (escape hatch for tests). */
45
+ client?: DatabricksRestClient;
46
+ }
47
+ export declare function databricksSqlSandbox(options: DatabricksSqlSandboxOptions): SandboxEnv;
48
+ //# sourceMappingURL=sql-sandbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-sandbox.d.ts","sourceRoot":"","sources":["../src/sql-sandbox.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAoB,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,2CAA2C;IAC3C,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,YAAY,CAAC,EAAE,OAAO,GAAG,KAAK,CAAC;IAC/B,4EAA4E;IAC5E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,+DAA+D;IAC/D,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,+DAA+D;IAC/D,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AASD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,2BAA2B,GAAG,UAAU,CAsFrF"}
@@ -0,0 +1,116 @@
1
+ import { createRemoteSandboxEnv } from '@fabric-harness/sdk';
2
+ import { DatabricksRestClient } from './index.js';
3
+ export function databricksSqlSandbox(options) {
4
+ const client = options.client ?? new DatabricksRestClient({
5
+ host: options.host,
6
+ token: options.token,
7
+ ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
8
+ });
9
+ const waitTimeoutSeconds = options.waitTimeoutSeconds ?? 30;
10
+ const resultFormat = options.resultFormat ?? 'jsonl';
11
+ const memFs = new Map();
12
+ const api = {
13
+ async exec(command) {
14
+ const startedAt = Date.now();
15
+ try {
16
+ const response = await client.post('/api/2.0/sql/statements', {
17
+ warehouse_id: options.warehouseId,
18
+ statement: command,
19
+ wait_timeout: `${waitTimeoutSeconds}s`,
20
+ on_wait_timeout: 'CANCEL',
21
+ ...(options.catalog ? { catalog: options.catalog } : {}),
22
+ ...(options.schema ? { schema: options.schema } : {}),
23
+ });
24
+ if (response.status.state === 'FAILED' || response.status.state === 'CANCELED') {
25
+ return {
26
+ command,
27
+ exitCode: 1,
28
+ stdout: '',
29
+ stderr: response.status.error?.message ?? `Statement ${response.status.state}`,
30
+ durationMs: Date.now() - startedAt,
31
+ };
32
+ }
33
+ const stdout = serializeResult(response, resultFormat);
34
+ return { command, exitCode: 0, stdout, stderr: '', durationMs: Date.now() - startedAt };
35
+ }
36
+ catch (error) {
37
+ return {
38
+ command,
39
+ exitCode: 1,
40
+ stdout: '',
41
+ stderr: error instanceof Error ? error.message : String(error),
42
+ durationMs: Date.now() - startedAt,
43
+ };
44
+ }
45
+ },
46
+ async readFile(path) {
47
+ const bytes = memFs.get(path);
48
+ if (!bytes)
49
+ throw new Error(`No such file: ${path}`);
50
+ return new TextDecoder().decode(bytes);
51
+ },
52
+ async readFileBuffer(path) {
53
+ const bytes = memFs.get(path);
54
+ if (!bytes)
55
+ throw new Error(`No such file: ${path}`);
56
+ return bytes;
57
+ },
58
+ async writeFile(path, content) {
59
+ memFs.set(path, typeof content === 'string' ? new TextEncoder().encode(content) : content);
60
+ },
61
+ async stat(path) {
62
+ const bytes = memFs.get(path);
63
+ if (!bytes)
64
+ throw new Error(`No such file: ${path}`);
65
+ return { type: 'file', size: bytes.byteLength };
66
+ },
67
+ async readdir(path) {
68
+ const prefix = path.replace(/\/$/, '');
69
+ const direct = new Set();
70
+ for (const key of memFs.keys()) {
71
+ if (!key.startsWith(`${prefix}/`))
72
+ continue;
73
+ const tail = key.slice(prefix.length + 1);
74
+ const slash = tail.indexOf('/');
75
+ direct.add(slash > 0 ? tail.slice(0, slash) : tail);
76
+ }
77
+ return [...direct];
78
+ },
79
+ async exists(path) {
80
+ return memFs.has(path);
81
+ },
82
+ async mkdir() { },
83
+ async rm(path) {
84
+ for (const key of [...memFs.keys()]) {
85
+ if (key === path || key.startsWith(`${path}/`))
86
+ memFs.delete(key);
87
+ }
88
+ },
89
+ };
90
+ return createRemoteSandboxEnv(api, {
91
+ cwd: '/workspace',
92
+ capabilities: { exec: true, filesystem: true, binaryFiles: true, snapshots: false, restore: false, network: 'provider-managed', persistence: 'session', isolation: 'provider' },
93
+ });
94
+ }
95
+ function serializeResult(response, format) {
96
+ const columns = response.manifest?.schema?.columns?.map((c) => c.name ?? '') ?? [];
97
+ const rows = response.result?.data_array ?? [];
98
+ if (format === 'csv') {
99
+ const header = columns.join(',');
100
+ const body = rows.map((row) => row.map(formatCsvCell).join(',')).join('\n');
101
+ return [header, body].filter(Boolean).join('\n');
102
+ }
103
+ return rows.map((row) => {
104
+ const obj = {};
105
+ for (let i = 0; i < columns.length; i += 1)
106
+ obj[columns[i] ?? `_${i}`] = row[i];
107
+ return JSON.stringify(obj);
108
+ }).join('\n');
109
+ }
110
+ function formatCsvCell(value) {
111
+ if (value === null || value === undefined)
112
+ return '';
113
+ const str = String(value);
114
+ return /[",\n]/.test(str) ? `"${str.replace(/"/g, '""')}"` : str;
115
+ }
116
+ //# sourceMappingURL=sql-sandbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sql-sandbox.js","sourceRoot":"","sources":["../src/sql-sandbox.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fabric-harness/databricks",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Databricks tools and filesystem sources for Fabric Harness agents.",
5
5
  "license": "Apache-2.0",
6
6
  "author": "Fabric",
@@ -32,13 +32,23 @@
32
32
  },
33
33
  "main": "dist/index.js",
34
34
  "types": "dist/index.d.ts",
35
+ "exports": {
36
+ ".": {
37
+ "types": "./dist/index.d.ts",
38
+ "import": "./dist/index.js"
39
+ },
40
+ "./sql-sandbox": {
41
+ "types": "./dist/sql-sandbox.d.ts",
42
+ "import": "./dist/sql-sandbox.js"
43
+ }
44
+ },
35
45
  "files": [
36
46
  "dist",
37
47
  "README.md",
38
48
  "LICENSE"
39
49
  ],
40
50
  "dependencies": {
41
- "@fabric-harness/sdk": "0.5.0"
51
+ "@fabric-harness/sdk": "0.6.0"
42
52
  },
43
53
  "devDependencies": {
44
54
  "typescript": "^5.8.3",