coalesce-transform-mcp 0.3.0 → 0.4.2
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 +74 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +6 -2
- package/dist/client.js.map +1 -1
- package/dist/coalesce/api/environments.d.ts +0 -12
- package/dist/coalesce/api/environments.d.ts.map +1 -1
- package/dist/coalesce/api/environments.js +0 -4
- package/dist/coalesce/api/environments.js.map +1 -1
- package/dist/coalesce/api/jobs.d.ts +3 -5
- package/dist/coalesce/api/jobs.d.ts.map +1 -1
- package/dist/coalesce/api/jobs.js +3 -6
- package/dist/coalesce/api/jobs.js.map +1 -1
- package/dist/coalesce/api/nodes.d.ts +3 -3
- package/dist/coalesce/api/nodes.d.ts.map +1 -1
- package/dist/coalesce/api/nodes.js +6 -4
- package/dist/coalesce/api/nodes.js.map +1 -1
- package/dist/coalesce/api/runs.d.ts.map +1 -1
- package/dist/coalesce/api/runs.js +11 -1
- package/dist/coalesce/api/runs.js.map +1 -1
- package/dist/coalesce/api/scan.d.ts +14 -0
- package/dist/coalesce/api/scan.d.ts.map +1 -0
- package/dist/coalesce/api/scan.js +64 -0
- package/dist/coalesce/api/scan.js.map +1 -0
- package/dist/coalesce/api/subgraphs.d.ts +3 -2
- package/dist/coalesce/api/subgraphs.d.ts.map +1 -1
- package/dist/coalesce/api/subgraphs.js +3 -2
- package/dist/coalesce/api/subgraphs.js.map +1 -1
- package/dist/coalesce/run-schemas.d.ts.map +1 -1
- package/dist/coalesce/run-schemas.js +26 -16
- package/dist/coalesce/run-schemas.js.map +1 -1
- package/dist/coalesce/tool-response.d.ts +1 -13
- package/dist/coalesce/tool-response.d.ts.map +1 -1
- package/dist/coalesce/tool-response.js +20 -6
- package/dist/coalesce/tool-response.js.map +1 -1
- package/dist/coalesce/tool-schemas.d.ts +1 -2
- package/dist/coalesce/tool-schemas.d.ts.map +1 -1
- package/dist/coalesce/tool-schemas.js +368 -5
- package/dist/coalesce/tool-schemas.js.map +1 -1
- package/dist/coalesce/types.d.ts +8 -0
- package/dist/coalesce/types.d.ts.map +1 -1
- package/dist/coalesce/types.js +3 -1
- package/dist/coalesce/types.js.map +1 -1
- package/dist/constants.d.ts +18 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +21 -0
- package/dist/constants.js.map +1 -0
- package/dist/mcp/cache.d.ts +2 -1
- package/dist/mcp/cache.d.ts.map +1 -1
- package/dist/mcp/cache.js +122 -138
- package/dist/mcp/cache.js.map +1 -1
- package/dist/mcp/environments.d.ts +2 -1
- package/dist/mcp/environments.d.ts.map +1 -1
- package/dist/mcp/environments.js +56 -112
- package/dist/mcp/environments.js.map +1 -1
- package/dist/mcp/git-accounts.d.ts +2 -1
- package/dist/mcp/git-accounts.d.ts.map +1 -1
- package/dist/mcp/git-accounts.js +74 -96
- package/dist/mcp/git-accounts.js.map +1 -1
- package/dist/mcp/jobs.d.ts +2 -1
- package/dist/mcp/jobs.d.ts.map +1 -1
- package/dist/mcp/jobs.js +68 -122
- package/dist/mcp/jobs.js.map +1 -1
- package/dist/mcp/lineage.d.ts +5 -0
- package/dist/mcp/lineage.d.ts.map +1 -0
- package/dist/mcp/lineage.js +410 -0
- package/dist/mcp/lineage.js.map +1 -0
- package/dist/mcp/node-type-corpus.d.ts +2 -1
- package/dist/mcp/node-type-corpus.d.ts.map +1 -1
- package/dist/mcp/node-type-corpus.js +148 -151
- package/dist/mcp/node-type-corpus.js.map +1 -1
- package/dist/mcp/nodes.d.ts +2 -1
- package/dist/mcp/nodes.d.ts.map +1 -1
- package/dist/mcp/nodes.js +358 -464
- package/dist/mcp/nodes.js.map +1 -1
- package/dist/mcp/pipelines.d.ts +2 -1
- package/dist/mcp/pipelines.d.ts.map +1 -1
- package/dist/mcp/pipelines.js +514 -314
- package/dist/mcp/pipelines.js.map +1 -1
- package/dist/mcp/projects.d.ts +2 -1
- package/dist/mcp/projects.d.ts.map +1 -1
- package/dist/mcp/projects.js +66 -100
- package/dist/mcp/projects.js.map +1 -1
- package/dist/mcp/repo-node-types.d.ts +2 -1
- package/dist/mcp/repo-node-types.d.ts.map +1 -1
- package/dist/mcp/repo-node-types.js +92 -121
- package/dist/mcp/repo-node-types.js.map +1 -1
- package/dist/mcp/runs.d.ts +3 -2
- package/dist/mcp/runs.d.ts.map +1 -1
- package/dist/mcp/runs.js +93 -148
- package/dist/mcp/runs.js.map +1 -1
- package/dist/mcp/skills.d.ts +13 -0
- package/dist/mcp/skills.d.ts.map +1 -0
- package/dist/mcp/skills.js +85 -0
- package/dist/mcp/skills.js.map +1 -0
- package/dist/mcp/subgraphs.d.ts +2 -1
- package/dist/mcp/subgraphs.d.ts.map +1 -1
- package/dist/mcp/subgraphs.js +61 -98
- package/dist/mcp/subgraphs.js.map +1 -1
- package/dist/mcp/tool-helpers.d.ts +37 -0
- package/dist/mcp/tool-helpers.d.ts.map +1 -0
- package/dist/mcp/tool-helpers.js +82 -0
- package/dist/mcp/tool-helpers.js.map +1 -0
- package/dist/mcp/users.d.ts +2 -1
- package/dist/mcp/users.d.ts.map +1 -1
- package/dist/mcp/users.js +92 -145
- package/dist/mcp/users.js.map +1 -1
- package/dist/mcp/workshop.d.ts +2 -1
- package/dist/mcp/workshop.d.ts.map +1 -1
- package/dist/mcp/workshop.js +66 -101
- package/dist/mcp/workshop.js.map +1 -1
- package/dist/mcp/workspaces.d.ts +2 -1
- package/dist/mcp/workspaces.d.ts.map +1 -1
- package/dist/mcp/workspaces.js +19 -34
- package/dist/mcp/workspaces.js.map +1 -1
- package/dist/prompts/index.d.ts.map +1 -1
- package/dist/prompts/index.js +85 -0
- package/dist/prompts/index.js.map +1 -1
- package/dist/resources/context/pipeline-workshop-guide.md +1 -1
- package/dist/resources/context/tool-usage.md +7 -0
- package/dist/resources/index.d.ts +13 -0
- package/dist/resources/index.d.ts.map +1 -1
- package/dist/resources/index.js +105 -5
- package/dist/resources/index.js.map +1 -1
- package/dist/schemas/node-payloads.d.ts +2 -2
- package/dist/server.d.ts +2 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +158 -41
- package/dist/server.js.map +1 -1
- package/dist/services/cache/snapshots.d.ts.map +1 -1
- package/dist/services/cache/snapshots.js +9 -5
- package/dist/services/cache/snapshots.js.map +1 -1
- package/dist/services/config/schema-resolver.d.ts.map +1 -1
- package/dist/services/config/schema-resolver.js +3 -6
- package/dist/services/config/schema-resolver.js.map +1 -1
- package/dist/services/lineage/lineage-cache.d.ts +53 -0
- package/dist/services/lineage/lineage-cache.d.ts.map +1 -0
- package/dist/services/lineage/lineage-cache.js +335 -0
- package/dist/services/lineage/lineage-cache.js.map +1 -0
- package/dist/services/lineage/lineage-documentation.d.ts +29 -0
- package/dist/services/lineage/lineage-documentation.d.ts.map +1 -0
- package/dist/services/lineage/lineage-documentation.js +80 -0
- package/dist/services/lineage/lineage-documentation.js.map +1 -0
- package/dist/services/lineage/lineage-propagation.d.ts +47 -0
- package/dist/services/lineage/lineage-propagation.d.ts.map +1 -0
- package/dist/services/lineage/lineage-propagation.js +176 -0
- package/dist/services/lineage/lineage-propagation.js.map +1 -0
- package/dist/services/lineage/lineage-search.d.ts +33 -0
- package/dist/services/lineage/lineage-search.d.ts.map +1 -0
- package/dist/services/lineage/lineage-search.js +133 -0
- package/dist/services/lineage/lineage-search.js.map +1 -0
- package/dist/services/lineage/lineage-traversal.d.ts +34 -0
- package/dist/services/lineage/lineage-traversal.d.ts.map +1 -0
- package/dist/services/lineage/lineage-traversal.js +283 -0
- package/dist/services/lineage/lineage-traversal.js.map +1 -0
- package/dist/services/pipelines/clause-extraction.d.ts +3 -0
- package/dist/services/pipelines/clause-extraction.d.ts.map +1 -0
- package/dist/services/pipelines/clause-extraction.js +27 -0
- package/dist/services/pipelines/clause-extraction.js.map +1 -0
- package/dist/services/pipelines/column-helpers.d.ts +8 -0
- package/dist/services/pipelines/column-helpers.d.ts.map +1 -0
- package/dist/services/pipelines/column-helpers.js +125 -0
- package/dist/services/pipelines/column-helpers.js.map +1 -0
- package/dist/services/pipelines/cte-parsing.d.ts +29 -0
- package/dist/services/pipelines/cte-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/cte-parsing.js +160 -0
- package/dist/services/pipelines/cte-parsing.js.map +1 -0
- package/dist/services/pipelines/cte-planning.d.ts +22 -0
- package/dist/services/pipelines/cte-planning.d.ts.map +1 -0
- package/dist/services/pipelines/cte-planning.js +206 -0
- package/dist/services/pipelines/cte-planning.js.map +1 -0
- package/dist/services/pipelines/execution.d.ts.map +1 -1
- package/dist/services/pipelines/execution.js +0 -1
- package/dist/services/pipelines/execution.js.map +1 -1
- package/dist/services/pipelines/intent-parsing.d.ts +24 -0
- package/dist/services/pipelines/intent-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/intent-parsing.js +245 -0
- package/dist/services/pipelines/intent-parsing.js.map +1 -0
- package/dist/services/pipelines/intent-resolution.d.ts +24 -0
- package/dist/services/pipelines/intent-resolution.d.ts.map +1 -0
- package/dist/services/pipelines/intent-resolution.js +141 -0
- package/dist/services/pipelines/intent-resolution.js.map +1 -0
- package/dist/services/pipelines/intent.d.ts +4 -45
- package/dist/services/pipelines/intent.d.ts.map +1 -1
- package/dist/services/pipelines/intent.js +14 -408
- package/dist/services/pipelines/intent.js.map +1 -1
- package/dist/services/pipelines/node-type-candidates.d.ts +6 -0
- package/dist/services/pipelines/node-type-candidates.d.ts.map +1 -0
- package/dist/services/pipelines/node-type-candidates.js +165 -0
- package/dist/services/pipelines/node-type-candidates.js.map +1 -0
- package/dist/services/pipelines/node-type-intent.d.ts +1 -5
- package/dist/services/pipelines/node-type-intent.d.ts.map +1 -1
- package/dist/services/pipelines/node-type-intent.js +1 -5
- package/dist/services/pipelines/node-type-intent.js.map +1 -1
- package/dist/services/pipelines/node-type-scoring.d.ts +13 -0
- package/dist/services/pipelines/node-type-scoring.d.ts.map +1 -0
- package/dist/services/pipelines/node-type-scoring.js +322 -0
- package/dist/services/pipelines/node-type-scoring.js.map +1 -0
- package/dist/services/pipelines/node-type-selection.d.ts +22 -2
- package/dist/services/pipelines/node-type-selection.d.ts.map +1 -1
- package/dist/services/pipelines/node-type-selection.js +16 -538
- package/dist/services/pipelines/node-type-selection.js.map +1 -1
- package/dist/services/pipelines/plan-builder.d.ts +33 -0
- package/dist/services/pipelines/plan-builder.d.ts.map +1 -0
- package/dist/services/pipelines/plan-builder.js +224 -0
- package/dist/services/pipelines/plan-builder.js.map +1 -0
- package/dist/services/pipelines/planning-types.d.ts +543 -0
- package/dist/services/pipelines/planning-types.d.ts.map +1 -0
- package/dist/services/pipelines/planning-types.js +85 -0
- package/dist/services/pipelines/planning-types.js.map +1 -0
- package/dist/services/pipelines/planning.d.ts +8 -537
- package/dist/services/pipelines/planning.d.ts.map +1 -1
- package/dist/services/pipelines/planning.js +10 -1956
- package/dist/services/pipelines/planning.js.map +1 -1
- package/dist/services/pipelines/review.d.ts.map +1 -1
- package/dist/services/pipelines/review.js +3 -8
- package/dist/services/pipelines/review.js.map +1 -1
- package/dist/services/pipelines/select-parsing.d.ts +7 -0
- package/dist/services/pipelines/select-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/select-parsing.js +185 -0
- package/dist/services/pipelines/select-parsing.js.map +1 -0
- package/dist/services/pipelines/source-parsing.d.ts +8 -0
- package/dist/services/pipelines/source-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/source-parsing.js +151 -0
- package/dist/services/pipelines/source-parsing.js.map +1 -0
- package/dist/services/pipelines/sql-parsing.d.ts +8 -0
- package/dist/services/pipelines/sql-parsing.d.ts.map +1 -0
- package/dist/services/pipelines/sql-parsing.js +9 -0
- package/dist/services/pipelines/sql-parsing.js.map +1 -0
- package/dist/services/pipelines/sql-tokenizer.d.ts +42 -0
- package/dist/services/pipelines/sql-tokenizer.d.ts.map +1 -0
- package/dist/services/pipelines/sql-tokenizer.js +493 -0
- package/dist/services/pipelines/sql-tokenizer.js.map +1 -0
- package/dist/services/pipelines/sql-utils.d.ts +30 -0
- package/dist/services/pipelines/sql-utils.d.ts.map +1 -0
- package/dist/services/pipelines/sql-utils.js +62 -0
- package/dist/services/pipelines/sql-utils.js.map +1 -0
- package/dist/services/pipelines/workshop.d.ts.map +1 -1
- package/dist/services/pipelines/workshop.js +53 -25
- package/dist/services/pipelines/workshop.js.map +1 -1
- package/dist/services/pipelines/workspace-resolution.d.ts +18 -0
- package/dist/services/pipelines/workspace-resolution.d.ts.map +1 -0
- package/dist/services/pipelines/workspace-resolution.js +279 -0
- package/dist/services/pipelines/workspace-resolution.js.map +1 -0
- package/dist/services/runs/diagnostics.d.ts.map +1 -1
- package/dist/services/runs/diagnostics.js +3 -8
- package/dist/services/runs/diagnostics.js.map +1 -1
- package/dist/services/shared/elicitation.d.ts +14 -0
- package/dist/services/shared/elicitation.d.ts.map +1 -0
- package/dist/services/shared/elicitation.js +56 -0
- package/dist/services/shared/elicitation.js.map +1 -0
- package/dist/services/workspace/node-creation.d.ts.map +1 -1
- package/dist/services/workspace/node-creation.js +5 -1
- package/dist/services/workspace/node-creation.js.map +1 -1
- package/dist/services/workspace/node-update-helpers.d.ts.map +1 -1
- package/dist/services/workspace/node-update-helpers.js +3 -8
- package/dist/services/workspace/node-update-helpers.js.map +1 -1
- package/dist/utils.d.ts +11 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +20 -1
- package/dist/utils.js.map +1 -1
- package/dist/workflows/get-environment-health.d.ts +49 -0
- package/dist/workflows/get-environment-health.d.ts.map +1 -0
- package/dist/workflows/get-environment-health.js +310 -0
- package/dist/workflows/get-environment-health.js.map +1 -0
- package/dist/workflows/get-environment-overview.d.ts +2 -1
- package/dist/workflows/get-environment-overview.d.ts.map +1 -1
- package/dist/workflows/get-environment-overview.js +13 -19
- package/dist/workflows/get-environment-overview.js.map +1 -1
- package/dist/workflows/get-run-details.d.ts +2 -2
- package/dist/workflows/get-run-details.d.ts.map +1 -1
- package/dist/workflows/get-run-details.js +14 -19
- package/dist/workflows/get-run-details.js.map +1 -1
- package/dist/workflows/retry-and-wait.d.ts.map +1 -1
- package/dist/workflows/retry-and-wait.js +3 -2
- package/dist/workflows/retry-and-wait.js.map +1 -1
- package/dist/workflows/run-and-wait.d.ts.map +1 -1
- package/dist/workflows/run-and-wait.js +3 -2
- package/dist/workflows/run-and-wait.js.map +1 -1
- package/package.json +2 -2
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { CACHE_DIR_NAME } from "../../cache-dir.js";
|
|
4
|
+
import { invalidateLineageCache } from "./lineage-cache.js";
|
|
5
|
+
import { walkColumnLineage } from "./lineage-traversal.js";
|
|
6
|
+
import { setWorkspaceNode } from "../../coalesce/api/nodes.js";
|
|
7
|
+
import { buildUpdatedWorkspaceNodeBody } from "../workspace/node-update-helpers.js";
|
|
8
|
+
import { validatePathSegment } from "../../coalesce/types.js";
|
|
9
|
+
import { isPlainObject } from "../../utils.js";
|
|
10
|
+
export async function propagateColumnChange(client, cache, workspaceID, nodeID, columnID, changes, reportProgress, baseDir) {
|
|
11
|
+
if (!changes.columnName && !changes.dataType) {
|
|
12
|
+
throw new Error("At least one change (columnName or dataType) must be specified");
|
|
13
|
+
}
|
|
14
|
+
const node = cache.nodes.get(nodeID);
|
|
15
|
+
if (!node) {
|
|
16
|
+
throw new Error(`Node ${nodeID} not found in lineage cache`);
|
|
17
|
+
}
|
|
18
|
+
const sourceCol = node.columns.find((c) => c.id === columnID);
|
|
19
|
+
if (!sourceCol) {
|
|
20
|
+
throw new Error(`Column ${columnID} not found on node ${nodeID} (${node.name})`);
|
|
21
|
+
}
|
|
22
|
+
// Find all downstream columns that reference this column
|
|
23
|
+
const downstreamEntries = walkColumnLineage(cache, nodeID, columnID).filter((e) => e.direction === "downstream");
|
|
24
|
+
const safeWorkspaceID = validatePathSegment(workspaceID, "workspaceID");
|
|
25
|
+
async function emitProgress(label, itemName, index, total) {
|
|
26
|
+
if (reportProgress) {
|
|
27
|
+
await reportProgress(`${label} column ${itemName} (${index + 1}/${total})`, total);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// --- Phase 1: Prepare all changes (read-only, no writes) ---
|
|
31
|
+
const prepared = [];
|
|
32
|
+
const prepareErrors = [];
|
|
33
|
+
const snapshotTimestamp = new Date().toISOString();
|
|
34
|
+
const fullSnapshot = [];
|
|
35
|
+
for (let i = 0; i < downstreamEntries.length; i++) {
|
|
36
|
+
const entry = downstreamEntries[i];
|
|
37
|
+
await emitProgress("Preparing", `${entry.columnName} on ${entry.nodeName}`, i, downstreamEntries.length);
|
|
38
|
+
try {
|
|
39
|
+
const currentNode = await client.get(`/api/v1/workspaces/${safeWorkspaceID}/nodes/${validatePathSegment(entry.nodeID, "nodeID")}`, {});
|
|
40
|
+
if (!isPlainObject(currentNode) || !isPlainObject(currentNode.metadata)) {
|
|
41
|
+
prepareErrors.push({ nodeID: entry.nodeID, columnID: entry.columnID, message: "Could not read node metadata" });
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const metadata = currentNode.metadata;
|
|
45
|
+
const columns = Array.isArray(metadata.columns) ? [...metadata.columns] : [];
|
|
46
|
+
const colIndex = columns.findIndex((c) => isPlainObject(c) &&
|
|
47
|
+
(c.id === entry.columnID || c.columnID === entry.columnID));
|
|
48
|
+
if (colIndex === -1) {
|
|
49
|
+
prepareErrors.push({ nodeID: entry.nodeID, columnID: entry.columnID, message: "Column not found in current node state" });
|
|
50
|
+
continue;
|
|
51
|
+
}
|
|
52
|
+
const col = columns[colIndex];
|
|
53
|
+
const previousName = typeof col.name === "string" ? col.name : undefined;
|
|
54
|
+
const previousDataType = typeof col.dataType === "string" ? col.dataType : undefined;
|
|
55
|
+
// Capture pre-mutation snapshot (full nodeBody for disk persistence)
|
|
56
|
+
fullSnapshot.push({
|
|
57
|
+
nodeID: entry.nodeID,
|
|
58
|
+
nodeName: entry.nodeName,
|
|
59
|
+
columnID: entry.columnID,
|
|
60
|
+
previousColumnName: previousName ?? entry.columnName,
|
|
61
|
+
previousDataType: previousDataType ?? "unknown",
|
|
62
|
+
capturedAt: snapshotTimestamp,
|
|
63
|
+
nodeBody: structuredClone(currentNode),
|
|
64
|
+
});
|
|
65
|
+
const updatedCol = { ...col };
|
|
66
|
+
if (changes.columnName)
|
|
67
|
+
updatedCol.name = changes.columnName;
|
|
68
|
+
if (changes.dataType)
|
|
69
|
+
updatedCol.dataType = changes.dataType;
|
|
70
|
+
columns[colIndex] = updatedCol;
|
|
71
|
+
const body = buildUpdatedWorkspaceNodeBody(currentNode, { metadata: { columns } });
|
|
72
|
+
prepared.push({
|
|
73
|
+
nodeID: entry.nodeID,
|
|
74
|
+
nodeName: entry.nodeName,
|
|
75
|
+
columnID: entry.columnID,
|
|
76
|
+
columnName: changes.columnName ?? entry.columnName,
|
|
77
|
+
previousName,
|
|
78
|
+
previousDataType,
|
|
79
|
+
body,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
84
|
+
prepareErrors.push({ nodeID: entry.nodeID, columnID: entry.columnID, message });
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Strip nodeBody from full snapshot entries for inline (LLM-friendly) response. */
|
|
88
|
+
function toSummary(entries) {
|
|
89
|
+
return entries.map(({ nodeBody: _, ...rest }) => rest);
|
|
90
|
+
}
|
|
91
|
+
// If nothing could be prepared, return early -- no writes attempted
|
|
92
|
+
if (prepared.length === 0) {
|
|
93
|
+
return {
|
|
94
|
+
sourceNodeID: nodeID,
|
|
95
|
+
sourceColumnID: columnID,
|
|
96
|
+
changes,
|
|
97
|
+
preMutationSnapshot: toSummary(fullSnapshot),
|
|
98
|
+
updatedNodes: [],
|
|
99
|
+
totalUpdated: 0,
|
|
100
|
+
errors: prepareErrors,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// --- Persist pre-mutation snapshot to disk ---
|
|
104
|
+
let snapshotPath;
|
|
105
|
+
try {
|
|
106
|
+
const resolvedBase = baseDir ?? process.cwd();
|
|
107
|
+
const snapshotDir = join(resolvedBase, CACHE_DIR_NAME, "propagation-snapshots");
|
|
108
|
+
mkdirSync(snapshotDir, { recursive: true });
|
|
109
|
+
const fileName = `propagation-${workspaceID}-${snapshotTimestamp.replace(/[:.]/g, "-")}.json`;
|
|
110
|
+
snapshotPath = join(snapshotDir, fileName);
|
|
111
|
+
const diskSnapshot = {
|
|
112
|
+
workspaceID,
|
|
113
|
+
sourceNodeID: nodeID,
|
|
114
|
+
sourceColumnID: columnID,
|
|
115
|
+
changes,
|
|
116
|
+
capturedAt: snapshotTimestamp,
|
|
117
|
+
entries: fullSnapshot,
|
|
118
|
+
};
|
|
119
|
+
writeFileSync(snapshotPath, JSON.stringify(diskSnapshot, null, 2));
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
// Snapshot write failure should not block propagation
|
|
123
|
+
const reason = err instanceof Error ? err.message : String(err);
|
|
124
|
+
process.stderr.write(`Warning: failed to write pre-mutation snapshot to disk: ${reason}\n`);
|
|
125
|
+
snapshotPath = undefined;
|
|
126
|
+
}
|
|
127
|
+
// --- Phase 2: Apply all prepared changes ---
|
|
128
|
+
const updatedNodes = [];
|
|
129
|
+
const writeErrors = [];
|
|
130
|
+
for (let i = 0; i < prepared.length; i++) {
|
|
131
|
+
const update = prepared[i];
|
|
132
|
+
await emitProgress("Applying", `${update.columnName} on ${update.nodeName}`, i, prepared.length);
|
|
133
|
+
try {
|
|
134
|
+
await setWorkspaceNode(client, {
|
|
135
|
+
workspaceID: safeWorkspaceID,
|
|
136
|
+
nodeID: validatePathSegment(update.nodeID, "nodeID"),
|
|
137
|
+
body: update.body,
|
|
138
|
+
});
|
|
139
|
+
const { body: _, ...info } = update;
|
|
140
|
+
updatedNodes.push(info);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
144
|
+
writeErrors.push({ nodeID: update.nodeID, columnID: update.columnID, message });
|
|
145
|
+
// Stop on first write failure to minimize workspace inconsistency
|
|
146
|
+
break;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
const allErrors = [...prepareErrors, ...writeErrors];
|
|
150
|
+
const partialFailure = updatedNodes.length > 0 && writeErrors.length > 0;
|
|
151
|
+
// Skipped = prepared entries after the last written + 1 failed entry.
|
|
152
|
+
// The write loop processes prepared[] in order and breaks on first error,
|
|
153
|
+
// so everything beyond (updatedNodes.length + writeErrors.length) was skipped.
|
|
154
|
+
const firstSkippedIndex = updatedNodes.length + writeErrors.length;
|
|
155
|
+
const skippedNodes = prepared.slice(firstSkippedIndex).map(({ body: _, ...info }) => info);
|
|
156
|
+
// Only invalidate cache if writes were actually made
|
|
157
|
+
if (updatedNodes.length > 0) {
|
|
158
|
+
invalidateLineageCache(workspaceID);
|
|
159
|
+
}
|
|
160
|
+
const result = {
|
|
161
|
+
sourceNodeID: nodeID,
|
|
162
|
+
sourceColumnID: columnID,
|
|
163
|
+
changes,
|
|
164
|
+
preMutationSnapshot: toSummary(fullSnapshot),
|
|
165
|
+
...(snapshotPath ? { snapshotPath } : {}),
|
|
166
|
+
updatedNodes,
|
|
167
|
+
totalUpdated: updatedNodes.length,
|
|
168
|
+
errors: allErrors,
|
|
169
|
+
};
|
|
170
|
+
if (partialFailure)
|
|
171
|
+
result.partialFailure = true;
|
|
172
|
+
if (skippedNodes.length > 0)
|
|
173
|
+
result.skippedNodes = skippedNodes;
|
|
174
|
+
return result;
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=lineage-propagation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage-propagation.js","sourceRoot":"","sources":["../../../src/services/lineage/lineage-propagation.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { LineageCacheEntry } from "./lineage-cache.js";
|
|
2
|
+
export type SearchField = "name" | "nodeType" | "sql" | "columnName" | "columnDataType" | "description" | "config";
|
|
3
|
+
export type WorkspaceSearchParams = {
|
|
4
|
+
query: string;
|
|
5
|
+
fields?: SearchField[];
|
|
6
|
+
nodeType?: string;
|
|
7
|
+
limit?: number;
|
|
8
|
+
};
|
|
9
|
+
export type SearchMatch = {
|
|
10
|
+
nodeID: string;
|
|
11
|
+
nodeName: string;
|
|
12
|
+
nodeType: string;
|
|
13
|
+
matchedFields: string[];
|
|
14
|
+
matches: Array<{
|
|
15
|
+
field: string;
|
|
16
|
+
/** For column matches, the column name */
|
|
17
|
+
columnName?: string;
|
|
18
|
+
/** Snippet of the matched content (truncated for large values) */
|
|
19
|
+
snippet: string;
|
|
20
|
+
}>;
|
|
21
|
+
};
|
|
22
|
+
export type WorkspaceSearchResult = {
|
|
23
|
+
query: string;
|
|
24
|
+
fields: SearchField[];
|
|
25
|
+
nodeTypeFilter?: string;
|
|
26
|
+
totalMatches: number;
|
|
27
|
+
returnedCount: number;
|
|
28
|
+
truncated: boolean;
|
|
29
|
+
results: SearchMatch[];
|
|
30
|
+
cacheAge: string;
|
|
31
|
+
};
|
|
32
|
+
export declare function searchWorkspaceContent(cache: LineageCacheEntry, params: WorkspaceSearchParams): WorkspaceSearchResult;
|
|
33
|
+
//# sourceMappingURL=lineage-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage-search.d.ts","sourceRoot":"","sources":["../../../src/services/lineage/lineage-search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAK5D,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,YAAY,GAAG,gBAAgB,GAAG,aAAa,GAAG,QAAQ,CAAC;AAInH,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,0CAA0C;QAC1C,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,kEAAkE;QAClE,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC,CAAC;CACJ,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AA4CF,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,qBAAqB,GAC5B,qBAAqB,CAiGvB"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { isPlainObject } from "../../utils.js";
|
|
2
|
+
const ALL_SEARCH_FIELDS = ["name", "nodeType", "sql", "columnName", "columnDataType", "description", "config"];
|
|
3
|
+
function extractSql(raw) {
|
|
4
|
+
const metadata = isPlainObject(raw.metadata) ? raw.metadata : {};
|
|
5
|
+
if (typeof metadata.query === "string" && metadata.query.length > 0)
|
|
6
|
+
return metadata.query;
|
|
7
|
+
if (typeof metadata.sqlQuery === "string" && metadata.sqlQuery.length > 0)
|
|
8
|
+
return metadata.sqlQuery;
|
|
9
|
+
const sourceMapping = Array.isArray(metadata.sourceMapping) ? metadata.sourceMapping : [];
|
|
10
|
+
for (const mapping of sourceMapping) {
|
|
11
|
+
if (isPlainObject(mapping) && typeof mapping.query === "string" && mapping.query.length > 0) {
|
|
12
|
+
return mapping.query;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
function extractDescription(raw) {
|
|
18
|
+
if (typeof raw.description === "string" && raw.description.length > 0)
|
|
19
|
+
return raw.description;
|
|
20
|
+
const metadata = isPlainObject(raw.metadata) ? raw.metadata : {};
|
|
21
|
+
if (typeof metadata.description === "string" && metadata.description.length > 0)
|
|
22
|
+
return metadata.description;
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
function extractConfigString(raw) {
|
|
26
|
+
const config = isPlainObject(raw.config) ? raw.config : {};
|
|
27
|
+
const keys = Object.keys(config);
|
|
28
|
+
if (keys.length === 0)
|
|
29
|
+
return undefined;
|
|
30
|
+
return JSON.stringify(config);
|
|
31
|
+
}
|
|
32
|
+
function snippet(text, query, maxLen = 200) {
|
|
33
|
+
const lowerText = text.toLowerCase();
|
|
34
|
+
const lowerQuery = query.toLowerCase();
|
|
35
|
+
const idx = lowerText.indexOf(lowerQuery);
|
|
36
|
+
if (idx === -1) {
|
|
37
|
+
return text.length > maxLen ? `${text.slice(0, maxLen)}…` : text;
|
|
38
|
+
}
|
|
39
|
+
const start = Math.max(0, idx - 60);
|
|
40
|
+
const end = Math.min(text.length, idx + query.length + 60);
|
|
41
|
+
let s = text.slice(start, end);
|
|
42
|
+
if (start > 0)
|
|
43
|
+
s = `…${s}`;
|
|
44
|
+
if (end < text.length)
|
|
45
|
+
s = `${s}…`;
|
|
46
|
+
return s;
|
|
47
|
+
}
|
|
48
|
+
export function searchWorkspaceContent(cache, params) {
|
|
49
|
+
const { query, limit = 50 } = params;
|
|
50
|
+
const fields = params.fields && params.fields.length > 0 ? params.fields : ALL_SEARCH_FIELDS;
|
|
51
|
+
if (query.length === 0) {
|
|
52
|
+
throw new Error("Search query must not be empty");
|
|
53
|
+
}
|
|
54
|
+
const lowerQuery = query.toLowerCase();
|
|
55
|
+
const allMatches = [];
|
|
56
|
+
for (const node of cache.nodes.values()) {
|
|
57
|
+
if (params.nodeType && node.nodeType.toLowerCase() !== params.nodeType.toLowerCase()) {
|
|
58
|
+
continue;
|
|
59
|
+
}
|
|
60
|
+
const matchedFields = [];
|
|
61
|
+
const matches = [];
|
|
62
|
+
if (fields.includes("name") && node.name.toLowerCase().includes(lowerQuery)) {
|
|
63
|
+
matchedFields.push("name");
|
|
64
|
+
matches.push({ field: "name", snippet: node.name });
|
|
65
|
+
}
|
|
66
|
+
if (fields.includes("nodeType") && node.nodeType.toLowerCase().includes(lowerQuery)) {
|
|
67
|
+
matchedFields.push("nodeType");
|
|
68
|
+
matches.push({ field: "nodeType", snippet: node.nodeType });
|
|
69
|
+
}
|
|
70
|
+
if (fields.includes("sql")) {
|
|
71
|
+
const sql = extractSql(node.raw);
|
|
72
|
+
if (sql && sql.toLowerCase().includes(lowerQuery)) {
|
|
73
|
+
matchedFields.push("sql");
|
|
74
|
+
matches.push({ field: "sql", snippet: snippet(sql, query) });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
if (fields.includes("description")) {
|
|
78
|
+
const desc = extractDescription(node.raw);
|
|
79
|
+
if (desc && desc.toLowerCase().includes(lowerQuery)) {
|
|
80
|
+
matchedFields.push("description");
|
|
81
|
+
matches.push({ field: "description", snippet: snippet(desc, query) });
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
if (fields.includes("config")) {
|
|
85
|
+
const configStr = extractConfigString(node.raw);
|
|
86
|
+
if (configStr && configStr.toLowerCase().includes(lowerQuery)) {
|
|
87
|
+
matchedFields.push("config");
|
|
88
|
+
matches.push({ field: "config", snippet: snippet(configStr, query) });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
if (fields.includes("columnName")) {
|
|
92
|
+
for (const col of node.columns) {
|
|
93
|
+
if (col.name.toLowerCase().includes(lowerQuery)) {
|
|
94
|
+
if (!matchedFields.includes("columnName"))
|
|
95
|
+
matchedFields.push("columnName");
|
|
96
|
+
matches.push({ field: "columnName", columnName: col.name, snippet: col.name });
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (fields.includes("columnDataType")) {
|
|
101
|
+
for (const col of node.columns) {
|
|
102
|
+
if (col.dataType && col.dataType.toLowerCase().includes(lowerQuery)) {
|
|
103
|
+
if (!matchedFields.includes("columnDataType"))
|
|
104
|
+
matchedFields.push("columnDataType");
|
|
105
|
+
matches.push({ field: "columnDataType", columnName: col.name, snippet: col.dataType });
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
if (matches.length > 0) {
|
|
110
|
+
allMatches.push({
|
|
111
|
+
nodeID: node.id,
|
|
112
|
+
nodeName: node.name,
|
|
113
|
+
nodeType: node.nodeType,
|
|
114
|
+
matchedFields,
|
|
115
|
+
matches,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
const results = allMatches.slice(0, limit);
|
|
120
|
+
const ageMs = Date.now() - cache.cachedAt;
|
|
121
|
+
const ageMin = Math.round(ageMs / 60_000);
|
|
122
|
+
return {
|
|
123
|
+
query,
|
|
124
|
+
fields,
|
|
125
|
+
...(params.nodeType ? { nodeTypeFilter: params.nodeType } : {}),
|
|
126
|
+
totalMatches: allMatches.length,
|
|
127
|
+
returnedCount: results.length,
|
|
128
|
+
truncated: allMatches.length > limit,
|
|
129
|
+
results,
|
|
130
|
+
cacheAge: ageMin < 1 ? "< 1 minute" : `${ageMin} minute${ageMin === 1 ? "" : "s"}`,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=lineage-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage-search.js","sourceRoot":"","sources":["../../../src/services/lineage/lineage-search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { LineageCacheEntry } from "./lineage-cache.js";
|
|
2
|
+
export type LineageGraphNode = {
|
|
3
|
+
nodeID: string;
|
|
4
|
+
nodeName: string;
|
|
5
|
+
nodeType: string;
|
|
6
|
+
depth: number;
|
|
7
|
+
};
|
|
8
|
+
export declare function walkUpstream(cache: LineageCacheEntry, startNodeID: string): LineageGraphNode[];
|
|
9
|
+
export declare function walkDownstream(cache: LineageCacheEntry, startNodeID: string): LineageGraphNode[];
|
|
10
|
+
export type ColumnLineageEntry = {
|
|
11
|
+
nodeID: string;
|
|
12
|
+
nodeName: string;
|
|
13
|
+
nodeType: string;
|
|
14
|
+
columnID: string;
|
|
15
|
+
columnName: string;
|
|
16
|
+
direction: "upstream" | "downstream";
|
|
17
|
+
depth: number;
|
|
18
|
+
};
|
|
19
|
+
export declare function walkColumnLineage(cache: LineageCacheEntry, nodeID: string, columnID: string): ColumnLineageEntry[];
|
|
20
|
+
export type ImpactResult = {
|
|
21
|
+
sourceNodeID: string;
|
|
22
|
+
sourceNodeName: string;
|
|
23
|
+
sourceNodeType: string;
|
|
24
|
+
sourceColumnID?: string;
|
|
25
|
+
sourceColumnName?: string;
|
|
26
|
+
impactedNodes: LineageGraphNode[];
|
|
27
|
+
impactedColumns: ColumnLineageEntry[];
|
|
28
|
+
totalImpactedNodes: number;
|
|
29
|
+
totalImpactedColumns: number;
|
|
30
|
+
byDepth: Record<number, string[]>;
|
|
31
|
+
criticalPath: string[];
|
|
32
|
+
};
|
|
33
|
+
export declare function analyzeNodeImpact(cache: LineageCacheEntry, nodeID: string, columnID?: string): ImpactResult;
|
|
34
|
+
//# sourceMappingURL=lineage-traversal.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lineage-traversal.d.ts","sourceRoot":"","sources":["../../../src/services/lineage/lineage-traversal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAK5D,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA4B9F;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,GAAG,gBAAgB,EAAE,CA4BhG;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,UAAU,GAAG,YAAY,CAAC;IACrC,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,GACf,kBAAkB,EAAE,CA+EtB;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,gBAAgB,EAAE,CAAC;IAClC,eAAe,EAAE,kBAAkB,EAAE,CAAC;IACtC,kBAAkB,EAAE,MAAM,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,MAAM,EACd,QAAQ,CAAC,EAAE,MAAM,GAChB,YAAY,CAoEd"}
|