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.
Files changed (279) hide show
  1. package/README.md +74 -3
  2. package/dist/client.d.ts.map +1 -1
  3. package/dist/client.js +6 -2
  4. package/dist/client.js.map +1 -1
  5. package/dist/coalesce/api/environments.d.ts +0 -12
  6. package/dist/coalesce/api/environments.d.ts.map +1 -1
  7. package/dist/coalesce/api/environments.js +0 -4
  8. package/dist/coalesce/api/environments.js.map +1 -1
  9. package/dist/coalesce/api/jobs.d.ts +3 -5
  10. package/dist/coalesce/api/jobs.d.ts.map +1 -1
  11. package/dist/coalesce/api/jobs.js +3 -6
  12. package/dist/coalesce/api/jobs.js.map +1 -1
  13. package/dist/coalesce/api/nodes.d.ts +3 -3
  14. package/dist/coalesce/api/nodes.d.ts.map +1 -1
  15. package/dist/coalesce/api/nodes.js +6 -4
  16. package/dist/coalesce/api/nodes.js.map +1 -1
  17. package/dist/coalesce/api/runs.d.ts.map +1 -1
  18. package/dist/coalesce/api/runs.js +11 -1
  19. package/dist/coalesce/api/runs.js.map +1 -1
  20. package/dist/coalesce/api/scan.d.ts +14 -0
  21. package/dist/coalesce/api/scan.d.ts.map +1 -0
  22. package/dist/coalesce/api/scan.js +64 -0
  23. package/dist/coalesce/api/scan.js.map +1 -0
  24. package/dist/coalesce/api/subgraphs.d.ts +3 -2
  25. package/dist/coalesce/api/subgraphs.d.ts.map +1 -1
  26. package/dist/coalesce/api/subgraphs.js +3 -2
  27. package/dist/coalesce/api/subgraphs.js.map +1 -1
  28. package/dist/coalesce/run-schemas.d.ts.map +1 -1
  29. package/dist/coalesce/run-schemas.js +26 -16
  30. package/dist/coalesce/run-schemas.js.map +1 -1
  31. package/dist/coalesce/tool-response.d.ts +1 -13
  32. package/dist/coalesce/tool-response.d.ts.map +1 -1
  33. package/dist/coalesce/tool-response.js +20 -6
  34. package/dist/coalesce/tool-response.js.map +1 -1
  35. package/dist/coalesce/tool-schemas.d.ts +1 -2
  36. package/dist/coalesce/tool-schemas.d.ts.map +1 -1
  37. package/dist/coalesce/tool-schemas.js +368 -5
  38. package/dist/coalesce/tool-schemas.js.map +1 -1
  39. package/dist/coalesce/types.d.ts +8 -0
  40. package/dist/coalesce/types.d.ts.map +1 -1
  41. package/dist/coalesce/types.js +3 -1
  42. package/dist/coalesce/types.js.map +1 -1
  43. package/dist/constants.d.ts +18 -0
  44. package/dist/constants.d.ts.map +1 -0
  45. package/dist/constants.js +21 -0
  46. package/dist/constants.js.map +1 -0
  47. package/dist/mcp/cache.d.ts +2 -1
  48. package/dist/mcp/cache.d.ts.map +1 -1
  49. package/dist/mcp/cache.js +122 -138
  50. package/dist/mcp/cache.js.map +1 -1
  51. package/dist/mcp/environments.d.ts +2 -1
  52. package/dist/mcp/environments.d.ts.map +1 -1
  53. package/dist/mcp/environments.js +56 -112
  54. package/dist/mcp/environments.js.map +1 -1
  55. package/dist/mcp/git-accounts.d.ts +2 -1
  56. package/dist/mcp/git-accounts.d.ts.map +1 -1
  57. package/dist/mcp/git-accounts.js +74 -96
  58. package/dist/mcp/git-accounts.js.map +1 -1
  59. package/dist/mcp/jobs.d.ts +2 -1
  60. package/dist/mcp/jobs.d.ts.map +1 -1
  61. package/dist/mcp/jobs.js +68 -122
  62. package/dist/mcp/jobs.js.map +1 -1
  63. package/dist/mcp/lineage.d.ts +5 -0
  64. package/dist/mcp/lineage.d.ts.map +1 -0
  65. package/dist/mcp/lineage.js +410 -0
  66. package/dist/mcp/lineage.js.map +1 -0
  67. package/dist/mcp/node-type-corpus.d.ts +2 -1
  68. package/dist/mcp/node-type-corpus.d.ts.map +1 -1
  69. package/dist/mcp/node-type-corpus.js +148 -151
  70. package/dist/mcp/node-type-corpus.js.map +1 -1
  71. package/dist/mcp/nodes.d.ts +2 -1
  72. package/dist/mcp/nodes.d.ts.map +1 -1
  73. package/dist/mcp/nodes.js +358 -464
  74. package/dist/mcp/nodes.js.map +1 -1
  75. package/dist/mcp/pipelines.d.ts +2 -1
  76. package/dist/mcp/pipelines.d.ts.map +1 -1
  77. package/dist/mcp/pipelines.js +514 -314
  78. package/dist/mcp/pipelines.js.map +1 -1
  79. package/dist/mcp/projects.d.ts +2 -1
  80. package/dist/mcp/projects.d.ts.map +1 -1
  81. package/dist/mcp/projects.js +66 -100
  82. package/dist/mcp/projects.js.map +1 -1
  83. package/dist/mcp/repo-node-types.d.ts +2 -1
  84. package/dist/mcp/repo-node-types.d.ts.map +1 -1
  85. package/dist/mcp/repo-node-types.js +92 -121
  86. package/dist/mcp/repo-node-types.js.map +1 -1
  87. package/dist/mcp/runs.d.ts +3 -2
  88. package/dist/mcp/runs.d.ts.map +1 -1
  89. package/dist/mcp/runs.js +93 -148
  90. package/dist/mcp/runs.js.map +1 -1
  91. package/dist/mcp/skills.d.ts +13 -0
  92. package/dist/mcp/skills.d.ts.map +1 -0
  93. package/dist/mcp/skills.js +85 -0
  94. package/dist/mcp/skills.js.map +1 -0
  95. package/dist/mcp/subgraphs.d.ts +2 -1
  96. package/dist/mcp/subgraphs.d.ts.map +1 -1
  97. package/dist/mcp/subgraphs.js +61 -98
  98. package/dist/mcp/subgraphs.js.map +1 -1
  99. package/dist/mcp/tool-helpers.d.ts +37 -0
  100. package/dist/mcp/tool-helpers.d.ts.map +1 -0
  101. package/dist/mcp/tool-helpers.js +82 -0
  102. package/dist/mcp/tool-helpers.js.map +1 -0
  103. package/dist/mcp/users.d.ts +2 -1
  104. package/dist/mcp/users.d.ts.map +1 -1
  105. package/dist/mcp/users.js +92 -145
  106. package/dist/mcp/users.js.map +1 -1
  107. package/dist/mcp/workshop.d.ts +2 -1
  108. package/dist/mcp/workshop.d.ts.map +1 -1
  109. package/dist/mcp/workshop.js +66 -101
  110. package/dist/mcp/workshop.js.map +1 -1
  111. package/dist/mcp/workspaces.d.ts +2 -1
  112. package/dist/mcp/workspaces.d.ts.map +1 -1
  113. package/dist/mcp/workspaces.js +19 -34
  114. package/dist/mcp/workspaces.js.map +1 -1
  115. package/dist/prompts/index.d.ts.map +1 -1
  116. package/dist/prompts/index.js +85 -0
  117. package/dist/prompts/index.js.map +1 -1
  118. package/dist/resources/context/pipeline-workshop-guide.md +1 -1
  119. package/dist/resources/context/tool-usage.md +7 -0
  120. package/dist/resources/index.d.ts +13 -0
  121. package/dist/resources/index.d.ts.map +1 -1
  122. package/dist/resources/index.js +105 -5
  123. package/dist/resources/index.js.map +1 -1
  124. package/dist/schemas/node-payloads.d.ts +2 -2
  125. package/dist/server.d.ts +2 -1
  126. package/dist/server.d.ts.map +1 -1
  127. package/dist/server.js +158 -41
  128. package/dist/server.js.map +1 -1
  129. package/dist/services/cache/snapshots.d.ts.map +1 -1
  130. package/dist/services/cache/snapshots.js +9 -5
  131. package/dist/services/cache/snapshots.js.map +1 -1
  132. package/dist/services/config/schema-resolver.d.ts.map +1 -1
  133. package/dist/services/config/schema-resolver.js +3 -6
  134. package/dist/services/config/schema-resolver.js.map +1 -1
  135. package/dist/services/lineage/lineage-cache.d.ts +53 -0
  136. package/dist/services/lineage/lineage-cache.d.ts.map +1 -0
  137. package/dist/services/lineage/lineage-cache.js +335 -0
  138. package/dist/services/lineage/lineage-cache.js.map +1 -0
  139. package/dist/services/lineage/lineage-documentation.d.ts +29 -0
  140. package/dist/services/lineage/lineage-documentation.d.ts.map +1 -0
  141. package/dist/services/lineage/lineage-documentation.js +80 -0
  142. package/dist/services/lineage/lineage-documentation.js.map +1 -0
  143. package/dist/services/lineage/lineage-propagation.d.ts +47 -0
  144. package/dist/services/lineage/lineage-propagation.d.ts.map +1 -0
  145. package/dist/services/lineage/lineage-propagation.js +176 -0
  146. package/dist/services/lineage/lineage-propagation.js.map +1 -0
  147. package/dist/services/lineage/lineage-search.d.ts +33 -0
  148. package/dist/services/lineage/lineage-search.d.ts.map +1 -0
  149. package/dist/services/lineage/lineage-search.js +133 -0
  150. package/dist/services/lineage/lineage-search.js.map +1 -0
  151. package/dist/services/lineage/lineage-traversal.d.ts +34 -0
  152. package/dist/services/lineage/lineage-traversal.d.ts.map +1 -0
  153. package/dist/services/lineage/lineage-traversal.js +283 -0
  154. package/dist/services/lineage/lineage-traversal.js.map +1 -0
  155. package/dist/services/pipelines/clause-extraction.d.ts +3 -0
  156. package/dist/services/pipelines/clause-extraction.d.ts.map +1 -0
  157. package/dist/services/pipelines/clause-extraction.js +27 -0
  158. package/dist/services/pipelines/clause-extraction.js.map +1 -0
  159. package/dist/services/pipelines/column-helpers.d.ts +8 -0
  160. package/dist/services/pipelines/column-helpers.d.ts.map +1 -0
  161. package/dist/services/pipelines/column-helpers.js +125 -0
  162. package/dist/services/pipelines/column-helpers.js.map +1 -0
  163. package/dist/services/pipelines/cte-parsing.d.ts +29 -0
  164. package/dist/services/pipelines/cte-parsing.d.ts.map +1 -0
  165. package/dist/services/pipelines/cte-parsing.js +160 -0
  166. package/dist/services/pipelines/cte-parsing.js.map +1 -0
  167. package/dist/services/pipelines/cte-planning.d.ts +22 -0
  168. package/dist/services/pipelines/cte-planning.d.ts.map +1 -0
  169. package/dist/services/pipelines/cte-planning.js +206 -0
  170. package/dist/services/pipelines/cte-planning.js.map +1 -0
  171. package/dist/services/pipelines/execution.d.ts.map +1 -1
  172. package/dist/services/pipelines/execution.js +0 -1
  173. package/dist/services/pipelines/execution.js.map +1 -1
  174. package/dist/services/pipelines/intent-parsing.d.ts +24 -0
  175. package/dist/services/pipelines/intent-parsing.d.ts.map +1 -0
  176. package/dist/services/pipelines/intent-parsing.js +245 -0
  177. package/dist/services/pipelines/intent-parsing.js.map +1 -0
  178. package/dist/services/pipelines/intent-resolution.d.ts +24 -0
  179. package/dist/services/pipelines/intent-resolution.d.ts.map +1 -0
  180. package/dist/services/pipelines/intent-resolution.js +141 -0
  181. package/dist/services/pipelines/intent-resolution.js.map +1 -0
  182. package/dist/services/pipelines/intent.d.ts +4 -45
  183. package/dist/services/pipelines/intent.d.ts.map +1 -1
  184. package/dist/services/pipelines/intent.js +14 -408
  185. package/dist/services/pipelines/intent.js.map +1 -1
  186. package/dist/services/pipelines/node-type-candidates.d.ts +6 -0
  187. package/dist/services/pipelines/node-type-candidates.d.ts.map +1 -0
  188. package/dist/services/pipelines/node-type-candidates.js +165 -0
  189. package/dist/services/pipelines/node-type-candidates.js.map +1 -0
  190. package/dist/services/pipelines/node-type-intent.d.ts +1 -5
  191. package/dist/services/pipelines/node-type-intent.d.ts.map +1 -1
  192. package/dist/services/pipelines/node-type-intent.js +1 -5
  193. package/dist/services/pipelines/node-type-intent.js.map +1 -1
  194. package/dist/services/pipelines/node-type-scoring.d.ts +13 -0
  195. package/dist/services/pipelines/node-type-scoring.d.ts.map +1 -0
  196. package/dist/services/pipelines/node-type-scoring.js +322 -0
  197. package/dist/services/pipelines/node-type-scoring.js.map +1 -0
  198. package/dist/services/pipelines/node-type-selection.d.ts +22 -2
  199. package/dist/services/pipelines/node-type-selection.d.ts.map +1 -1
  200. package/dist/services/pipelines/node-type-selection.js +16 -538
  201. package/dist/services/pipelines/node-type-selection.js.map +1 -1
  202. package/dist/services/pipelines/plan-builder.d.ts +33 -0
  203. package/dist/services/pipelines/plan-builder.d.ts.map +1 -0
  204. package/dist/services/pipelines/plan-builder.js +224 -0
  205. package/dist/services/pipelines/plan-builder.js.map +1 -0
  206. package/dist/services/pipelines/planning-types.d.ts +543 -0
  207. package/dist/services/pipelines/planning-types.d.ts.map +1 -0
  208. package/dist/services/pipelines/planning-types.js +85 -0
  209. package/dist/services/pipelines/planning-types.js.map +1 -0
  210. package/dist/services/pipelines/planning.d.ts +8 -537
  211. package/dist/services/pipelines/planning.d.ts.map +1 -1
  212. package/dist/services/pipelines/planning.js +10 -1956
  213. package/dist/services/pipelines/planning.js.map +1 -1
  214. package/dist/services/pipelines/review.d.ts.map +1 -1
  215. package/dist/services/pipelines/review.js +3 -8
  216. package/dist/services/pipelines/review.js.map +1 -1
  217. package/dist/services/pipelines/select-parsing.d.ts +7 -0
  218. package/dist/services/pipelines/select-parsing.d.ts.map +1 -0
  219. package/dist/services/pipelines/select-parsing.js +185 -0
  220. package/dist/services/pipelines/select-parsing.js.map +1 -0
  221. package/dist/services/pipelines/source-parsing.d.ts +8 -0
  222. package/dist/services/pipelines/source-parsing.d.ts.map +1 -0
  223. package/dist/services/pipelines/source-parsing.js +151 -0
  224. package/dist/services/pipelines/source-parsing.js.map +1 -0
  225. package/dist/services/pipelines/sql-parsing.d.ts +8 -0
  226. package/dist/services/pipelines/sql-parsing.d.ts.map +1 -0
  227. package/dist/services/pipelines/sql-parsing.js +9 -0
  228. package/dist/services/pipelines/sql-parsing.js.map +1 -0
  229. package/dist/services/pipelines/sql-tokenizer.d.ts +42 -0
  230. package/dist/services/pipelines/sql-tokenizer.d.ts.map +1 -0
  231. package/dist/services/pipelines/sql-tokenizer.js +493 -0
  232. package/dist/services/pipelines/sql-tokenizer.js.map +1 -0
  233. package/dist/services/pipelines/sql-utils.d.ts +30 -0
  234. package/dist/services/pipelines/sql-utils.d.ts.map +1 -0
  235. package/dist/services/pipelines/sql-utils.js +62 -0
  236. package/dist/services/pipelines/sql-utils.js.map +1 -0
  237. package/dist/services/pipelines/workshop.d.ts.map +1 -1
  238. package/dist/services/pipelines/workshop.js +53 -25
  239. package/dist/services/pipelines/workshop.js.map +1 -1
  240. package/dist/services/pipelines/workspace-resolution.d.ts +18 -0
  241. package/dist/services/pipelines/workspace-resolution.d.ts.map +1 -0
  242. package/dist/services/pipelines/workspace-resolution.js +279 -0
  243. package/dist/services/pipelines/workspace-resolution.js.map +1 -0
  244. package/dist/services/runs/diagnostics.d.ts.map +1 -1
  245. package/dist/services/runs/diagnostics.js +3 -8
  246. package/dist/services/runs/diagnostics.js.map +1 -1
  247. package/dist/services/shared/elicitation.d.ts +14 -0
  248. package/dist/services/shared/elicitation.d.ts.map +1 -0
  249. package/dist/services/shared/elicitation.js +56 -0
  250. package/dist/services/shared/elicitation.js.map +1 -0
  251. package/dist/services/workspace/node-creation.d.ts.map +1 -1
  252. package/dist/services/workspace/node-creation.js +5 -1
  253. package/dist/services/workspace/node-creation.js.map +1 -1
  254. package/dist/services/workspace/node-update-helpers.d.ts.map +1 -1
  255. package/dist/services/workspace/node-update-helpers.js +3 -8
  256. package/dist/services/workspace/node-update-helpers.js.map +1 -1
  257. package/dist/utils.d.ts +11 -0
  258. package/dist/utils.d.ts.map +1 -1
  259. package/dist/utils.js +20 -1
  260. package/dist/utils.js.map +1 -1
  261. package/dist/workflows/get-environment-health.d.ts +49 -0
  262. package/dist/workflows/get-environment-health.d.ts.map +1 -0
  263. package/dist/workflows/get-environment-health.js +310 -0
  264. package/dist/workflows/get-environment-health.js.map +1 -0
  265. package/dist/workflows/get-environment-overview.d.ts +2 -1
  266. package/dist/workflows/get-environment-overview.d.ts.map +1 -1
  267. package/dist/workflows/get-environment-overview.js +13 -19
  268. package/dist/workflows/get-environment-overview.js.map +1 -1
  269. package/dist/workflows/get-run-details.d.ts +2 -2
  270. package/dist/workflows/get-run-details.d.ts.map +1 -1
  271. package/dist/workflows/get-run-details.js +14 -19
  272. package/dist/workflows/get-run-details.js.map +1 -1
  273. package/dist/workflows/retry-and-wait.d.ts.map +1 -1
  274. package/dist/workflows/retry-and-wait.js +3 -2
  275. package/dist/workflows/retry-and-wait.js.map +1 -1
  276. package/dist/workflows/run-and-wait.d.ts.map +1 -1
  277. package/dist/workflows/run-and-wait.js +3 -2
  278. package/dist/workflows/run-and-wait.js.map +1 -1
  279. package/package.json +2 -2
@@ -0,0 +1,410 @@
1
+ import { z } from "zod";
2
+ import { buildJsonToolResponse, getToolOutputSchema, handleToolError, DESTRUCTIVE_ANNOTATIONS, READ_ONLY_ANNOTATIONS, validatePathSegment, } from "../coalesce/types.js";
3
+ import { requireDestructiveConfirmation } from "../services/shared/elicitation.js";
4
+ import { buildLineageCache, walkUpstream, walkDownstream, walkColumnLineage, analyzeNodeImpact, propagateColumnChange, searchWorkspaceContent, auditDocumentationCoverage, } from "../services/lineage/lineage-cache.js";
5
+ import { createWorkflowProgressReporter, } from "../workflows/progress.js";
6
+ export function defineLineageTools(server, client) {
7
+ return [
8
+ // --- get_upstream_nodes ---
9
+ [
10
+ "get_upstream_nodes",
11
+ {
12
+ title: "Get Upstream Nodes",
13
+ description: [
14
+ "Walk the full upstream dependency graph for a node and return every ancestor with its depth level.",
15
+ "",
16
+ "Args:",
17
+ " workspaceID: Workspace to query",
18
+ " nodeID: Starting node whose upstream lineage to trace",
19
+ "",
20
+ "Returns: Array of ancestor nodes with nodeID, nodeName, nodeType, and depth (1 = direct parent).",
21
+ "Traverses the entire graph with no depth limit. Nodes are deduplicated.",
22
+ "",
23
+ "Requires a lineage cache — will fetch all workspace nodes with detail=true on first call (may take a moment for large workspaces). Subsequent calls use the cached graph (default TTL: 30 min).",
24
+ ].join("\n"),
25
+ inputSchema: z.object({
26
+ workspaceID: z.string().describe("Workspace ID"),
27
+ nodeID: z.string().describe("Node ID to trace upstream from"),
28
+ }),
29
+ outputSchema: getToolOutputSchema("get_upstream_nodes"),
30
+ annotations: READ_ONLY_ANNOTATIONS,
31
+ },
32
+ async (params, extra) => {
33
+ try {
34
+ validatePathSegment(params.workspaceID, "workspaceID");
35
+ validatePathSegment(params.nodeID, "nodeID");
36
+ const progressReporter = createWorkflowProgressReporter(extra);
37
+ const cache = await buildLineageCache(client, params.workspaceID, {
38
+ reportProgress: progressReporter,
39
+ });
40
+ if (!cache.nodes.has(params.nodeID)) {
41
+ throw new Error(`Node ${params.nodeID} not found in workspace ${params.workspaceID}. Available nodes: ${cache.nodes.size}. Ensure the node ID is correct.`);
42
+ }
43
+ const ancestors = walkUpstream(cache, params.nodeID);
44
+ const node = cache.nodes.get(params.nodeID);
45
+ return buildJsonToolResponse("get_upstream_nodes", {
46
+ nodeID: params.nodeID,
47
+ nodeName: node.name,
48
+ nodeType: node.nodeType,
49
+ totalAncestors: ancestors.length,
50
+ ancestors,
51
+ });
52
+ }
53
+ catch (error) {
54
+ return handleToolError(error);
55
+ }
56
+ }
57
+ ],
58
+ // --- get_downstream_nodes ---
59
+ [
60
+ "get_downstream_nodes",
61
+ {
62
+ title: "Get Downstream Nodes",
63
+ description: [
64
+ "Walk the full downstream dependency graph for a node and return every dependent with its depth level.",
65
+ "",
66
+ "Args:",
67
+ " workspaceID: Workspace to query",
68
+ " nodeID: Starting node whose downstream dependents to trace",
69
+ "",
70
+ "Returns: Array of dependent nodes with nodeID, nodeName, nodeType, and depth (1 = direct child).",
71
+ "Traverses the entire graph with no depth limit. Nodes are deduplicated.",
72
+ "",
73
+ "Requires a lineage cache — will fetch all workspace nodes with detail=true on first call.",
74
+ ].join("\n"),
75
+ inputSchema: z.object({
76
+ workspaceID: z.string().describe("Workspace ID"),
77
+ nodeID: z.string().describe("Node ID to trace downstream from"),
78
+ }),
79
+ outputSchema: getToolOutputSchema("get_downstream_nodes"),
80
+ annotations: READ_ONLY_ANNOTATIONS,
81
+ },
82
+ async (params, extra) => {
83
+ try {
84
+ validatePathSegment(params.workspaceID, "workspaceID");
85
+ validatePathSegment(params.nodeID, "nodeID");
86
+ const progressReporter = createWorkflowProgressReporter(extra);
87
+ const cache = await buildLineageCache(client, params.workspaceID, {
88
+ reportProgress: progressReporter,
89
+ });
90
+ if (!cache.nodes.has(params.nodeID)) {
91
+ throw new Error(`Node ${params.nodeID} not found in workspace ${params.workspaceID}. Available nodes: ${cache.nodes.size}. Ensure the node ID is correct.`);
92
+ }
93
+ const dependents = walkDownstream(cache, params.nodeID);
94
+ const node = cache.nodes.get(params.nodeID);
95
+ return buildJsonToolResponse("get_downstream_nodes", {
96
+ nodeID: params.nodeID,
97
+ nodeName: node.name,
98
+ nodeType: node.nodeType,
99
+ totalDependents: dependents.length,
100
+ dependents,
101
+ });
102
+ }
103
+ catch (error) {
104
+ return handleToolError(error);
105
+ }
106
+ }
107
+ ],
108
+ // --- get_column_lineage ---
109
+ [
110
+ "get_column_lineage",
111
+ {
112
+ title: "Get Column Lineage",
113
+ description: [
114
+ "Trace a specific column through the entire pipeline — upstream to its sources and downstream to every column that depends on it.",
115
+ "",
116
+ "Args:",
117
+ " workspaceID: Workspace to query",
118
+ " nodeID: Node that contains the column",
119
+ " columnID: Column ID to trace",
120
+ "",
121
+ "Returns: Array of column lineage entries with nodeID, nodeName, nodeType, columnID, columnName, direction (upstream/downstream), and depth.",
122
+ "Uses column-level references (metadata.columns[].sources[].columnReferences[]) to trace the full path.",
123
+ "",
124
+ "Requires a lineage cache — will fetch all workspace nodes with detail=true on first call.",
125
+ ].join("\n"),
126
+ inputSchema: z.object({
127
+ workspaceID: z.string().describe("Workspace ID"),
128
+ nodeID: z.string().describe("Node ID containing the column"),
129
+ columnID: z.string().describe("Column ID to trace lineage for"),
130
+ }),
131
+ outputSchema: getToolOutputSchema("get_column_lineage"),
132
+ annotations: READ_ONLY_ANNOTATIONS,
133
+ },
134
+ async (params, extra) => {
135
+ try {
136
+ validatePathSegment(params.workspaceID, "workspaceID");
137
+ validatePathSegment(params.nodeID, "nodeID");
138
+ const progressReporter = createWorkflowProgressReporter(extra);
139
+ const cache = await buildLineageCache(client, params.workspaceID, {
140
+ reportProgress: progressReporter,
141
+ });
142
+ const node = cache.nodes.get(params.nodeID);
143
+ if (!node) {
144
+ throw new Error(`Node ${params.nodeID} not found in workspace ${params.workspaceID}. Ensure the node ID is correct.`);
145
+ }
146
+ const col = node.columns.find((c) => c.id === params.columnID);
147
+ if (!col) {
148
+ const available = node.columns.map((c) => `${c.id} (${c.name})`).join(", ");
149
+ throw new Error(`Column ${params.columnID} not found on node ${params.nodeID} (${node.name}). Available columns: ${available || "none"}`);
150
+ }
151
+ const lineage = walkColumnLineage(cache, params.nodeID, params.columnID);
152
+ const upstream = lineage.filter((e) => e.direction === "upstream");
153
+ const downstream = lineage.filter((e) => e.direction === "downstream");
154
+ return buildJsonToolResponse("get_column_lineage", {
155
+ nodeID: params.nodeID,
156
+ nodeName: node.name,
157
+ columnID: params.columnID,
158
+ columnName: col.name,
159
+ totalUpstream: upstream.length,
160
+ totalDownstream: downstream.length,
161
+ upstream,
162
+ downstream,
163
+ });
164
+ }
165
+ catch (error) {
166
+ return handleToolError(error);
167
+ }
168
+ }
169
+ ],
170
+ // --- analyze_impact ---
171
+ [
172
+ "analyze_impact",
173
+ {
174
+ title: "Analyze Impact",
175
+ description: [
176
+ "Analyze the downstream impact of changing a node or a specific column.",
177
+ "",
178
+ "Args:",
179
+ " workspaceID: Workspace to query",
180
+ " nodeID: Node to analyze impact for",
181
+ " columnID: (optional) Specific column — if omitted, analyzes impact of the entire node",
182
+ "",
183
+ "Returns: Impacted node count, impacted column count, nodes grouped by depth level, and the critical path (longest dependency chain from source to leaf).",
184
+ "Without columnID: shows all downstream nodes and all columns across them that depend on any column of this node.",
185
+ "With columnID: shows only nodes/columns that specifically depend on that column.",
186
+ "",
187
+ "Requires a lineage cache — will fetch all workspace nodes with detail=true on first call.",
188
+ ].join("\n"),
189
+ inputSchema: z.object({
190
+ workspaceID: z.string().describe("Workspace ID"),
191
+ nodeID: z.string().describe("Node ID to analyze impact for"),
192
+ columnID: z.string().optional().describe("Optional column ID — if provided, only analyzes impact of that specific column"),
193
+ }),
194
+ outputSchema: getToolOutputSchema("analyze_impact"),
195
+ annotations: READ_ONLY_ANNOTATIONS,
196
+ },
197
+ async (params, extra) => {
198
+ try {
199
+ validatePathSegment(params.workspaceID, "workspaceID");
200
+ validatePathSegment(params.nodeID, "nodeID");
201
+ const progressReporter = createWorkflowProgressReporter(extra);
202
+ const cache = await buildLineageCache(client, params.workspaceID, {
203
+ reportProgress: progressReporter,
204
+ });
205
+ if (!cache.nodes.has(params.nodeID)) {
206
+ throw new Error(`Node ${params.nodeID} not found in workspace ${params.workspaceID}. Available nodes: ${cache.nodes.size}. Ensure the node ID is correct.`);
207
+ }
208
+ const result = analyzeNodeImpact(cache, params.nodeID, params.columnID);
209
+ return buildJsonToolResponse("analyze_impact", result);
210
+ }
211
+ catch (error) {
212
+ return handleToolError(error);
213
+ }
214
+ }
215
+ ],
216
+ // --- propagate_column_change ---
217
+ [
218
+ "propagate_column_change",
219
+ {
220
+ title: "Propagate Column Change",
221
+ description: [
222
+ "⚠️ WRITE operation — Updates all downstream columns that depend on a source column.",
223
+ "Use this after renaming a column or changing its data type to propagate the change through the entire pipeline.",
224
+ "",
225
+ "Args:",
226
+ " workspaceID: Workspace to modify",
227
+ " nodeID: Node containing the source column",
228
+ " columnID: Column ID that was changed",
229
+ " changes: Object with optional columnName and/or dataType to propagate",
230
+ "",
231
+ "Returns: Pre-mutation snapshot summary (column-level changes), snapshotPath to a disk file with full node bodies, list of updated nodes/columns, total count, and any errors encountered.",
232
+ "The disk snapshot at snapshotPath captures each downstream node's complete nodeBody before mutation, enabling manual reversal of partial failures via set_workspace_node.",
233
+ "Each downstream node is fetched, its column updated, and the full node PUT back via API.",
234
+ "The lineage cache is invalidated after propagation.",
235
+ "",
236
+ "Requires a lineage cache — will fetch all workspace nodes with detail=true on first call.",
237
+ "Note: Propagation targets are determined from the cached lineage graph (up to 30 min old).",
238
+ "Downstream nodes added after the cache was built will not be included. Refresh lineage first",
239
+ "if the workspace structure has changed recently.",
240
+ ].join("\n"),
241
+ inputSchema: z.object({
242
+ workspaceID: z.string().describe("Workspace ID"),
243
+ nodeID: z.string().describe("Node ID containing the source column"),
244
+ columnID: z.string().describe("Column ID that was changed"),
245
+ changes: z.object({
246
+ columnName: z.string().optional().describe("New column name to propagate"),
247
+ dataType: z.string().optional().describe("New data type to propagate"),
248
+ }).refine((c) => c.columnName !== undefined || c.dataType !== undefined, { message: "At least one of columnName or dataType is required" }).describe("Changes to propagate — at least one of columnName or dataType required"),
249
+ confirmed: z
250
+ .boolean()
251
+ .optional()
252
+ .describe("Set to true after the user explicitly confirms the propagation. Required because this operation modifies multiple downstream nodes."),
253
+ }),
254
+ outputSchema: getToolOutputSchema("propagate_column_change"),
255
+ annotations: DESTRUCTIVE_ANNOTATIONS,
256
+ },
257
+ async (params, extra) => {
258
+ try {
259
+ validatePathSegment(params.workspaceID, "workspaceID");
260
+ validatePathSegment(params.nodeID, "nodeID");
261
+ const progressReporter = createWorkflowProgressReporter(extra);
262
+ const cache = await buildLineageCache(client, params.workspaceID, {
263
+ reportProgress: progressReporter,
264
+ });
265
+ // Validate node + column exist before asking for confirmation
266
+ const node = cache.nodes.get(params.nodeID);
267
+ if (!node) {
268
+ throw new Error(`Node ${params.nodeID} not found in lineage cache`);
269
+ }
270
+ const sourceCol = node.columns.find((c) => c.id === params.columnID);
271
+ if (!sourceCol) {
272
+ throw new Error(`Column ${params.columnID} not found on node ${params.nodeID} (${node.name})`);
273
+ }
274
+ // Use column-level lineage (not node-level) for an accurate count
275
+ const downstreamColumns = walkColumnLineage(cache, params.nodeID, params.columnID)
276
+ .filter((e) => e.direction === "downstream");
277
+ const changeDesc = [
278
+ params.changes.columnName ? `rename to "${params.changes.columnName}"` : null,
279
+ params.changes.dataType ? `change type to ${params.changes.dataType}` : null,
280
+ ].filter(Boolean).join(" and ");
281
+ const approvalResponse = await requireDestructiveConfirmation(server, "propagate_column_change", `This will update column references across ${downstreamColumns.length} downstream node(s) of "${node.name}" (${changeDesc}). This modifies node bodies via the API and cannot be easily undone.`, params.confirmed, { nodeID: params.nodeID, columnID: params.columnID, downstreamCount: downstreamColumns.length });
282
+ if (approvalResponse)
283
+ return approvalResponse;
284
+ const result = await propagateColumnChange(client, cache, params.workspaceID, params.nodeID, params.columnID, params.changes, progressReporter, process.cwd());
285
+ const response = buildJsonToolResponse("propagate_column_change", result);
286
+ if (result.partialFailure) {
287
+ return {
288
+ ...response,
289
+ isError: true,
290
+ content: [
291
+ {
292
+ type: "text",
293
+ text: `⚠️ PARTIAL FAILURE: ${result.totalUpdated} node(s) were updated before a write failed. ${result.skippedNodes?.length ?? 0} node(s) were skipped. ${result.errors.length} total error(s). The workspace is in an inconsistent state.${result.snapshotPath ? ` Full pre-mutation node bodies are saved at ${result.snapshotPath} — each entry contains the complete nodeBody that can be PUT back via set_workspace_node to reverse the change.` : ""} Review updatedNodes, skippedNodes, and errors to determine which nodes need manual correction.`,
294
+ },
295
+ ...(Array.isArray(response.content) ? response.content : []),
296
+ ],
297
+ };
298
+ }
299
+ if (result.errors.length > 0 && result.totalUpdated === 0) {
300
+ return { ...response, isError: true };
301
+ }
302
+ return response;
303
+ }
304
+ catch (error) {
305
+ return handleToolError(error);
306
+ }
307
+ }
308
+ ],
309
+ // --- search_workspace_content ---
310
+ [
311
+ "search_workspace_content",
312
+ {
313
+ title: "Search Workspace Content",
314
+ description: [
315
+ "Search across node names, SQL, column names, descriptions, and config values in a workspace using the lineage cache as the data source.",
316
+ "",
317
+ "Args:",
318
+ " workspaceID: Workspace to search",
319
+ " query: Text to search for (case-insensitive substring match)",
320
+ " fields: (optional) Array of fields to search — any of: name, nodeType, sql, columnName, columnDataType, description, config. Defaults to all fields.",
321
+ " nodeType: (optional) Filter results to a specific node type",
322
+ " limit: (optional) Max results to return (1-200, default 50)",
323
+ "",
324
+ "Returns: Matching nodes with the fields that matched and content snippets.",
325
+ "Efficient for large workspaces — searches the in-memory cache instead of making per-node API calls.",
326
+ "",
327
+ "Requires a populated lineage cache — will fetch all workspace nodes with detail=true on first call (may take a moment for large workspaces). Subsequent calls use the cached data (default TTL: 30 min).",
328
+ ].join("\n"),
329
+ inputSchema: z.object({
330
+ workspaceID: z.string().describe("Workspace ID"),
331
+ query: z.string().min(1).describe("Search text (case-insensitive)"),
332
+ fields: z
333
+ .array(z.enum(["name", "nodeType", "sql", "columnName", "columnDataType", "description", "config"]))
334
+ .optional()
335
+ .describe("Fields to search — defaults to all if omitted"),
336
+ nodeType: z.string().optional().describe("Filter to a specific node type"),
337
+ limit: z
338
+ .number()
339
+ .int()
340
+ .min(1)
341
+ .max(200)
342
+ .optional()
343
+ .describe("Max results (default 50)"),
344
+ }),
345
+ outputSchema: getToolOutputSchema("search_workspace_content"),
346
+ annotations: READ_ONLY_ANNOTATIONS,
347
+ },
348
+ async (params, extra) => {
349
+ try {
350
+ validatePathSegment(params.workspaceID, "workspaceID");
351
+ const progressReporter = createWorkflowProgressReporter(extra);
352
+ const cache = await buildLineageCache(client, params.workspaceID, {
353
+ reportProgress: progressReporter,
354
+ });
355
+ const result = searchWorkspaceContent(cache, {
356
+ query: params.query,
357
+ fields: params.fields,
358
+ nodeType: params.nodeType,
359
+ limit: params.limit,
360
+ });
361
+ return buildJsonToolResponse("search_workspace_content", result);
362
+ }
363
+ catch (error) {
364
+ return handleToolError(error);
365
+ }
366
+ }
367
+ ],
368
+ // --- audit_documentation_coverage ---
369
+ [
370
+ "audit_documentation_coverage",
371
+ {
372
+ title: "Audit Documentation Coverage",
373
+ description: [
374
+ "Scan all nodes and columns in a workspace and report documentation coverage statistics.",
375
+ "",
376
+ "Args:",
377
+ " workspaceID: Workspace to audit",
378
+ "",
379
+ "Returns: Total and documented counts for nodes and columns, percentage coverage,",
380
+ "and lists of undocumented nodes and columns (column list capped at 200).",
381
+ "A node is 'documented' if it has a non-empty description. A column is 'documented'",
382
+ "if its metadata.columns[] entry has a non-empty description field.",
383
+ "",
384
+ "Requires a lineage cache — will fetch all workspace nodes with detail=true on first call",
385
+ "(may take a moment for large workspaces). Subsequent calls use the cached graph (default TTL: 30 min).",
386
+ ].join("\n"),
387
+ inputSchema: z.object({
388
+ workspaceID: z.string().describe("Workspace ID to audit"),
389
+ }),
390
+ outputSchema: getToolOutputSchema("audit_documentation_coverage"),
391
+ annotations: READ_ONLY_ANNOTATIONS,
392
+ },
393
+ async (params, extra) => {
394
+ try {
395
+ validatePathSegment(params.workspaceID, "workspaceID");
396
+ const progressReporter = createWorkflowProgressReporter(extra);
397
+ const cache = await buildLineageCache(client, params.workspaceID, {
398
+ reportProgress: progressReporter,
399
+ });
400
+ const result = auditDocumentationCoverage(cache);
401
+ return buildJsonToolResponse("audit_documentation_coverage", result);
402
+ }
403
+ catch (error) {
404
+ return handleToolError(error);
405
+ }
406
+ }
407
+ ],
408
+ ];
409
+ }
410
+ //# sourceMappingURL=lineage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lineage.js","sourceRoot":"","sources":["../../src/mcp/lineage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EACL,qBAAqB,EACrB,mBAAmB,EACnB,eAAe,EACf,uBAAuB,EACvB,qBAAqB,EACrB,mBAAmB,GAEpB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,8BAA8B,EAAE,MAAM,mCAAmC,CAAC;AACnF,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,qBAAqB,EACrB,sBAAsB,EACtB,0BAA0B,GAE3B,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EACL,8BAA8B,GAE/B,MAAM,0BAA0B,CAAC;AAElC,MAAM,UAAU,kBAAkB,CAChC,MAAiB,EACjB,MAAsB;IAEtB,OAAO;QACP,6BAA6B;QAC7B;YACE,oBAAoB;YACpB;gBACE,KAAK,EAAE,oBAAoB;gBAC3B,WAAW,EAAE;oBACX,oGAAoG;oBACpG,EAAE;oBACF,OAAO;oBACP,mCAAmC;oBACnC,yDAAyD;oBACzD,EAAE;oBACF,kGAAkG;oBAClG,yEAAyE;oBACzE,EAAE;oBACF,iMAAiM;iBAClM,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;iBAC9D,CAAC;gBACF,YAAY,EAAE,mBAAmB,CAAC,oBAAoB,CAAC;gBACvD,WAAW,EAAE,qBAAqB;aACnC;YACD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACH,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;oBACvD,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAE7C,MAAM,gBAAgB,GAAG,8BAA8B,CACrD,KAA0C,CAC3C,CAAC;oBAEF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;wBAChE,cAAc,EAAE,gBAAgB;qBACjC,CAAC,CAAC;oBAEH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;wBACpC,MAAM,IAAI,KAAK,CACb,QAAQ,MAAM,CAAC,MAAM,2BAA2B,MAAM,CAAC,WAAW,sBAAsB,KAAK,CAAC,KAAK,CAAC,IAAI,kCAAkC,CAC3I,CAAC;oBACJ,CAAC;oBAED,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBACrD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAE,CAAC;oBAE7C,OAAO,qBAAqB,CAAC,oBAAoB,EAAE;wBACjD,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;wBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,cAAc,EAAE,SAAS,CAAC,MAAM;wBAChC,SAAS;qBACV,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;SACF;QAED,+BAA+B;QAC/B;YACE,sBAAsB;YACtB;gBACE,KAAK,EAAE,sBAAsB;gBAC7B,WAAW,EAAE;oBACX,uGAAuG;oBACvG,EAAE;oBACF,OAAO;oBACP,mCAAmC;oBACnC,8DAA8D;oBAC9D,EAAE;oBACF,kGAAkG;oBAClG,yEAAyE;oBACzE,EAAE;oBACF,2FAA2F;iBAC5F,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;iBAChE,CAAC;gBACF,YAAY,EAAE,mBAAmB,CAAC,sBAAsB,CAAC;gBACzD,WAAW,EAAE,qBAAqB;aACnC;YACD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACH,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;oBACvD,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAE7C,MAAM,gBAAgB,GAAG,8BAA8B,CACrD,KAA0C,CAC3C,CAAC;oBAEF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;wBAChE,cAAc,EAAE,gBAAgB;qBACjC,CAAC,CAAC;oBAEH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;wBACpC,MAAM,IAAI,KAAK,CACb,QAAQ,MAAM,CAAC,MAAM,2BAA2B,MAAM,CAAC,WAAW,sBAAsB,KAAK,CAAC,KAAK,CAAC,IAAI,kCAAkC,CAC3I,CAAC;oBACJ,CAAC;oBAED,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;oBACxD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAE,CAAC;oBAE7C,OAAO,qBAAqB,CAAC,sBAAsB,EAAE;wBACnD,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;wBACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;wBACvB,eAAe,EAAE,UAAU,CAAC,MAAM;wBAClC,UAAU;qBACX,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;SACF;QAED,6BAA6B;QAC7B;YACE,oBAAoB;YACpB;gBACE,KAAK,EAAE,oBAAoB;gBAC3B,WAAW,EAAE;oBACX,kIAAkI;oBAClI,EAAE;oBACF,OAAO;oBACP,mCAAmC;oBACnC,yCAAyC;oBACzC,gCAAgC;oBAChC,EAAE;oBACF,6IAA6I;oBAC7I,wGAAwG;oBACxG,EAAE;oBACF,2FAA2F;iBAC5F,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;oBAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;iBAChE,CAAC;gBACF,YAAY,EAAE,mBAAmB,CAAC,oBAAoB,CAAC;gBACvD,WAAW,EAAE,qBAAqB;aACnC;YACD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACH,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;oBACvD,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAE7C,MAAM,gBAAgB,GAAG,8BAA8B,CACrD,KAA0C,CAC3C,CAAC;oBAEF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;wBAChE,cAAc,EAAE,gBAAgB;qBACjC,CAAC,CAAC;oBAEH,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,MAAM,IAAI,KAAK,CACb,QAAQ,MAAM,CAAC,MAAM,2BAA2B,MAAM,CAAC,WAAW,kCAAkC,CACrG,CAAC;oBACJ,CAAC;oBAED,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAC/D,IAAI,CAAC,GAAG,EAAE,CAAC;wBACT,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBAC5E,MAAM,IAAI,KAAK,CACb,UAAU,MAAM,CAAC,QAAQ,sBAAsB,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,yBAAyB,SAAS,IAAI,MAAM,EAAE,CACzH,CAAC;oBACJ,CAAC;oBAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACzE,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,UAAU,CAAC,CAAC;oBACnE,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC;oBAEvE,OAAO,qBAAqB,CAAC,oBAAoB,EAAE;wBACjD,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,QAAQ,EAAE,IAAI,CAAC,IAAI;wBACnB,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,UAAU,EAAE,GAAG,CAAC,IAAI;wBACpB,aAAa,EAAE,QAAQ,CAAC,MAAM;wBAC9B,eAAe,EAAE,UAAU,CAAC,MAAM;wBAClC,QAAQ;wBACR,UAAU;qBACX,CAAC,CAAC;gBACL,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;SACF;QAED,yBAAyB;QACzB;YACE,gBAAgB;YAChB;gBACE,KAAK,EAAE,gBAAgB;gBACvB,WAAW,EAAE;oBACX,wEAAwE;oBACxE,EAAE;oBACF,OAAO;oBACP,mCAAmC;oBACnC,sCAAsC;oBACtC,yFAAyF;oBACzF,EAAE;oBACF,0JAA0J;oBAC1J,kHAAkH;oBAClH,kFAAkF;oBAClF,EAAE;oBACF,2FAA2F;iBAC5F,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;oBAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gFAAgF,CAAC;iBAC3H,CAAC;gBACF,YAAY,EAAE,mBAAmB,CAAC,gBAAgB,CAAC;gBACnD,WAAW,EAAE,qBAAqB;aACnC;YACD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACH,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;oBACvD,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAE7C,MAAM,gBAAgB,GAAG,8BAA8B,CACrD,KAA0C,CAC3C,CAAC;oBAEF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;wBAChE,cAAc,EAAE,gBAAgB;qBACjC,CAAC,CAAC;oBAEH,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;wBACpC,MAAM,IAAI,KAAK,CACb,QAAQ,MAAM,CAAC,MAAM,2BAA2B,MAAM,CAAC,WAAW,sBAAsB,KAAK,CAAC,KAAK,CAAC,IAAI,kCAAkC,CAC3I,CAAC;oBACJ,CAAC;oBAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;oBAExE,OAAO,qBAAqB,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;gBACzD,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;SACF;QAED,kCAAkC;QAClC;YACE,yBAAyB;YACzB;gBACE,KAAK,EAAE,yBAAyB;gBAChC,WAAW,EAAE;oBACX,qFAAqF;oBACrF,iHAAiH;oBACjH,EAAE;oBACF,OAAO;oBACP,oCAAoC;oBACpC,6CAA6C;oBAC7C,wCAAwC;oBACxC,yEAAyE;oBACzE,EAAE;oBACF,2LAA2L;oBAC3L,2KAA2K;oBAC3K,0FAA0F;oBAC1F,qDAAqD;oBACrD,EAAE;oBACF,2FAA2F;oBAC3F,4FAA4F;oBAC5F,8FAA8F;oBAC9F,kDAAkD;iBACnD,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAChD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;oBACnE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;oBAC3D,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC;wBAChB,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;wBAC1E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;qBACvE,CAAC,CAAC,MAAM,CACP,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,KAAK,SAAS,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,EAC7D,EAAE,OAAO,EAAE,oDAAoD,EAAE,CAClE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;oBACpF,SAAS,EAAE,CAAC;yBACT,OAAO,EAAE;yBACT,QAAQ,EAAE;yBACV,QAAQ,CAAC,qIAAqI,CAAC;iBACnJ,CAAC;gBACF,YAAY,EAAE,mBAAmB,CAAC,yBAAyB,CAAC;gBAC5D,WAAW,EAAE,uBAAuB;aACrC;YACD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACH,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;oBACvD,mBAAmB,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;oBAE7C,MAAM,gBAAgB,GAAG,8BAA8B,CACrD,KAA0C,CAC3C,CAAC;oBAEF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;wBAChE,cAAc,EAAE,gBAAgB;qBACjC,CAAC,CAAC;oBAEH,8DAA8D;oBAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;wBACV,MAAM,IAAI,KAAK,CAAC,QAAQ,MAAM,CAAC,MAAM,6BAA6B,CAAC,CAAC;oBACtE,CAAC;oBACD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC;oBACrE,IAAI,CAAC,SAAS,EAAE,CAAC;wBACf,MAAM,IAAI,KAAK,CAAC,UAAU,MAAM,CAAC,QAAQ,sBAAsB,MAAM,CAAC,MAAM,KAAK,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;oBACjG,CAAC;oBAED,kEAAkE;oBAClE,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC;yBAC/E,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,YAAY,CAAC,CAAC;oBAC/C,MAAM,UAAU,GAAG;wBACjB,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,cAAc,MAAM,CAAC,OAAO,CAAC,UAAU,GAAG,CAAC,CAAC,CAAC,IAAI;wBAC7E,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,kBAAkB,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI;qBAC7E,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;oBAEhC,MAAM,gBAAgB,GAAG,MAAM,8BAA8B,CAC3D,MAAM,EACN,yBAAyB,EACzB,6CAA6C,iBAAiB,CAAC,MAAM,2BAA2B,IAAI,CAAC,IAAI,MAAM,UAAU,uEAAuE,EAChM,MAAM,CAAC,SAAS,EAChB,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,eAAe,EAAE,iBAAiB,CAAC,MAAM,EAAE,CAChG,CAAC;oBACF,IAAI,gBAAgB;wBAAE,OAAO,gBAAgB,CAAC;oBAE9C,MAAM,MAAM,GAAG,MAAM,qBAAqB,CACxC,MAAM,EACN,KAAK,EACL,MAAM,CAAC,WAAW,EAClB,MAAM,CAAC,MAAM,EACb,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,OAAO,EACd,gBAAgB,EAChB,OAAO,CAAC,GAAG,EAAE,CACd,CAAC;oBAEF,MAAM,QAAQ,GAAG,qBAAqB,CAAC,yBAAyB,EAAE,MAAM,CAAC,CAAC;oBAC1E,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;wBAC1B,OAAO;4BACL,GAAG,QAAQ;4BACX,OAAO,EAAE,IAAI;4BACb,OAAO,EAAE;gCACP;oCACE,IAAI,EAAE,MAAe;oCACrB,IAAI,EAAE,uBAAuB,MAAM,CAAC,YAAY,gDAAgD,MAAM,CAAC,YAAY,EAAE,MAAM,IAAI,CAAC,0BAA0B,MAAM,CAAC,MAAM,CAAC,MAAM,8DAA8D,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,+CAA+C,MAAM,CAAC,YAAY,iHAAiH,CAAC,CAAC,CAAC,EAAE,iGAAiG;iCAC5hB;gCACD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;6BAC7D;yBACF,CAAC;oBACJ,CAAC;oBACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;wBAC1D,OAAO,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oBACxC,CAAC;oBACD,OAAO,QAAQ,CAAC;gBAClB,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;SACF;QAED,mCAAmC;QACnC;YACE,0BAA0B;YAC1B;gBACE,KAAK,EAAE,0BAA0B;gBACjC,WAAW,EAAE;oBACX,yIAAyI;oBACzI,EAAE;oBACF,OAAO;oBACP,oCAAoC;oBACpC,gEAAgE;oBAChE,wJAAwJ;oBACxJ,+DAA+D;oBAC/D,+DAA+D;oBAC/D,EAAE;oBACF,4EAA4E;oBAC5E,qGAAqG;oBACrG,EAAE;oBACF,0MAA0M;iBAC3M,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;oBAChD,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;oBACnE,MAAM,EAAE,CAAC;yBACN,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC;yBACnG,QAAQ,EAAE;yBACV,QAAQ,CAAC,+CAA+C,CAAC;oBAC5D,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;oBAC1E,KAAK,EAAE,CAAC;yBACL,MAAM,EAAE;yBACR,GAAG,EAAE;yBACL,GAAG,CAAC,CAAC,CAAC;yBACN,GAAG,CAAC,GAAG,CAAC;yBACR,QAAQ,EAAE;yBACV,QAAQ,CAAC,0BAA0B,CAAC;iBACxC,CAAC;gBACF,YAAY,EAAE,mBAAmB,CAAC,0BAA0B,CAAC;gBAC7D,WAAW,EAAE,qBAAqB;aACnC;YACD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACH,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;oBAEvD,MAAM,gBAAgB,GAAG,8BAA8B,CACrD,KAA0C,CAC3C,CAAC;oBAEF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;wBAChE,cAAc,EAAE,gBAAgB;qBACjC,CAAC,CAAC;oBAEH,MAAM,MAAM,GAAG,sBAAsB,CAAC,KAAK,EAAE;wBAC3C,KAAK,EAAE,MAAM,CAAC,KAAK;wBACnB,MAAM,EAAE,MAAM,CAAC,MAAmC;wBAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ;wBACzB,KAAK,EAAE,MAAM,CAAC,KAAK;qBACpB,CAAC,CAAC;oBAEH,OAAO,qBAAqB,CAAC,0BAA0B,EAAE,MAAM,CAAC,CAAC;gBACnE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;SACF;QAED,uCAAuC;QACvC;YACE,8BAA8B;YAC9B;gBACE,KAAK,EAAE,8BAA8B;gBACrC,WAAW,EAAE;oBACX,yFAAyF;oBACzF,EAAE;oBACF,OAAO;oBACP,mCAAmC;oBACnC,EAAE;oBACF,kFAAkF;oBAClF,0EAA0E;oBAC1E,oFAAoF;oBACpF,oEAAoE;oBACpE,EAAE;oBACF,0FAA0F;oBAC1F,wGAAwG;iBACzG,CAAC,IAAI,CAAC,IAAI,CAAC;gBACZ,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;oBACpB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;iBAC1D,CAAC;gBACF,YAAY,EAAE,mBAAmB,CAAC,8BAA8B,CAAC;gBACjE,WAAW,EAAE,qBAAqB;aACnC;YACD,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE;gBACtB,IAAI,CAAC;oBACH,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;oBAEvD,MAAM,gBAAgB,GAAG,8BAA8B,CACrD,KAA0C,CAC3C,CAAC;oBAEF,MAAM,KAAK,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;wBAChE,cAAc,EAAE,gBAAgB;qBACjC,CAAC,CAAC;oBAEH,MAAM,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC,CAAC;oBAEjD,OAAO,qBAAqB,CAAC,8BAA8B,EAAE,MAAM,CAAC,CAAC;gBACvE,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;gBAChC,CAAC;YACH,CAAC;SACF;KACA,CAAC;AACJ,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
2
  import type { CoalesceClient } from "../client.js";
3
- export declare function registerNodeTypeCorpusTools(server: McpServer, client: CoalesceClient): void;
3
+ import { type ToolDefinition } from "../coalesce/types.js";
4
+ export declare function defineNodeTypeCorpusTools(_server: McpServer, client: CoalesceClient): ToolDefinition[];
4
5
  //# sourceMappingURL=node-type-corpus.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"node-type-corpus.d.ts","sourceRoot":"","sources":["../../src/mcp/node-type-corpus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAoDnD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,SAAS,EACjB,MAAM,EAAE,cAAc,GACrB,IAAI,CA+MN"}
1
+ {"version":3,"file":"node-type-corpus.d.ts","sourceRoot":"","sources":["../../src/mcp/node-type-corpus.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAqBnD,OAAO,EAKL,KAAK,cAAc,EACpB,MAAM,sBAAsB,CAAC;AA0B9B,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,SAAS,EAClB,MAAM,EAAE,cAAc,GACrB,cAAc,EAAE,CA8LlB"}