@fabric-harness/databricks 0.18.0 → 1.1.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 (51) hide show
  1. package/README.md +72 -32
  2. package/dist/app.d.ts +84 -0
  3. package/dist/app.d.ts.map +1 -0
  4. package/dist/app.js +91 -0
  5. package/dist/app.js.map +1 -0
  6. package/dist/client.d.ts +19 -7
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +14 -5
  9. package/dist/client.js.map +1 -1
  10. package/dist/feature-serving.js +1 -1
  11. package/dist/feature-serving.js.map +1 -1
  12. package/dist/governance.d.ts +4 -0
  13. package/dist/governance.d.ts.map +1 -1
  14. package/dist/governance.js +14 -2
  15. package/dist/governance.js.map +1 -1
  16. package/dist/identity.d.ts +34 -0
  17. package/dist/identity.d.ts.map +1 -1
  18. package/dist/identity.js +63 -0
  19. package/dist/identity.js.map +1 -1
  20. package/dist/index.d.ts +19 -5
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js +9 -3
  23. package/dist/index.js.map +1 -1
  24. package/dist/lakebase.d.ts +29 -17
  25. package/dist/lakebase.d.ts.map +1 -1
  26. package/dist/lakebase.js +77 -1
  27. package/dist/lakebase.js.map +1 -1
  28. package/dist/mlflow-tracing.d.ts +111 -0
  29. package/dist/mlflow-tracing.d.ts.map +1 -0
  30. package/dist/mlflow-tracing.js +167 -0
  31. package/dist/mlflow-tracing.js.map +1 -0
  32. package/dist/persistence.d.ts +73 -0
  33. package/dist/persistence.d.ts.map +1 -0
  34. package/dist/persistence.js +82 -0
  35. package/dist/persistence.js.map +1 -0
  36. package/dist/serving-usage.d.ts +48 -0
  37. package/dist/serving-usage.d.ts.map +1 -0
  38. package/dist/serving-usage.js +100 -0
  39. package/dist/serving-usage.js.map +1 -0
  40. package/dist/telemetry-sink.d.ts +29 -0
  41. package/dist/telemetry-sink.d.ts.map +1 -0
  42. package/dist/telemetry-sink.js +129 -0
  43. package/dist/telemetry-sink.js.map +1 -0
  44. package/dist/tools.d.ts.map +1 -1
  45. package/dist/tools.js +4 -2
  46. package/dist/tools.js.map +1 -1
  47. package/dist/volumes-attachment-store.d.ts +64 -0
  48. package/dist/volumes-attachment-store.d.ts.map +1 -0
  49. package/dist/volumes-attachment-store.js +172 -0
  50. package/dist/volumes-attachment-store.js.map +1 -0
  51. package/package.json +9 -4
package/README.md CHANGED
@@ -1,17 +1,6 @@
1
1
  # @fabric-harness/databricks
2
2
 
3
- Databricks integration helpers for Fabric Harness.
4
-
5
- ## Current surface
6
-
7
- - `DatabricksRestClient` — small token-authenticated REST client.
8
- - `databricksSqlTool()` — run SQL Warehouse statements from an agent tool.
9
- - `databricksRunJobTool()` — trigger an existing Databricks job.
10
- - `databricksNotebookTool()` — submit a one-off notebook run.
11
- - `unityCatalogTablesTool()` — list Unity Catalog tables.
12
- - `databricksMlflowLogMetricTool()` / `databricksMlflowLogParamTool()` — write MLflow telemetry from an agent run.
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.
3
+ First-party Databricks integration helpers for Fabric Harness. The package is suitable for controlled pilots after a live workspace smoke test; most default coverage uses mocked HTTP clients.
15
4
 
16
5
  ## Install
17
6
 
@@ -19,9 +8,72 @@ Databricks integration helpers for Fabric Harness.
19
8
  npm install @fabric-harness/databricks @fabric-harness/sdk
20
9
  ```
21
10
 
22
- ## SQL Warehouse sandbox
11
+ Add `@fabric-harness/node` and `pg` only when using the Node persistence helpers.
12
+
13
+ ## Fast path
14
+
15
+ ```ts
16
+ import { init } from '@fabric-harness/sdk';
17
+ import { databricks } from '@fabric-harness/databricks';
18
+
19
+ const dbx = databricks({
20
+ host: process.env.DATABRICKS_HOST!,
21
+ principal: {
22
+ kind: 'service-principal',
23
+ host: process.env.DATABRICKS_HOST!,
24
+ clientId: process.env.DATABRICKS_CLIENT_ID!,
25
+ clientSecret: process.env.DATABRICKS_CLIENT_SECRET!,
26
+ },
27
+ model: process.env.DATABRICKS_MODEL,
28
+ warehouseId: process.env.DATABRICKS_WAREHOUSE_ID,
29
+ vectorSearch: {
30
+ index: 'main.support.docs_index',
31
+ textColumn: 'chunk',
32
+ },
33
+ governance: { stewardAudience: 'data-steward' },
34
+ });
35
+
36
+ const fabric = await init({
37
+ modelProvider: dbx.modelProvider,
38
+ tools: dbx.tools,
39
+ policy: dbx.policy,
40
+ });
41
+ ```
42
+
43
+ The bundle threads one PAT, OAuth service principal, or on-behalf-of token provider through Model Serving and REST tools. Unity Catalog remains the authorization source of truth; Fabric adds tool-call lineage, optional catalog defense in depth, approval routing, and a workspace-host network policy.
23
44
 
24
- Run an entire agent against a SQL Warehouse, with `session.shell()` (or `session.prompt()` tool calls) routed to SQL statement execution:
45
+ ## Shipped surface
46
+
47
+ - Model Serving: `databricksFoundationModelProvider()`, `databricks/*`, and `mosaic-ai/*` model refs.
48
+ - Identity: PAT, cached OAuth M2M, Databricks Apps service principal, and forwarded user token helpers.
49
+ - Data and AI: SQL Warehouse, Unity Catalog discovery, Vector Search, embeddings, `ai_query()`, AI/BI Genie, Feature Serving, Jobs, notebooks, and workspace files.
50
+ - Data engineering: Lakeflow pipeline list/status/start/stop tools.
51
+ - Operations: System Tables consumption reporting, actual-cost budget source, MLflow tracing, serving usage capture, and Lakebase telemetry tables.
52
+ - Storage: Unity Catalog Volumes attachment store and Databricks Volume filesystem connector.
53
+ - Authoring: `databricks()`, `databricksAgent()`, `defineDatabricksAgent()`, and `MockDatabricksModelProvider`.
54
+ - Build/deploy: `databricks-app` and `databricks-serving` targets plus `fh doctor --target databricks-*`.
55
+ - Sandbox: `databricksSqlSandbox()` at `@fabric-harness/databricks/sql-sandbox`; file operations are in memory and `exec()` is SQL Statement Execution, not a general compute shell.
56
+
57
+ ## Deployment boundaries
58
+
59
+ - `databricks-app` runs the Node server inside Databricks Apps and emits `app.yaml` plus bundle assets. Validate the generated artifact and app resource permissions in the target workspace.
60
+ - `databricks-serving` emits an MLflow `ChatAgent` proxy that calls an agent URL deployed elsewhere. It does not run the TypeScript agent inside Model Serving.
61
+ - `--mock` validates the local model loop only. It does not validate Databricks API contracts, OAuth scopes, Unity Catalog grants, SQL behavior, or a deployment.
62
+
63
+ Fabric Harness 2.x build manifests separate finite `jobs` from persistent `agents`. Node-derived
64
+ targets, including `databricks-app`, run the same v2 server used during development. Cloudflare
65
+ currently accepts finite jobs only and fails explicitly when a persistent agent is present.
66
+
67
+ ## Lakebase authentication
68
+
69
+ Lakebase Autoscaling uses two-step authentication: obtain a workspace OAuth token, then exchange it at `POST /api/2.0/postgres/credentials` for a database credential. `lakebaseClient()` performs this exchange, caches the credential, refreshes early with jitter, and single-flights concurrent refreshes. `databricksApp().serverOptions()` wires the Lakebase session, submission, and conversation-stream stores into `startDevServer()`.
70
+
71
+ Set the full endpoint resource name (`projects/.../branches/.../endpoints/...`) with `DATABRICKS_LAKEBASE_ENDPOINT` or `ENDPOINT_NAME`. Local Postgres tests can use the explicit `password` option. Live Lakebase remains release-gated until the workspace deployment and restart suite passes. See the [Databricks Lakebase credential guide](https://docs.databricks.com/aws/en/oltp/projects/external-apps-manual-api).
72
+
73
+ Run the opt-in credential/connection smoke with `FABRIC_DATABRICKS_LAKEBASE_TEST=1` plus
74
+ `DATABRICKS_HOST`, `DATABRICKS_TOKEN`, `ENDPOINT_NAME`, `PGHOST`, `PGDATABASE`, and `PGUSER`.
75
+
76
+ ## SQL Warehouse sandbox
25
77
 
26
78
  ```ts
27
79
  import { init } from '@fabric-harness/sdk';
@@ -34,30 +86,18 @@ const fabric = await init({
34
86
  warehouseId: process.env.DATABRICKS_WAREHOUSE_ID!,
35
87
  catalog: 'main',
36
88
  schema: 'analytics',
37
- resultFormat: 'jsonl', // or 'csv'
89
+ resultFormat: 'jsonl',
38
90
  }),
39
91
  });
40
92
 
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
- }));
93
+ const result = await (await fabric.session()).shell('SELECT current_user()');
94
+ console.log(result.stdout);
56
95
  ```
57
96
 
58
97
  ## Documentation
59
98
 
60
99
  - [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.
100
+ - [Fabric Harness 2.0 migration](https://github.com/Fabric-Pro/fabric-harness/blob/main/docs/migration-v2.md)
101
+ - [Capability matrix](https://github.com/Fabric-Pro/fabric-harness/blob/main/docs/capability-matrix.md)
62
102
 
63
- Keep Databricks hostnames and tokens in environment variables or secret stores; do not put them in prompts or payloads.
103
+ Keep Databricks credentials in environment variables or a secret store. Never place tokens in prompts, payloads, tool inputs, or lineage labels.
package/dist/app.d.ts ADDED
@@ -0,0 +1,84 @@
1
+ import type { FabricActor, FabricPrincipal, ModelProvider } from '@fabric-harness/sdk';
2
+ import { DatabricksRestClient } from './client.js';
3
+ import type { DatabricksPrincipal, DatabricksTokenProvider } from './identity.js';
4
+ import type { DatabricksPersistence } from './persistence.js';
5
+ import type { DatabricksTelemetry } from './telemetry-sink.js';
6
+ import type { LakebasePoolFactory } from './lakebase.js';
7
+ /**
8
+ * Production preset for agents hosted on Databricks Apps (v2, workstream C5).
9
+ *
10
+ * One call resolves the runtime from the standard app environment: the app's
11
+ * service principal (client-credentials OAuth), the workspace REST client and
12
+ * serving-endpoint model provider, Lakebase-backed persistence for sessions +
13
+ * submissions + conversation streams, and submission-keyed telemetry — all
14
+ * running as one governed identity that Unity Catalog enforces.
15
+ *
16
+ * ```ts
17
+ * const app = databricksApp();
18
+ * await startDevServer({ port: Number(process.env.DATABRICKS_APP_PORT ?? 8000), ...(await app.serverOptions()) });
19
+ * ```
20
+ */
21
+ export interface DatabricksAppOptions {
22
+ /** Environment source. Default `process.env`. */
23
+ env?: Record<string, string | undefined>;
24
+ /** Acting identity. Default: the app service principal from the environment. */
25
+ principal?: DatabricksPrincipal;
26
+ /** Workspace host. Default `DATABRICKS_HOST`. */
27
+ host?: string;
28
+ /** Default serving endpoint for the model provider. Default `DATABRICKS_SERVING_ENDPOINT`. */
29
+ model?: string;
30
+ /**
31
+ * Lakebase connection. Defaults from the app's database resource
32
+ * environment (`DATABRICKS_LAKEBASE_HOST`/`DATABASE`/`USER`/`ENDPOINT`,
33
+ * falling back to `PGHOST`/`PGDATABASE`/`PGUSER`/`ENDPOINT_NAME`). Workspace
34
+ * OAuth is exchanged for a rotating database credential. Set `false` to
35
+ * run without durable persistence.
36
+ */
37
+ lakebase?: false | {
38
+ host?: string;
39
+ database?: string;
40
+ user?: string;
41
+ endpoint?: string;
42
+ port?: number;
43
+ ssl?: boolean | {
44
+ rejectUnauthorized?: boolean;
45
+ };
46
+ poolFactory?: LakebasePoolFactory;
47
+ };
48
+ /** Unity Catalog principal name, when it differs from the client id. */
49
+ ucPrincipal?: string;
50
+ /** Submission-keyed telemetry into Lakebase. Default: on when Lakebase resolves. */
51
+ telemetry?: boolean;
52
+ fetchImpl?: typeof fetch;
53
+ }
54
+ export interface DatabricksAppRuntime {
55
+ identity: DatabricksTokenProvider;
56
+ /** Governed identity the app executes as; stamp into actors/submissions. */
57
+ principal: FabricPrincipal;
58
+ actor: FabricActor;
59
+ client: DatabricksRestClient;
60
+ modelProvider: ModelProvider;
61
+ persistence?: DatabricksPersistence;
62
+ telemetry?: DatabricksTelemetry;
63
+ /**
64
+ * The durable-store slice of `startDevServer` options (submission store +
65
+ * conversation stream store on Lakebase), with schema ensured. Empty when
66
+ * Lakebase is disabled.
67
+ */
68
+ serverOptions(): Promise<{
69
+ sessionStore?: import('@fabric-harness/sdk').SessionStore;
70
+ submissionStore?: import('@fabric-harness/sdk').AgentSubmissionStore;
71
+ conversationStreamStore?: import('@fabric-harness/sdk').ConversationStreamStore;
72
+ }>;
73
+ /**
74
+ * Per-request on-behalf-of identity from Databricks Apps forwarded
75
+ * headers, or `undefined` when the request carries no user token.
76
+ */
77
+ onBehalfOf(headers: Headers | Record<string, string | string[] | undefined>): {
78
+ identity: DatabricksTokenProvider;
79
+ actor: FabricActor;
80
+ } | undefined;
81
+ close(): Promise<void>;
82
+ }
83
+ export declare function databricksApp(options?: DatabricksAppOptions): DatabricksAppRuntime;
84
+ //# sourceMappingURL=app.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAOnD,OAAO,KAAK,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAGlF,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,kBAAkB,CAAC;AAE9D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAEzD;;;;;;;;;;;;;GAaG;AACH,MAAM,WAAW,oBAAoB;IACnC,iDAAiD;IACjD,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,gFAAgF;IAChF,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC,iDAAiD;IACjD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8FAA8F;IAC9F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,KAAK,GAAG;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,GAAG;YAAE,kBAAkB,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC;QAAC,WAAW,CAAC,EAAE,mBAAmB,CAAA;KAAE,CAAC;IAC9L,wEAAwE;IACxE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oFAAoF;IACpF,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,EAAE,uBAAuB,CAAC;IAClC,4EAA4E;IAC5E,SAAS,EAAE,eAAe,CAAC;IAC3B,KAAK,EAAE,WAAW,CAAC;IACnB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,aAAa,EAAE,aAAa,CAAC;IAC7B,WAAW,CAAC,EAAE,qBAAqB,CAAC;IACpC,SAAS,CAAC,EAAE,mBAAmB,CAAC;IAChC;;;;OAIG;IACH,aAAa,IAAI,OAAO,CAAC;QACvB,YAAY,CAAC,EAAE,OAAO,qBAAqB,EAAE,YAAY,CAAC;QAC1D,eAAe,CAAC,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,CAAC;QACrE,uBAAuB,CAAC,EAAE,OAAO,qBAAqB,EAAE,uBAAuB,CAAC;KACjF,CAAC,CAAC;IACH;;;OAGG;IACH,UAAU,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG;QAAE,QAAQ,EAAE,uBAAuB,CAAC;QAAC,KAAK,EAAE,WAAW,CAAA;KAAE,GAAG,SAAS,CAAC;IACpJ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,wBAAgB,aAAa,CAAC,OAAO,GAAE,oBAAyB,GAAG,oBAAoB,CA+FtF"}
package/dist/app.js ADDED
@@ -0,0 +1,91 @@
1
+ import { DatabricksRestClient } from './client.js';
2
+ import { appServicePrincipalFromEnv, databricksIdentity, fabricPrincipalFor, onBehalfOfFromHeaders, } from './identity.js';
3
+ import { databricksFoundationModelProvider } from './model.js';
4
+ import { databricksPersistence } from './persistence.js';
5
+ import { databricksTelemetry } from './telemetry-sink.js';
6
+ export function databricksApp(options = {}) {
7
+ const env = options.env ?? (typeof process !== 'undefined' ? process.env : {});
8
+ const principal = options.principal ?? appServicePrincipalFromEnv(env);
9
+ if (!principal) {
10
+ throw new Error('databricksApp() could not resolve an identity: pass `principal` or set DATABRICKS_HOST + DATABRICKS_CLIENT_ID + DATABRICKS_CLIENT_SECRET (the Databricks Apps runtime provides these).');
11
+ }
12
+ const host = options.host ??
13
+ (principal.kind === 'service-principal' ? principal.host : undefined) ??
14
+ (env.DATABRICKS_HOST ? (env.DATABRICKS_HOST.includes('://') ? env.DATABRICKS_HOST : `https://${env.DATABRICKS_HOST}`) : undefined);
15
+ if (!host) {
16
+ throw new Error('databricksApp() requires a workspace host: pass `host` or set DATABRICKS_HOST.');
17
+ }
18
+ const identity = databricksIdentity(principal);
19
+ const fabricPrincipal = fabricPrincipalFor(principal, {
20
+ asAppPrincipal: true,
21
+ ...(options.ucPrincipal ? { ucPrincipal: options.ucPrincipal } : {}),
22
+ });
23
+ const actor = { principal: fabricPrincipal };
24
+ const client = new DatabricksRestClient({ host, token: identity, ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}) });
25
+ const model = options.model ?? env.DATABRICKS_SERVING_ENDPOINT;
26
+ const modelProvider = databricksFoundationModelProvider({
27
+ host,
28
+ token: identity,
29
+ ...(model ? { defaultModel: model } : {}),
30
+ ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
31
+ });
32
+ let persistence;
33
+ if (options.lakebase !== false) {
34
+ const lakebase = options.lakebase === undefined ? {} : options.lakebase;
35
+ const lakebaseHost = lakebase.host ?? env.DATABRICKS_LAKEBASE_HOST ?? env.PGHOST;
36
+ const database = lakebase.database ?? env.DATABRICKS_LAKEBASE_DATABASE ?? env.PGDATABASE;
37
+ const endpoint = lakebase.endpoint ?? env.DATABRICKS_LAKEBASE_ENDPOINT ?? env.ENDPOINT_NAME;
38
+ const user = lakebase.user ??
39
+ env.DATABRICKS_LAKEBASE_USER ??
40
+ env.PGUSER ??
41
+ (principal.kind === 'service-principal' ? principal.clientId : undefined);
42
+ if (lakebaseHost && database && user && endpoint) {
43
+ persistence = databricksPersistence({
44
+ lakebase: {
45
+ host: lakebaseHost,
46
+ database,
47
+ user,
48
+ workspaceHost: host,
49
+ endpoint,
50
+ token: identity,
51
+ ...(options.fetchImpl ? { fetchImpl: options.fetchImpl } : {}),
52
+ ...(lakebase.port !== undefined ? { port: lakebase.port } : env.PGPORT ? { port: Number(env.PGPORT) } : {}),
53
+ ...(lakebase.ssl !== undefined ? { ssl: lakebase.ssl } : {}),
54
+ ...(lakebase.poolFactory ? { poolFactory: lakebase.poolFactory } : {}),
55
+ },
56
+ });
57
+ }
58
+ else if (options.lakebase !== undefined) {
59
+ throw new Error('databricksApp({ lakebase }) is missing connection details: provide host/database/user/endpoint or the DATABRICKS_LAKEBASE_* (or PG*/ENDPOINT_NAME) environment variables from the app database resource.');
60
+ }
61
+ }
62
+ const telemetry = persistence && options.telemetry !== false ? databricksTelemetry({ client: persistence.client }) : undefined;
63
+ return {
64
+ identity,
65
+ principal: fabricPrincipal,
66
+ actor,
67
+ client,
68
+ modelProvider,
69
+ ...(persistence ? { persistence } : {}),
70
+ ...(telemetry ? { telemetry } : {}),
71
+ async serverOptions() {
72
+ if (!persistence)
73
+ return {};
74
+ const { store, submissionStore, conversationStreamStore } = await persistence.connectAll();
75
+ return { sessionStore: store, submissionStore, conversationStreamStore };
76
+ },
77
+ onBehalfOf(headers) {
78
+ const user = onBehalfOfFromHeaders(headers);
79
+ if (!user)
80
+ return undefined;
81
+ return {
82
+ identity: databricksIdentity(user),
83
+ actor: { principal: fabricPrincipalFor(user), onBehalfOf: user.label ?? 'user' },
84
+ };
85
+ },
86
+ async close() {
87
+ await persistence?.close();
88
+ },
89
+ };
90
+ }
91
+ //# sourceMappingURL=app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -3,17 +3,28 @@ export interface DatabricksClientOptions {
3
3
  token: string | (() => string | Promise<string>);
4
4
  fetchImpl?: typeof fetch;
5
5
  /**
6
- * Retries *after* the initial request for transient failures (429/5xx/network). Default 3, i.e.
7
- * up to 4 total attempts. This is a best-effort transport-level retry, NOT an idempotency
8
- * mechanism: non-idempotent POSTs (e.g. `/sql/statements`, `/jobs/run-now`) can duplicate work if
9
- * a request actually reached the server before failing. Set `maxRetries: 0` to disable, or use
10
- * Databricks' own idempotency tokens where the API supports them.
6
+ * Retries after the initial request for transient failures. Default 3.
7
+ * Applied automatically only to reads and idempotency-protected mutations.
11
8
  */
12
9
  maxRetries?: number;
13
10
  /** Base backoff in ms (exponential per attempt; `Retry-After` honored when present). Default 500. */
14
11
  retryBaseDelayMs?: number;
15
12
  /** Abort signal forwarded to every request. */
16
13
  signal?: AbortSignal;
14
+ /**
15
+ * Extra headers resolved per attempt — e.g. on-behalf-of propagation
16
+ * (forwarding a user's access token or workspace OBO headers) without
17
+ * rebuilding the client. Never logged.
18
+ */
19
+ extraHeaders?: Record<string, string> | (() => Record<string, string> | Promise<Record<string, string>>);
20
+ }
21
+ export interface DatabricksRequestOptions {
22
+ /** Explicitly classify a mutation. `always` must only be used for idempotent operations. */
23
+ retry?: 'safe' | 'always' | 'never';
24
+ /** Adds an Idempotency-Key header and permits transient retries. */
25
+ idempotencyKey?: string;
26
+ /** Per-operation retry count override. */
27
+ maxRetries?: number;
17
28
  }
18
29
  export declare class DatabricksRestClient {
19
30
  private readonly host;
@@ -22,10 +33,11 @@ export declare class DatabricksRestClient {
22
33
  private readonly maxRetries;
23
34
  private readonly retryBaseDelayMs;
24
35
  private readonly signal;
36
+ private readonly extraHeaders;
25
37
  constructor(options: DatabricksClientOptions);
26
38
  get<T>(path: string, query?: Record<string, string | number | boolean | undefined>): Promise<T>;
27
- post<T>(path: string, body?: unknown, query?: Record<string, string | number | boolean | undefined>): Promise<T>;
28
- request<T>(method: string, path: string, body?: unknown, query?: Record<string, string | number | boolean | undefined>): Promise<T>;
39
+ post<T>(path: string, body?: unknown, query?: Record<string, string | number | boolean | undefined>, options?: DatabricksRequestOptions): Promise<T>;
40
+ request<T>(method: string, path: string, body?: unknown, query?: Record<string, string | number | boolean | undefined>, options?: DatabricksRequestOptions): Promise<T>;
29
41
  }
30
42
  export declare function createDatabricksClient(options: DatabricksClientOptions): DatabricksRestClient;
31
43
  export interface DatabricksWaitOptions {
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qGAAqG;IACrG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAeD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;gBAErC,OAAO,EAAE,uBAAuB;IAS5C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI/F,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI1G,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAyC9I;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,oBAAoB,CAE7F;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAS7J;AAED,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASzK"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACjD,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qGAAqG;IACrG,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;CAC1G;AAED,MAAM,WAAW,wBAAwB;IACvC,4FAA4F;IAC5F,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,oEAAoE;IACpE,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0CAA0C;IAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAeD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IACzD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAe;IACzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAS;IAC1C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0B;IACjD,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA0C;gBAE3D,OAAO,EAAE,uBAAuB;IAU5C,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAI/F,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,EAAE,OAAO,CAAC,EAAE,wBAAwB,GAAG,OAAO,CAAC,CAAC,CAAC;IAI9I,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,KAAK,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAM,EAAE,OAAO,GAAE,wBAA6B,GAAG,OAAO,CAAC,CAAC,CAAC;CAoDtL;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,uBAAuB,GAAG,oBAAoB,CAE7F;AAED,MAAM,WAAW,qBAAqB;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAS7J;AAED,wBAAsB,0BAA0B,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CASzK"}
package/dist/client.js CHANGED
@@ -18,6 +18,7 @@ export class DatabricksRestClient {
18
18
  maxRetries;
19
19
  retryBaseDelayMs;
20
20
  signal;
21
+ extraHeaders;
21
22
  constructor(options) {
22
23
  this.host = options.host.replace(/\/$/, '');
23
24
  this.token = options.token;
@@ -25,26 +26,34 @@ export class DatabricksRestClient {
25
26
  this.maxRetries = options.maxRetries ?? 3;
26
27
  this.retryBaseDelayMs = options.retryBaseDelayMs ?? 500;
27
28
  this.signal = options.signal;
29
+ this.extraHeaders = options.extraHeaders;
28
30
  }
29
31
  get(path, query) {
30
32
  return this.request('GET', path, undefined, query);
31
33
  }
32
- post(path, body, query) {
33
- return this.request('POST', path, body, query);
34
+ post(path, body, query, options) {
35
+ return this.request('POST', path, body, query, options);
34
36
  }
35
- async request(method, path, body, query = {}) {
37
+ async request(method, path, body, query = {}, options = {}) {
36
38
  const url = new URL(`${this.host}${path.startsWith('/') ? path : `/${path}`}`);
37
39
  for (const [key, value] of Object.entries(query))
38
40
  if (value !== undefined)
39
41
  url.searchParams.set(key, String(value));
42
+ const bodyHasNativeIdempotency = typeof body === 'object' && body !== null &&
43
+ typeof body.idempotency_token === 'string';
44
+ const canRetry = options.retry === 'always' || (options.retry !== 'never' && (options.retry === 'safe' || method === 'GET' || method === 'HEAD' || Boolean(options.idempotencyKey) || bodyHasNativeIdempotency));
45
+ const maxRetries = canRetry ? (options.maxRetries ?? this.maxRetries) : 0;
40
46
  for (let attempt = 0;; attempt += 1) {
41
47
  // Resolve the (possibly rotating) token on every attempt.
42
48
  const token = typeof this.token === 'function' ? await this.token() : this.token;
49
+ const extra = typeof this.extraHeaders === 'function' ? await this.extraHeaders() : this.extraHeaders;
43
50
  const init = {
44
51
  method,
45
52
  headers: {
46
53
  authorization: `Bearer ${token}`,
47
54
  ...(body !== undefined ? { 'content-type': 'application/json' } : {}),
55
+ ...(options.idempotencyKey ? { 'idempotency-key': options.idempotencyKey } : {}),
56
+ ...extra,
48
57
  },
49
58
  ...(body !== undefined ? { body: JSON.stringify(body) } : {}),
50
59
  ...(this.signal ? { signal: this.signal } : {}),
@@ -55,7 +64,7 @@ export class DatabricksRestClient {
55
64
  }
56
65
  catch (error) {
57
66
  // Network error — retry transient failures, but never swallow an abort.
58
- if (this.signal?.aborted || attempt >= this.maxRetries)
67
+ if (this.signal?.aborted || attempt >= maxRetries)
59
68
  throw error;
60
69
  await new Promise((resolve) => setTimeout(resolve, this.retryBaseDelayMs * 2 ** attempt));
61
70
  continue;
@@ -65,7 +74,7 @@ export class DatabricksRestClient {
65
74
  return undefined;
66
75
  return await response.json();
67
76
  }
68
- if (isRetryableStatus(response.status) && attempt < this.maxRetries) {
77
+ if (isRetryableStatus(response.status) && attempt < maxRetries) {
69
78
  await new Promise((resolve) => setTimeout(resolve, retryDelayMs(response, attempt, this.retryBaseDelayMs)));
70
79
  continue;
71
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,7 @@ export function databricksFeatureLookupTool(client, options) {
23
23
  metadata: { effect: 'read', provider: 'databricks', service: 'feature-serving' },
24
24
  execute: (input) => client.post(`/serving-endpoints/${encodeURIComponent(options.endpoint)}/invocations`, {
25
25
  dataframe_records: input.records,
26
- }),
26
+ }, {}, { retry: 'safe' }),
27
27
  };
28
28
  }
29
29
  //# sourceMappingURL=feature-serving.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"feature-serving.js","sourceRoot":"","sources":["../src/feature-serving.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAA4B,EAAE,OAA2C;IACnH,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,2BAA2B;QACjD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,kGAAkG;QACtI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE;oBACrD,QAAQ,EAAE,CAAC;oBACX,WAAW,EAAE,iDAAiD;iBAC/D;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;QACD,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAChF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE;YACxG,iBAAiB,EAAE,KAAK,CAAC,OAAO;SACjC,CAAC;KACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"feature-serving.js","sourceRoot":"","sources":["../src/feature-serving.ts"],"names":[],"mappings":"AAUA;;;;GAIG;AACH,MAAM,UAAU,2BAA2B,CAAC,MAA4B,EAAE,OAA2C;IACnH,OAAO;QACL,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,2BAA2B;QACjD,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,kGAAkG;QACtI,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,UAAU,EAAE;gBACV,OAAO,EAAE;oBACP,IAAI,EAAE,OAAO;oBACb,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,oBAAoB,EAAE,IAAI,EAAE;oBACrD,QAAQ,EAAE,CAAC;oBACX,WAAW,EAAE,iDAAiD;iBAC/D;aACF;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;QACD,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,iBAAiB,EAAE;QAChF,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,sBAAsB,kBAAkB,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,EAAE;YACxG,iBAAiB,EAAE,KAAK,CAAC,OAAO;SACjC,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;AACJ,CAAC"}
@@ -13,6 +13,10 @@ export interface DatabricksLineageRecord {
13
13
  provider?: string;
14
14
  /** Stable label for the acting principal — never the token. */
15
15
  principal?: string;
16
+ /** Durable submission owning this tool call (v2 correlation, from the ambient submission context). */
17
+ submissionId?: string;
18
+ attemptId?: string;
19
+ tenantId?: string;
16
20
  catalog?: string;
17
21
  schema?: string;
18
22
  input: JsonObject;
@@ -1 +1 @@
1
- {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../src/governance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAErG;;;;;;GAMG;AAEH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oGAAoG;IACpG,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACtD;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAeD,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAsClH;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,GAAE,2BAAgC,GAAG,OAAO,EAAE,CAE1G;AAED,MAAM,WAAW,6BAA6B;IAC5C,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAQD,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,6BAA6B,GAAG,kBAAkB,EAAE,CAUtH;AAED,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iCAAiC,GAAG,gBAAgB,CAcvG"}
1
+ {"version":3,"file":"governance.d.ts","sourceRoot":"","sources":["../src/governance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAErG;;;;;;GAMG;AAEH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,gFAAgF;IAChF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sGAAsG;IACtG,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,UAAU,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,2BAA2B;IAC1C,2FAA2F;IAC3F,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,oGAAoG;IACpG,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,uBAAuB,KAAK,IAAI,CAAC;IACtD;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,iCAAiC;IACjC,GAAG,CAAC,EAAE,MAAM,IAAI,CAAC;CAClB;AAeD,mGAAmG;AACnG,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,OAAO,GAAE,2BAAgC,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAkDlH;AAED,mEAAmE;AACnE,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,GAAE,2BAAgC,GAAG,OAAO,EAAE,CAE1G;AAED,MAAM,WAAW,6BAA6B;IAC5C,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,2FAA2F;IAC3F,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAQD,kGAAkG;AAClG,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,6BAA6B,GAAG,kBAAkB,EAAE,CAUtH;AAED,MAAM,WAAW,iCAAiC;IAChD,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,sEAAsE;IACtE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,iEAAiE;IACjE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAcD;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,iCAAiC,GAAG,gBAAgB,CAcvG"}
@@ -1,4 +1,4 @@
1
- import { redactJson } from '@fabric-harness/sdk';
1
+ import { currentSubmissionContext, redactJson } from '@fabric-harness/sdk';
2
2
  function metaString(tool, key) {
3
3
  const value = tool.metadata?.[key];
4
4
  return typeof value === 'string' ? value : undefined;
@@ -29,11 +29,23 @@ export function withGovernance(tool, options = {}) {
29
29
  const startedAt = now().toISOString();
30
30
  const service = metaString(tool, 'service');
31
31
  const provider = metaString(tool, 'provider');
32
+ // Correlate with the durable submission owning this turn (set by the
33
+ // submission runner); the acting principal falls back to the actor's
34
+ // governed identity when no explicit label was configured.
35
+ const submission = currentSubmissionContext();
36
+ const principal = options.principal ?? submission?.actor?.principal?.id;
32
37
  const base = {
33
38
  tool: tool.name,
34
39
  ...(service !== undefined ? { service } : {}),
35
40
  ...(provider !== undefined ? { provider } : {}),
36
- ...(options.principal !== undefined ? { principal: options.principal } : {}),
41
+ ...(principal !== undefined ? { principal } : {}),
42
+ ...(submission
43
+ ? {
44
+ submissionId: submission.submissionId,
45
+ attemptId: submission.attemptId,
46
+ ...(submission.tenantId !== undefined ? { tenantId: submission.tenantId } : {}),
47
+ }
48
+ : {}),
37
49
  ...(catalog !== undefined ? { catalog } : {}),
38
50
  ...(schema !== undefined ? { schema } : {}),
39
51
  // Redact secret-ish keys before the input enters the audit/lineage record.
@@ -1 +1 @@
1
- {"version":3,"file":"governance.js","sourceRoot":"","sources":["../src/governance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"governance.js","sourceRoot":"","sources":["../src/governance.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import type { FabricPrincipal } from '@fabric-harness/sdk';
1
2
  /**
2
3
  * A bearer-token resolver awaited per request. Shape matches what {@link DatabricksRestClient},
3
4
  * {@link databricksFoundationModelProvider} (via `tokenProvider`), and the Lakebase store accept,
@@ -35,4 +36,37 @@ export type DatabricksPrincipal =
35
36
  };
36
37
  /** Builds a cached, auto-refreshing token provider for a Databricks principal. */
37
38
  export declare function databricksIdentity(principal: DatabricksPrincipal): DatabricksTokenProvider;
39
+ /**
40
+ * The service principal a Databricks App runs as, from the standard app
41
+ * runtime environment (`DATABRICKS_HOST` / `DATABRICKS_CLIENT_ID` /
42
+ * `DATABRICKS_CLIENT_SECRET`). Returns `undefined` when any variable is
43
+ * missing, so callers can fall back to explicit configuration.
44
+ */
45
+ export declare function appServicePrincipalFromEnv(env?: Record<string, string | undefined>): Extract<DatabricksPrincipal, {
46
+ kind: 'service-principal';
47
+ }> | undefined;
48
+ /**
49
+ * On-behalf-of principal from Databricks Apps user-authorization headers:
50
+ * the platform forwards the signed-in user's access token as
51
+ * `x-forwarded-access-token` (plus `x-forwarded-email`/`x-forwarded-user`).
52
+ * Returns `undefined` when the request carries no user token (e.g. app
53
+ * service-to-service traffic) so callers fall back to the app principal.
54
+ */
55
+ export declare function onBehalfOfFromHeaders(headers: Headers | Record<string, string | string[] | undefined>): Extract<DatabricksPrincipal, {
56
+ kind: 'on-behalf-of';
57
+ }> | undefined;
58
+ export interface FabricPrincipalOverrides {
59
+ id?: string;
60
+ /** Unity Catalog principal name, when it differs from the id. */
61
+ ucPrincipal?: string;
62
+ displayName?: string;
63
+ /** Mark a service principal as the hosting app's own identity. */
64
+ asAppPrincipal?: boolean;
65
+ }
66
+ /**
67
+ * Map a Databricks principal onto the SDK's {@link FabricPrincipal} so the
68
+ * governed identity rides submissions → tool calls → lineage/cost records.
69
+ * Never carries a token — ids and labels only.
70
+ */
71
+ export declare function fabricPrincipalFor(principal: DatabricksPrincipal, overrides?: FabricPrincipalOverrides): FabricPrincipal;
38
72
  //# sourceMappingURL=identity.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,MAAM,mBAAmB;AAC7B,qDAAqD;AACnD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAChD,8FAA8F;GAC5F;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0GAA0G;IAC1G,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AACH;;;;GAIG;GACD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAQxF,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,GAAG,uBAAuB,CAU1F"}
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../src/identity.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D;;;;GAIG;AACH,MAAM,MAAM,uBAAuB,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,MAAM,mBAAmB;AAC7B,qDAAqD;AACnD;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE;AAChD,8FAA8F;GAC5F;IACE,IAAI,EAAE,mBAAmB,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0GAA0G;IAC1G,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;CAC1B;AACH;;;;GAIG;GACD;IAAE,IAAI,EAAE,cAAc,CAAC;IAAC,SAAS,EAAE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAQxF,kFAAkF;AAClF,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,GAAG,uBAAuB,CAU1F;AA+CD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAC1F,OAAO,CAAC,mBAAmB,EAAE;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,CAAC,GAAG,SAAS,CAWzE;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAC/D,OAAO,CAAC,mBAAmB,EAAE;IAAE,IAAI,EAAE,cAAc,CAAA;CAAE,CAAC,GAAG,SAAS,CAUpE;AAED,MAAM,WAAW,wBAAwB;IACvC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iEAAiE;IACjE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kEAAkE;IAClE,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,mBAAmB,EAAE,SAAS,GAAE,wBAA6B,GAAG,eAAe,CAiB5H"}