import type { SubmissionTelemetrySink } from "@fabric-harness/sdk"; import type { DatabricksLineageRecord } from "./governance.js"; import type { LakebaseClient } from "./lakebase.js"; /** * Cost + lineage as core telemetry (v2, workstream C4): submission lifecycle * events and governed tool-call lineage land in Lakebase tables keyed by the * same `submissionId` that drives events, settlement, and audit — so spend, * lineage, and outcomes join on one stable key. Writes are fire-and-forget: * a telemetry failure must never affect execution. */ export interface DatabricksTelemetryOptions { client: LakebaseClient; /** Create the telemetry tables on first use. Default true. */ initialize?: boolean; /** Failure reporter (default console.error). */ onError?: (context: string, error: unknown) => void; } export interface DatabricksTelemetry { /** Wire into `createSubmissionRunner({ telemetry })`. */ sink: SubmissionTelemetrySink; /** Wire into `withGovernance({ onLineage })` / the `databricks()` bundle. */ onLineage: (record: DatabricksLineageRecord) => void; /** Idempotent schema setup (also runs lazily on first write). */ migrate(): Promise; } /** Create the telemetry tables when absent. Idempotent. */ export declare function ensureDatabricksTelemetryTables(client: LakebaseClient): Promise; export declare function databricksTelemetry(options: DatabricksTelemetryOptions): DatabricksTelemetry; export interface DatabricksLineageEvidenceRow { submissionId: string; actor?: string; object?: string; operation?: string; outcome: "succeeded" | "failed"; estimatedCostUsd: number; startedAt: string; finishedAt: string; } /** Join governed object access to the submission actor, outcome, and model/tool cost. */ export declare function queryDatabricksLineageEvidence(client: LakebaseClient, submissionId: string): Promise; //# sourceMappingURL=telemetry-sink.d.ts.map