coalesce-transform-mcp 0.2.3 → 0.4.1

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 (320) hide show
  1. package/README.md +84 -2
  2. package/dist/client.d.ts +1 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +27 -3
  5. package/dist/client.js.map +1 -1
  6. package/dist/coalesce/api/environments.d.ts +0 -12
  7. package/dist/coalesce/api/environments.d.ts.map +1 -1
  8. package/dist/coalesce/api/environments.js +0 -4
  9. package/dist/coalesce/api/environments.js.map +1 -1
  10. package/dist/coalesce/api/jobs.d.ts +3 -5
  11. package/dist/coalesce/api/jobs.d.ts.map +1 -1
  12. package/dist/coalesce/api/jobs.js +3 -6
  13. package/dist/coalesce/api/jobs.js.map +1 -1
  14. package/dist/coalesce/api/nodes.d.ts +3 -3
  15. package/dist/coalesce/api/nodes.d.ts.map +1 -1
  16. package/dist/coalesce/api/nodes.js +6 -4
  17. package/dist/coalesce/api/nodes.js.map +1 -1
  18. package/dist/coalesce/api/runs.d.ts.map +1 -1
  19. package/dist/coalesce/api/runs.js +11 -1
  20. package/dist/coalesce/api/runs.js.map +1 -1
  21. package/dist/coalesce/api/scan.d.ts +14 -0
  22. package/dist/coalesce/api/scan.d.ts.map +1 -0
  23. package/dist/coalesce/api/scan.js +64 -0
  24. package/dist/coalesce/api/scan.js.map +1 -0
  25. package/dist/coalesce/api/subgraphs.d.ts +3 -2
  26. package/dist/coalesce/api/subgraphs.d.ts.map +1 -1
  27. package/dist/coalesce/api/subgraphs.js +3 -2
  28. package/dist/coalesce/api/subgraphs.js.map +1 -1
  29. package/dist/coalesce/run-schemas.d.ts.map +1 -1
  30. package/dist/coalesce/run-schemas.js +26 -16
  31. package/dist/coalesce/run-schemas.js.map +1 -1
  32. package/dist/coalesce/tool-response.d.ts +1 -13
  33. package/dist/coalesce/tool-response.d.ts.map +1 -1
  34. package/dist/coalesce/tool-response.js +20 -6
  35. package/dist/coalesce/tool-response.js.map +1 -1
  36. package/dist/coalesce/tool-schemas.d.ts +1 -2
  37. package/dist/coalesce/tool-schemas.d.ts.map +1 -1
  38. package/dist/coalesce/tool-schemas.js +368 -5
  39. package/dist/coalesce/tool-schemas.js.map +1 -1
  40. package/dist/coalesce/types.d.ts +8 -0
  41. package/dist/coalesce/types.d.ts.map +1 -1
  42. package/dist/coalesce/types.js +8 -3
  43. package/dist/coalesce/types.js.map +1 -1
  44. package/dist/constants.d.ts +18 -0
  45. package/dist/constants.d.ts.map +1 -0
  46. package/dist/constants.js +21 -0
  47. package/dist/constants.js.map +1 -0
  48. package/dist/mcp/cache.d.ts +2 -1
  49. package/dist/mcp/cache.d.ts.map +1 -1
  50. package/dist/mcp/cache.js +122 -138
  51. package/dist/mcp/cache.js.map +1 -1
  52. package/dist/mcp/environments.d.ts +2 -1
  53. package/dist/mcp/environments.d.ts.map +1 -1
  54. package/dist/mcp/environments.js +56 -112
  55. package/dist/mcp/environments.js.map +1 -1
  56. package/dist/mcp/git-accounts.d.ts +2 -1
  57. package/dist/mcp/git-accounts.d.ts.map +1 -1
  58. package/dist/mcp/git-accounts.js +74 -96
  59. package/dist/mcp/git-accounts.js.map +1 -1
  60. package/dist/mcp/jobs.d.ts +2 -1
  61. package/dist/mcp/jobs.d.ts.map +1 -1
  62. package/dist/mcp/jobs.js +68 -122
  63. package/dist/mcp/jobs.js.map +1 -1
  64. package/dist/mcp/lineage.d.ts +5 -0
  65. package/dist/mcp/lineage.d.ts.map +1 -0
  66. package/dist/mcp/lineage.js +410 -0
  67. package/dist/mcp/lineage.js.map +1 -0
  68. package/dist/mcp/node-type-corpus.d.ts +2 -1
  69. package/dist/mcp/node-type-corpus.d.ts.map +1 -1
  70. package/dist/mcp/node-type-corpus.js +148 -151
  71. package/dist/mcp/node-type-corpus.js.map +1 -1
  72. package/dist/mcp/nodes.d.ts +2 -1
  73. package/dist/mcp/nodes.d.ts.map +1 -1
  74. package/dist/mcp/nodes.js +358 -464
  75. package/dist/mcp/nodes.js.map +1 -1
  76. package/dist/mcp/pipelines.d.ts +2 -1
  77. package/dist/mcp/pipelines.d.ts.map +1 -1
  78. package/dist/mcp/pipelines.js +514 -314
  79. package/dist/mcp/pipelines.js.map +1 -1
  80. package/dist/mcp/projects.d.ts +2 -1
  81. package/dist/mcp/projects.d.ts.map +1 -1
  82. package/dist/mcp/projects.js +66 -100
  83. package/dist/mcp/projects.js.map +1 -1
  84. package/dist/mcp/repo-node-types.d.ts +2 -1
  85. package/dist/mcp/repo-node-types.d.ts.map +1 -1
  86. package/dist/mcp/repo-node-types.js +92 -121
  87. package/dist/mcp/repo-node-types.js.map +1 -1
  88. package/dist/mcp/runs.d.ts +4 -1
  89. package/dist/mcp/runs.d.ts.map +1 -1
  90. package/dist/mcp/runs.js +94 -147
  91. package/dist/mcp/runs.js.map +1 -1
  92. package/dist/mcp/skills.d.ts +13 -0
  93. package/dist/mcp/skills.d.ts.map +1 -0
  94. package/dist/mcp/skills.js +85 -0
  95. package/dist/mcp/skills.js.map +1 -0
  96. package/dist/mcp/subgraphs.d.ts +2 -1
  97. package/dist/mcp/subgraphs.d.ts.map +1 -1
  98. package/dist/mcp/subgraphs.js +61 -98
  99. package/dist/mcp/subgraphs.js.map +1 -1
  100. package/dist/mcp/tool-helpers.d.ts +37 -0
  101. package/dist/mcp/tool-helpers.d.ts.map +1 -0
  102. package/dist/mcp/tool-helpers.js +82 -0
  103. package/dist/mcp/tool-helpers.js.map +1 -0
  104. package/dist/mcp/users.d.ts +2 -1
  105. package/dist/mcp/users.d.ts.map +1 -1
  106. package/dist/mcp/users.js +92 -145
  107. package/dist/mcp/users.js.map +1 -1
  108. package/dist/mcp/workshop.d.ts +2 -1
  109. package/dist/mcp/workshop.d.ts.map +1 -1
  110. package/dist/mcp/workshop.js +66 -101
  111. package/dist/mcp/workshop.js.map +1 -1
  112. package/dist/mcp/workspaces.d.ts +2 -1
  113. package/dist/mcp/workspaces.d.ts.map +1 -1
  114. package/dist/mcp/workspaces.js +19 -34
  115. package/dist/mcp/workspaces.js.map +1 -1
  116. package/dist/prompts/index.d.ts.map +1 -1
  117. package/dist/prompts/index.js +85 -0
  118. package/dist/prompts/index.js.map +1 -1
  119. package/dist/resources/context/pipeline-workshop-guide.md +1 -1
  120. package/dist/resources/context/tool-usage.md +7 -0
  121. package/dist/resources/index.d.ts +13 -0
  122. package/dist/resources/index.d.ts.map +1 -1
  123. package/dist/resources/index.js +105 -5
  124. package/dist/resources/index.js.map +1 -1
  125. package/dist/schemas/node-payloads.d.ts +2 -2
  126. package/dist/server.d.ts +2 -1
  127. package/dist/server.d.ts.map +1 -1
  128. package/dist/server.js +173 -45
  129. package/dist/server.js.map +1 -1
  130. package/dist/services/cache/snapshots.d.ts.map +1 -1
  131. package/dist/services/cache/snapshots.js +9 -5
  132. package/dist/services/cache/snapshots.js.map +1 -1
  133. package/dist/services/config/schema-resolver.d.ts.map +1 -1
  134. package/dist/services/config/schema-resolver.js +3 -6
  135. package/dist/services/config/schema-resolver.js.map +1 -1
  136. package/dist/services/lineage/lineage-cache.d.ts +53 -0
  137. package/dist/services/lineage/lineage-cache.d.ts.map +1 -0
  138. package/dist/services/lineage/lineage-cache.js +335 -0
  139. package/dist/services/lineage/lineage-cache.js.map +1 -0
  140. package/dist/services/lineage/lineage-documentation.d.ts +29 -0
  141. package/dist/services/lineage/lineage-documentation.d.ts.map +1 -0
  142. package/dist/services/lineage/lineage-documentation.js +80 -0
  143. package/dist/services/lineage/lineage-documentation.js.map +1 -0
  144. package/dist/services/lineage/lineage-propagation.d.ts +47 -0
  145. package/dist/services/lineage/lineage-propagation.d.ts.map +1 -0
  146. package/dist/services/lineage/lineage-propagation.js +176 -0
  147. package/dist/services/lineage/lineage-propagation.js.map +1 -0
  148. package/dist/services/lineage/lineage-search.d.ts +33 -0
  149. package/dist/services/lineage/lineage-search.d.ts.map +1 -0
  150. package/dist/services/lineage/lineage-search.js +133 -0
  151. package/dist/services/lineage/lineage-search.js.map +1 -0
  152. package/dist/services/lineage/lineage-traversal.d.ts +34 -0
  153. package/dist/services/lineage/lineage-traversal.d.ts.map +1 -0
  154. package/dist/services/lineage/lineage-traversal.js +283 -0
  155. package/dist/services/lineage/lineage-traversal.js.map +1 -0
  156. package/dist/services/pipelines/clause-extraction.d.ts +3 -0
  157. package/dist/services/pipelines/clause-extraction.d.ts.map +1 -0
  158. package/dist/services/pipelines/clause-extraction.js +27 -0
  159. package/dist/services/pipelines/clause-extraction.js.map +1 -0
  160. package/dist/services/pipelines/column-helpers.d.ts +8 -0
  161. package/dist/services/pipelines/column-helpers.d.ts.map +1 -0
  162. package/dist/services/pipelines/column-helpers.js +125 -0
  163. package/dist/services/pipelines/column-helpers.js.map +1 -0
  164. package/dist/services/pipelines/cte-parsing.d.ts +29 -0
  165. package/dist/services/pipelines/cte-parsing.d.ts.map +1 -0
  166. package/dist/services/pipelines/cte-parsing.js +160 -0
  167. package/dist/services/pipelines/cte-parsing.js.map +1 -0
  168. package/dist/services/pipelines/cte-planning.d.ts +22 -0
  169. package/dist/services/pipelines/cte-planning.d.ts.map +1 -0
  170. package/dist/services/pipelines/cte-planning.js +206 -0
  171. package/dist/services/pipelines/cte-planning.js.map +1 -0
  172. package/dist/services/pipelines/execution.d.ts.map +1 -1
  173. package/dist/services/pipelines/execution.js +0 -1
  174. package/dist/services/pipelines/execution.js.map +1 -1
  175. package/dist/services/pipelines/intent-parsing.d.ts +24 -0
  176. package/dist/services/pipelines/intent-parsing.d.ts.map +1 -0
  177. package/dist/services/pipelines/intent-parsing.js +245 -0
  178. package/dist/services/pipelines/intent-parsing.js.map +1 -0
  179. package/dist/services/pipelines/intent-resolution.d.ts +24 -0
  180. package/dist/services/pipelines/intent-resolution.d.ts.map +1 -0
  181. package/dist/services/pipelines/intent-resolution.js +141 -0
  182. package/dist/services/pipelines/intent-resolution.js.map +1 -0
  183. package/dist/services/pipelines/intent.d.ts +4 -45
  184. package/dist/services/pipelines/intent.d.ts.map +1 -1
  185. package/dist/services/pipelines/intent.js +14 -408
  186. package/dist/services/pipelines/intent.js.map +1 -1
  187. package/dist/services/pipelines/node-type-candidates.d.ts +6 -0
  188. package/dist/services/pipelines/node-type-candidates.d.ts.map +1 -0
  189. package/dist/services/pipelines/node-type-candidates.js +165 -0
  190. package/dist/services/pipelines/node-type-candidates.js.map +1 -0
  191. package/dist/services/pipelines/node-type-intent.d.ts +1 -5
  192. package/dist/services/pipelines/node-type-intent.d.ts.map +1 -1
  193. package/dist/services/pipelines/node-type-intent.js +1 -5
  194. package/dist/services/pipelines/node-type-intent.js.map +1 -1
  195. package/dist/services/pipelines/node-type-scoring.d.ts +13 -0
  196. package/dist/services/pipelines/node-type-scoring.d.ts.map +1 -0
  197. package/dist/services/pipelines/node-type-scoring.js +322 -0
  198. package/dist/services/pipelines/node-type-scoring.js.map +1 -0
  199. package/dist/services/pipelines/node-type-selection.d.ts +22 -2
  200. package/dist/services/pipelines/node-type-selection.d.ts.map +1 -1
  201. package/dist/services/pipelines/node-type-selection.js +16 -538
  202. package/dist/services/pipelines/node-type-selection.js.map +1 -1
  203. package/dist/services/pipelines/plan-builder.d.ts +33 -0
  204. package/dist/services/pipelines/plan-builder.d.ts.map +1 -0
  205. package/dist/services/pipelines/plan-builder.js +224 -0
  206. package/dist/services/pipelines/plan-builder.js.map +1 -0
  207. package/dist/services/pipelines/planning-types.d.ts +543 -0
  208. package/dist/services/pipelines/planning-types.d.ts.map +1 -0
  209. package/dist/services/pipelines/planning-types.js +85 -0
  210. package/dist/services/pipelines/planning-types.js.map +1 -0
  211. package/dist/services/pipelines/planning.d.ts +8 -537
  212. package/dist/services/pipelines/planning.d.ts.map +1 -1
  213. package/dist/services/pipelines/planning.js +10 -1956
  214. package/dist/services/pipelines/planning.js.map +1 -1
  215. package/dist/services/pipelines/review.d.ts.map +1 -1
  216. package/dist/services/pipelines/review.js +3 -8
  217. package/dist/services/pipelines/review.js.map +1 -1
  218. package/dist/services/pipelines/select-parsing.d.ts +7 -0
  219. package/dist/services/pipelines/select-parsing.d.ts.map +1 -0
  220. package/dist/services/pipelines/select-parsing.js +185 -0
  221. package/dist/services/pipelines/select-parsing.js.map +1 -0
  222. package/dist/services/pipelines/source-parsing.d.ts +8 -0
  223. package/dist/services/pipelines/source-parsing.d.ts.map +1 -0
  224. package/dist/services/pipelines/source-parsing.js +151 -0
  225. package/dist/services/pipelines/source-parsing.js.map +1 -0
  226. package/dist/services/pipelines/sql-parsing.d.ts +8 -0
  227. package/dist/services/pipelines/sql-parsing.d.ts.map +1 -0
  228. package/dist/services/pipelines/sql-parsing.js +9 -0
  229. package/dist/services/pipelines/sql-parsing.js.map +1 -0
  230. package/dist/services/pipelines/sql-tokenizer.d.ts +42 -0
  231. package/dist/services/pipelines/sql-tokenizer.d.ts.map +1 -0
  232. package/dist/services/pipelines/sql-tokenizer.js +493 -0
  233. package/dist/services/pipelines/sql-tokenizer.js.map +1 -0
  234. package/dist/services/pipelines/sql-utils.d.ts +30 -0
  235. package/dist/services/pipelines/sql-utils.d.ts.map +1 -0
  236. package/dist/services/pipelines/sql-utils.js +62 -0
  237. package/dist/services/pipelines/sql-utils.js.map +1 -0
  238. package/dist/services/pipelines/workshop.d.ts.map +1 -1
  239. package/dist/services/pipelines/workshop.js +53 -25
  240. package/dist/services/pipelines/workshop.js.map +1 -1
  241. package/dist/services/pipelines/workspace-resolution.d.ts +18 -0
  242. package/dist/services/pipelines/workspace-resolution.d.ts.map +1 -0
  243. package/dist/services/pipelines/workspace-resolution.js +279 -0
  244. package/dist/services/pipelines/workspace-resolution.js.map +1 -0
  245. package/dist/services/runs/diagnostics.d.ts.map +1 -1
  246. package/dist/services/runs/diagnostics.js +3 -8
  247. package/dist/services/runs/diagnostics.js.map +1 -1
  248. package/dist/services/shared/elicitation.d.ts +14 -0
  249. package/dist/services/shared/elicitation.d.ts.map +1 -0
  250. package/dist/services/shared/elicitation.js +56 -0
  251. package/dist/services/shared/elicitation.js.map +1 -0
  252. package/dist/services/workspace/join-operations.d.ts +56 -0
  253. package/dist/services/workspace/join-operations.d.ts.map +1 -0
  254. package/dist/services/workspace/join-operations.js +303 -0
  255. package/dist/services/workspace/join-operations.js.map +1 -0
  256. package/dist/services/workspace/mutations.d.ts +3 -99
  257. package/dist/services/workspace/mutations.d.ts.map +1 -1
  258. package/dist/services/workspace/mutations.js +13 -1220
  259. package/dist/services/workspace/mutations.js.map +1 -1
  260. package/dist/services/workspace/node-creation.d.ts +48 -0
  261. package/dist/services/workspace/node-creation.d.ts.map +1 -0
  262. package/dist/services/workspace/node-creation.js +448 -0
  263. package/dist/services/workspace/node-creation.js.map +1 -0
  264. package/dist/services/workspace/node-update-helpers.d.ts +89 -0
  265. package/dist/services/workspace/node-update-helpers.d.ts.map +1 -0
  266. package/dist/services/workspace/node-update-helpers.js +492 -0
  267. package/dist/services/workspace/node-update-helpers.js.map +1 -0
  268. package/dist/tasks/index.d.ts +5 -0
  269. package/dist/tasks/index.d.ts.map +1 -0
  270. package/dist/tasks/index.js +10 -0
  271. package/dist/tasks/index.js.map +1 -0
  272. package/dist/tasks/retry-and-wait-task.d.ts +4 -0
  273. package/dist/tasks/retry-and-wait-task.d.ts.map +1 -0
  274. package/dist/tasks/retry-and-wait-task.js +61 -0
  275. package/dist/tasks/retry-and-wait-task.js.map +1 -0
  276. package/dist/tasks/run-and-wait-task.d.ts +4 -0
  277. package/dist/tasks/run-and-wait-task.d.ts.map +1 -0
  278. package/dist/tasks/run-and-wait-task.js +61 -0
  279. package/dist/tasks/run-and-wait-task.js.map +1 -0
  280. package/dist/tasks/start-run-task.d.ts +4 -0
  281. package/dist/tasks/start-run-task.d.ts.map +1 -0
  282. package/dist/tasks/start-run-task.js +47 -0
  283. package/dist/tasks/start-run-task.js.map +1 -0
  284. package/dist/tasks/store.d.ts +2 -0
  285. package/dist/tasks/store.d.ts.map +1 -0
  286. package/dist/tasks/store.js +2 -0
  287. package/dist/tasks/store.js.map +1 -0
  288. package/dist/utils.d.ts +11 -0
  289. package/dist/utils.d.ts.map +1 -1
  290. package/dist/utils.js +20 -1
  291. package/dist/utils.js.map +1 -1
  292. package/dist/workflows/get-environment-health.d.ts +49 -0
  293. package/dist/workflows/get-environment-health.d.ts.map +1 -0
  294. package/dist/workflows/get-environment-health.js +310 -0
  295. package/dist/workflows/get-environment-health.js.map +1 -0
  296. package/dist/workflows/get-environment-overview.d.ts +2 -1
  297. package/dist/workflows/get-environment-overview.d.ts.map +1 -1
  298. package/dist/workflows/get-environment-overview.js +13 -19
  299. package/dist/workflows/get-environment-overview.js.map +1 -1
  300. package/dist/workflows/get-run-details.d.ts +2 -2
  301. package/dist/workflows/get-run-details.d.ts.map +1 -1
  302. package/dist/workflows/get-run-details.js +14 -19
  303. package/dist/workflows/get-run-details.js.map +1 -1
  304. package/dist/workflows/poll-run.d.ts +14 -0
  305. package/dist/workflows/poll-run.d.ts.map +1 -0
  306. package/dist/workflows/poll-run.js +86 -0
  307. package/dist/workflows/poll-run.js.map +1 -0
  308. package/dist/workflows/progress.d.ts +1 -0
  309. package/dist/workflows/progress.d.ts.map +1 -1
  310. package/dist/workflows/progress.js +3 -0
  311. package/dist/workflows/progress.js.map +1 -1
  312. package/dist/workflows/retry-and-wait.d.ts +1 -1
  313. package/dist/workflows/retry-and-wait.d.ts.map +1 -1
  314. package/dist/workflows/retry-and-wait.js +18 -89
  315. package/dist/workflows/retry-and-wait.js.map +1 -1
  316. package/dist/workflows/run-and-wait.d.ts +1 -1
  317. package/dist/workflows/run-and-wait.d.ts.map +1 -1
  318. package/dist/workflows/run-and-wait.js +18 -89
  319. package/dist/workflows/run-and-wait.js.map +1 -1
  320. package/package.json +2 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-creation.js","sourceRoot":"","sources":["../../../src/services/workspace/node-creation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import { type CoalesceClient } from "../../client.js";
2
+ import { type ConfigCompletionResult } from "../config/intelligent.js";
3
+ export declare function tryCompleteNodeConfiguration(client: CoalesceClient, params: {
4
+ workspaceID: string;
5
+ nodeID: string;
6
+ repoPath?: string;
7
+ }): Promise<{
8
+ configCompletion?: ConfigCompletionResult;
9
+ configCompletionSkipped?: string;
10
+ }>;
11
+ export type NodeTypeValidation = {
12
+ requestedNodeType: string;
13
+ topRankedNodeType: string | null;
14
+ isTopRanked: boolean;
15
+ strategy: string;
16
+ consideredNodeTypes: Array<{
17
+ nodeType: string;
18
+ displayName: string | null;
19
+ score: number;
20
+ reasons: string[];
21
+ }>;
22
+ warning?: string;
23
+ };
24
+ /**
25
+ * Validates the requested nodeType against all available types from repo + workspace.
26
+ * Returns ranking info so the agent (and user) can see all considered options.
27
+ * Throws if the requested type is excluded (e.g., inputMode: 'sql').
28
+ * Returns null on non-critical validation failures (creation proceeds).
29
+ *
30
+ * NOTE: This function imports listWorkspaceNodeTypes lazily to avoid circular
31
+ * dependencies (mutations.ts -> node-update-helpers.ts -> mutations.ts).
32
+ */
33
+ export declare function validateNodeTypeChoice(client: CoalesceClient, params: {
34
+ workspaceID: string;
35
+ nodeType: string;
36
+ predecessorCount: number;
37
+ repoPath?: string;
38
+ goal?: string;
39
+ }): Promise<NodeTypeValidation | null>;
40
+ /**
41
+ * Blocks creation of "Source" node types — Source nodes are read-only data
42
+ * definitions created via the Coalesce UI, not downstream processing nodes.
43
+ * Agents often confuse "Source" with "Stage".
44
+ */
45
+ export declare function assertNotSourceNodeType(nodeType: string): void;
46
+ export type WorkspaceNodeChanges = Record<string, unknown>;
47
+ export declare function mergeWorkspaceNodeChanges(current: unknown, changes: unknown): unknown;
48
+ export declare function syncNodeNameIntoMetadataSourceMapping(current: Record<string, unknown>, merged: Record<string, unknown>, changes: WorkspaceNodeChanges): Record<string, unknown>;
49
+ export declare function buildUpdatedWorkspaceNodeBody(current: unknown, changes: WorkspaceNodeChanges): Record<string, unknown>;
50
+ import type { ExternalColumnInput } from "../../schemas/node-payloads.js";
51
+ export type SchemaReconciliationColumn = {
52
+ name: string;
53
+ sourceDataType: string | null;
54
+ targetDataType: string;
55
+ typeChanged: boolean;
56
+ };
57
+ export type SchemaReconciliation = {
58
+ matched: SchemaReconciliationColumn[];
59
+ added: Array<{
60
+ name: string;
61
+ dataType: string;
62
+ needsTransform: boolean;
63
+ }>;
64
+ dropped: Array<{
65
+ name: string;
66
+ reason: string;
67
+ }>;
68
+ typeChanges: Array<{
69
+ name: string;
70
+ from: string;
71
+ to: string;
72
+ }>;
73
+ };
74
+ /**
75
+ * Reconcile external target columns against a node's auto-populated columns.
76
+ *
77
+ * For each target column:
78
+ * - If it matches an auto-populated predecessor column by name, the source
79
+ * linkage is preserved but the dataType is overridden to match the external schema.
80
+ * - If it has no match in the predecessor, it is added as a new column
81
+ * (flagged as needing a transform unless one was provided).
82
+ *
83
+ * Predecessor columns not present in the target list are dropped.
84
+ */
85
+ export declare function reconcileExternalSchema(autoPopulatedColumns: Record<string, unknown>[], targetColumns: ExternalColumnInput[]): {
86
+ columns: Record<string, unknown>[];
87
+ reconciliation: SchemaReconciliation;
88
+ };
89
+ //# sourceMappingURL=node-update-helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-update-helpers.d.ts","sourceRoot":"","sources":["../../../src/services/workspace/node-update-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,492 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { completeNodeConfiguration } from "../config/intelligent.js";
3
+ import { isPlainObject, rethrowNonRecoverableApiError } from "../../utils.js";
4
+ import { selectPipelineNodeType } from "../pipelines/node-type-selection.js";
5
+ import { detectSpecializedPatternPenalty } from "../pipelines/node-type-intent.js";
6
+ import { normalizeColumnName, normalizeDataType, } from "./node-inspection.js";
7
+ import { isPassthroughTransform } from "../shared/node-helpers.js";
8
+ const CONFIG_COMPLETION_SKIP_MSG = "call complete_node_configuration with repoPath after creation to apply node type config and column-level attributes.";
9
+ export async function tryCompleteNodeConfiguration(client, params) {
10
+ try {
11
+ const configCompletion = await completeNodeConfiguration(client, params);
12
+ return { configCompletion };
13
+ }
14
+ catch (error) {
15
+ rethrowNonRecoverableApiError(error);
16
+ const reason = error instanceof Error ? error.message : String(error);
17
+ return { configCompletionSkipped: `Config completion failed (${reason}) — ${CONFIG_COMPLETION_SKIP_MSG}` };
18
+ }
19
+ }
20
+ /**
21
+ * Validates the requested nodeType against all available types from repo + workspace.
22
+ * Returns ranking info so the agent (and user) can see all considered options.
23
+ * Throws if the requested type is excluded (e.g., inputMode: 'sql').
24
+ * Returns null on non-critical validation failures (creation proceeds).
25
+ *
26
+ * NOTE: This function imports listWorkspaceNodeTypes lazily to avoid circular
27
+ * dependencies (mutations.ts -> node-update-helpers.ts -> mutations.ts).
28
+ */
29
+ export async function validateNodeTypeChoice(client, params) {
30
+ try {
31
+ // Lazy import to break the cycle: mutations re-exports from this file,
32
+ // and this function needs listWorkspaceNodeTypes which lives in mutations.
33
+ const { listWorkspaceNodeTypes } = await import("./mutations.js");
34
+ const nodeTypesResult = await listWorkspaceNodeTypes(client, {
35
+ workspaceID: params.workspaceID,
36
+ });
37
+ const selectionResult = selectPipelineNodeType({
38
+ explicitNodeType: params.nodeType,
39
+ sourceCount: params.predecessorCount,
40
+ workspaceNodeTypes: nodeTypesResult.nodeTypes,
41
+ workspaceNodeTypeCounts: nodeTypesResult.counts,
42
+ repoPath: params.repoPath,
43
+ goal: params.goal,
44
+ });
45
+ // Hard block: if the requested type was excluded (e.g., inputMode: 'sql'), throw
46
+ const exclusionWarning = selectionResult.warnings.find((w) => w.includes("is excluded because it relies on raw SQL override"));
47
+ if (exclusionWarning) {
48
+ throw new Error(exclusionWarning);
49
+ }
50
+ const topRanked = selectionResult.selection.consideredNodeTypes[0] ?? null;
51
+ const isTopRanked = topRanked?.nodeType === params.nodeType;
52
+ const validation = {
53
+ requestedNodeType: params.nodeType,
54
+ topRankedNodeType: topRanked?.nodeType ?? null,
55
+ isTopRanked,
56
+ strategy: selectionResult.selection.strategy,
57
+ consideredNodeTypes: selectionResult.selection.consideredNodeTypes.slice(0, 5).map((c) => ({
58
+ nodeType: c.nodeType,
59
+ displayName: c.displayName,
60
+ score: c.score,
61
+ reasons: c.reasons,
62
+ })),
63
+ };
64
+ if (!isTopRanked && topRanked) {
65
+ validation.warning =
66
+ `Requested nodeType "${params.nodeType}" is not the top-ranked type. ` +
67
+ `Consider using "${topRanked.nodeType}" (score: ${topRanked.score}) instead. ` +
68
+ `Call plan_pipeline first to discover and rank all available node types.`;
69
+ }
70
+ // Hard block specialized materialization patterns (Dynamic Tables, Incremental, etc.)
71
+ // unless the goal explicitly requests them.
72
+ // Build candidate signals from the matched type's display name and short name,
73
+ // since the raw nodeType ID (e.g., "65") won't match pattern detection.
74
+ const matchedCandidate = selectionResult.selection.consideredNodeTypes.find((c) => c.nodeType === params.nodeType);
75
+ const candidateSignals = [
76
+ params.nodeType,
77
+ matchedCandidate?.displayName ?? "",
78
+ matchedCandidate?.shortName ?? "",
79
+ ].join(" ");
80
+ const contextText = params.goal ?? "";
81
+ const specializedPenalty = detectSpecializedPatternPenalty(candidateSignals, contextText);
82
+ if (specializedPenalty) {
83
+ // Hard block — specialized types require explicit context
84
+ const patternName = specializedPenalty.reason.split(" pattern")[0] ?? "Specialized";
85
+ throw new Error(`Cannot create node with nodeType "${params.nodeType}" (${matchedCandidate?.displayName ?? "unknown"}): ` +
86
+ `${specializedPenalty.reason}. ` +
87
+ `${patternName} types require an explicit use case (e.g., "${patternName.toLowerCase()}" in the goal). ` +
88
+ `For standard batch ETL, staging, joins, and aggregations, use a general-purpose type ` +
89
+ `(Stage, Work, View, Dimension, Fact). ` +
90
+ `Call plan_pipeline to discover the correct nodeType for your use case.`);
91
+ }
92
+ return validation;
93
+ }
94
+ catch (error) {
95
+ // Auth and network errors indicate a broken session — let them propagate
96
+ rethrowNonRecoverableApiError(error);
97
+ // Re-throw hard block errors — exclusion and specialized pattern blocks
98
+ if (error instanceof Error && (error.message.includes("is excluded") ||
99
+ error.message.startsWith("Cannot create node"))) {
100
+ throw error;
101
+ }
102
+ // Log unexpected errors so they are not completely invisible
103
+ const reason = error instanceof Error ? error.message : String(error);
104
+ process.stderr.write(`[validateNodeTypeChoice] Unexpected error for nodeType "${params.nodeType}": ${reason}. Validation skipped.\n`);
105
+ return null;
106
+ }
107
+ }
108
+ /**
109
+ * Blocks creation of "Source" node types — Source nodes are read-only data
110
+ * definitions created via the Coalesce UI, not downstream processing nodes.
111
+ * Agents often confuse "Source" with "Stage".
112
+ */
113
+ export function assertNotSourceNodeType(nodeType) {
114
+ const normalized = nodeType.toLowerCase().replace(/.*:::/, "");
115
+ if (normalized === "source") {
116
+ throw new Error(`Cannot create a node with nodeType "Source". Source nodes are read-only data ` +
117
+ `definitions — they represent external tables and are created via the Coalesce UI, ` +
118
+ `not via the API. You probably want "Stage" for a staging/transform node. ` +
119
+ `Call plan_pipeline to discover the correct nodeType.`);
120
+ }
121
+ }
122
+ export function mergeWorkspaceNodeChanges(current, changes) {
123
+ if (Array.isArray(changes)) {
124
+ return changes;
125
+ }
126
+ if (isPlainObject(current) && isPlainObject(changes)) {
127
+ const merged = { ...current };
128
+ for (const [key, value] of Object.entries(changes)) {
129
+ merged[key] = mergeWorkspaceNodeChanges(current[key], value);
130
+ }
131
+ return merged;
132
+ }
133
+ return changes;
134
+ }
135
+ export function syncNodeNameIntoMetadataSourceMapping(current, merged, changes) {
136
+ if (typeof changes.name !== "string") {
137
+ return merged;
138
+ }
139
+ const metadataChanges = isPlainObject(changes.metadata) ? changes.metadata : undefined;
140
+ if (metadataChanges && "sourceMapping" in metadataChanges) {
141
+ return merged;
142
+ }
143
+ const mergedMetadata = isPlainObject(merged.metadata) ? merged.metadata : undefined;
144
+ if (!mergedMetadata || !Array.isArray(mergedMetadata.sourceMapping)) {
145
+ return merged;
146
+ }
147
+ const previousName = typeof current.name === "string" && current.name.trim().length > 0
148
+ ? current.name
149
+ : null;
150
+ const updateSingleUnnamedMapping = previousName === null && mergedMetadata.sourceMapping.length === 1;
151
+ return {
152
+ ...merged,
153
+ metadata: {
154
+ ...mergedMetadata,
155
+ sourceMapping: mergedMetadata.sourceMapping.map((entry) => {
156
+ if (!isPlainObject(entry)) {
157
+ return entry;
158
+ }
159
+ const shouldRename = (previousName !== null && entry.name === previousName) ||
160
+ updateSingleUnnamedMapping;
161
+ if (!shouldRename) {
162
+ return entry;
163
+ }
164
+ return {
165
+ ...entry,
166
+ name: changes.name,
167
+ };
168
+ }),
169
+ },
170
+ };
171
+ }
172
+ export function buildUpdatedWorkspaceNodeBody(current, changes) {
173
+ if (!isPlainObject(current)) {
174
+ throw new Error("Workspace node response was not an object");
175
+ }
176
+ const merged = mergeWorkspaceNodeChanges(current, changes);
177
+ if (!isPlainObject(merged)) {
178
+ throw new Error("Merged workspace node update was not an object");
179
+ }
180
+ const synchronized = syncNodeNameIntoMetadataSourceMapping(current, merged, changes);
181
+ if (!isPlainObject(synchronized)) {
182
+ throw new Error("Synchronized workspace node update was not an object");
183
+ }
184
+ // Preserve the node name casing as provided by the user or existing node.
185
+ // Snowflake treats unquoted identifiers as uppercase, but users may choose
186
+ // lowercase names (e.g., for Databricks or personal preference) — respect that.
187
+ // Validate nodeType and materializationType compatibility
188
+ validateNodeTypeMaterializationCompatibility(synchronized.nodeType, synchronized.materializationType);
189
+ // Strip invalid fields from metadata before sending to Coalesce
190
+ if (isPlainObject(synchronized.metadata)) {
191
+ synchronized.metadata = cleanMetadata(synchronized.metadata);
192
+ }
193
+ // Ensure API-required fields (table, overrideSQL, columnIDs) are preserved
194
+ ensureRequiredApiFields(current, synchronized);
195
+ return synchronized;
196
+ }
197
+ /**
198
+ * Reconcile external target columns against a node's auto-populated columns.
199
+ *
200
+ * For each target column:
201
+ * - If it matches an auto-populated predecessor column by name, the source
202
+ * linkage is preserved but the dataType is overridden to match the external schema.
203
+ * - If it has no match in the predecessor, it is added as a new column
204
+ * (flagged as needing a transform unless one was provided).
205
+ *
206
+ * Predecessor columns not present in the target list are dropped.
207
+ */
208
+ export function reconcileExternalSchema(autoPopulatedColumns, targetColumns) {
209
+ // Index auto-populated columns by normalized name
210
+ const existingByName = new Map();
211
+ for (const col of autoPopulatedColumns) {
212
+ if (isPlainObject(col) && typeof col.name === "string") {
213
+ existingByName.set(normalizeColumnName(col.name), col);
214
+ }
215
+ }
216
+ const targetNameSet = new Set(targetColumns.map((tc) => normalizeColumnName(tc.name)));
217
+ const reconciliation = {
218
+ matched: [],
219
+ added: [],
220
+ dropped: [],
221
+ typeChanges: [],
222
+ };
223
+ // Find dropped columns (in predecessor, not in target)
224
+ for (const col of autoPopulatedColumns) {
225
+ if (!isPlainObject(col) || typeof col.name !== "string")
226
+ continue;
227
+ if (!targetNameSet.has(normalizeColumnName(col.name))) {
228
+ reconciliation.dropped.push({
229
+ name: col.name,
230
+ reason: "not in target schema",
231
+ });
232
+ }
233
+ }
234
+ // Build reconciled column list in target column order
235
+ const reconciledColumns = [];
236
+ for (const target of targetColumns) {
237
+ const normalizedName = normalizeColumnName(target.name);
238
+ const existing = existingByName.get(normalizedName);
239
+ if (existing) {
240
+ // Matched — preserve source linkage, override dataType
241
+ const sourceDataType = typeof existing.dataType === "string" ? existing.dataType : null;
242
+ const typeChanged = sourceDataType !== null && normalizeDataType(sourceDataType) !== normalizeDataType(target.dataType);
243
+ const reconciledCol = {
244
+ ...structuredClone(existing),
245
+ name: target.name,
246
+ dataType: target.dataType,
247
+ nullable: target.nullable ?? true,
248
+ description: target.description ?? (typeof existing.description === "string" ? existing.description : ""),
249
+ };
250
+ if (target.transform) {
251
+ reconciledCol.transform = target.transform;
252
+ }
253
+ reconciledColumns.push(reconciledCol);
254
+ reconciliation.matched.push({
255
+ name: target.name,
256
+ sourceDataType,
257
+ targetDataType: target.dataType,
258
+ typeChanged,
259
+ });
260
+ }
261
+ else {
262
+ // New column — no predecessor match
263
+ const needsTransform = !target.transform;
264
+ reconciledColumns.push({
265
+ name: target.name,
266
+ dataType: target.dataType,
267
+ nullable: target.nullable ?? true,
268
+ description: target.description ?? "",
269
+ ...(target.transform ? { transform: target.transform } : {}),
270
+ });
271
+ reconciliation.added.push({
272
+ name: target.name,
273
+ dataType: target.dataType,
274
+ needsTransform,
275
+ });
276
+ }
277
+ }
278
+ // Derive typeChanges from matched entries to avoid dual-update maintenance
279
+ reconciliation.typeChanges = reconciliation.matched
280
+ .filter((m) => m.typeChanged && m.sourceDataType !== null)
281
+ .map((m) => ({ name: m.name, from: m.sourceDataType, to: m.targetDataType }));
282
+ return { columns: reconciledColumns, reconciliation };
283
+ }
284
+ /**
285
+ * Valid metadata fields for the Coalesce PUT API.
286
+ * The GET response may include additional read-only fields (e.g., appliedNodeTests,
287
+ * cteString, materializationOption) that the PUT schema rejects as additional properties.
288
+ */
289
+ const VALID_METADATA_FIELDS = new Set([
290
+ "columns",
291
+ "sourceMapping",
292
+ "enabledColumnTestIDs",
293
+ ]);
294
+ function cleanMetadata(metadata) {
295
+ if (!isPlainObject(metadata)) {
296
+ return {};
297
+ }
298
+ const cleaned = {};
299
+ for (const key of Object.keys(metadata)) {
300
+ if (VALID_METADATA_FIELDS.has(key)) {
301
+ cleaned[key] = metadata[key];
302
+ }
303
+ }
304
+ return cleaned;
305
+ }
306
+ /**
307
+ * Preserves columnID, sources, columnReference, and placement from existing
308
+ * columns when new columns are provided by the agent.
309
+ *
310
+ * When agents provide columns in changes.metadata.columns, those columns
311
+ * typically lack the source linkage fields that Coalesce auto-populates
312
+ * from predecessors. This function restores them by matching column names.
313
+ */
314
+ function preserveColumnLinkage(currentMetadata, mergedMetadata) {
315
+ if (!Array.isArray(currentMetadata.columns) || !Array.isArray(mergedMetadata.columns)) {
316
+ return;
317
+ }
318
+ const existingByName = new Map();
319
+ for (const col of currentMetadata.columns) {
320
+ if (isPlainObject(col) && typeof col.name === "string") {
321
+ existingByName.set(normalizeColumnName(col.name), col);
322
+ }
323
+ }
324
+ if (existingByName.size === 0) {
325
+ return;
326
+ }
327
+ for (const col of mergedMetadata.columns) {
328
+ if (!isPlainObject(col) || typeof col.name !== "string") {
329
+ continue;
330
+ }
331
+ const existing = existingByName.get(normalizeColumnName(col.name));
332
+ if (!existing) {
333
+ continue;
334
+ }
335
+ // Preserve columnID if not already set
336
+ if ((!col.columnID || (typeof col.columnID === "string" && col.columnID.length === 0))
337
+ && typeof existing.columnID === "string") {
338
+ col.columnID = existing.columnID;
339
+ }
340
+ // Preserve source linkage fields — these connect the column back to its
341
+ // predecessor node. Agents almost never provide these, so inherit from
342
+ // the auto-populated column.
343
+ if (!Array.isArray(col.sources) && Array.isArray(existing.sources)) {
344
+ const clonedSources = structuredClone(existing.sources);
345
+ col.sources = clonedSources;
346
+ // If the agent provided a non-passthrough transform on the top-level column
347
+ // (e.g., UPPER("TABLE"."COL")), propagate it into sources[*].transform so
348
+ // the Coalesce UI displays it correctly.
349
+ // The UI reads transforms from sources[0].transform, not a top-level transform field.
350
+ if (typeof col.transform === "string" &&
351
+ col.transform.trim().length > 0 &&
352
+ typeof col.name === "string" &&
353
+ !isPassthroughTransform(col.transform, col.name)) {
354
+ for (const source of clonedSources) {
355
+ if (isPlainObject(source)) {
356
+ source.transform = col.transform;
357
+ }
358
+ }
359
+ }
360
+ }
361
+ if (!isPlainObject(col.columnReference) && isPlainObject(existing.columnReference)) {
362
+ col.columnReference = existing.columnReference;
363
+ }
364
+ // Preserve placement (column ordering metadata)
365
+ if (col.placement === undefined && existing.placement !== undefined) {
366
+ col.placement = existing.placement;
367
+ }
368
+ }
369
+ }
370
+ /**
371
+ * Ensures the Coalesce API required fields (table, overrideSQL) are present
372
+ * in the body being sent to the PUT endpoint. These are preserved from the
373
+ * current node — the agent is never allowed to set overrideSQL.
374
+ */
375
+ function ensureRequiredApiFields(current, body) {
376
+ // Ensure 'table' is present — required by the Coalesce PUT API.
377
+ // Prefer current node's value, fall back to node name.
378
+ if (!body.table || (typeof body.table === "string" && body.table.trim().length === 0)) {
379
+ if (current.table && typeof current.table === "string" && current.table.trim().length > 0) {
380
+ body.table = current.table;
381
+ }
382
+ else {
383
+ const name = typeof body.name === "string" ? body.name : typeof current.name === "string" ? current.name : "";
384
+ if (name.length > 0) {
385
+ body.table = name;
386
+ }
387
+ }
388
+ }
389
+ // Preserve 'overrideSQL' from current node — agent must never set this
390
+ if ("overrideSQL" in current) {
391
+ body.overrideSQL = current.overrideSQL;
392
+ }
393
+ // Preserve columnIDs from current node's columns
394
+ const currentMetadata = isPlainObject(current.metadata) ? current.metadata : undefined;
395
+ const bodyMetadata = isPlainObject(body.metadata) ? body.metadata : undefined;
396
+ // Strip backslash-escaped quotes from transforms BEFORE preserveColumnLinkage,
397
+ // so cleaned transforms get propagated into sources[*].transform correctly.
398
+ if (bodyMetadata && Array.isArray(bodyMetadata.columns)) {
399
+ for (const col of bodyMetadata.columns) {
400
+ if (isPlainObject(col) && typeof col.transform === "string" && col.transform.includes("\\")) {
401
+ col.transform = col.transform.replace(/\\"/g, '"');
402
+ }
403
+ }
404
+ }
405
+ if (currentMetadata && bodyMetadata) {
406
+ preserveColumnLinkage(currentMetadata, bodyMetadata);
407
+ }
408
+ // Ensure all columns have required fields and strip invalid properties
409
+ if (bodyMetadata && Array.isArray(bodyMetadata.columns)) {
410
+ // Build lookup of current node's columns for dataType fallback
411
+ const currentColumns = currentMetadata && Array.isArray(currentMetadata.columns) ? currentMetadata.columns : [];
412
+ const currentDataTypes = new Map();
413
+ for (const col of currentColumns) {
414
+ if (isPlainObject(col) && typeof col.name === "string" && typeof col.dataType === "string") {
415
+ currentDataTypes.set(col.name.toUpperCase(), col.dataType);
416
+ }
417
+ }
418
+ for (const col of bodyMetadata.columns) {
419
+ if (!isPlainObject(col))
420
+ continue;
421
+ // Ensure 'dataType' — required by the Coalesce PUT API.
422
+ // Prefer the current node's dataType for the same column name, otherwise default to "VARCHAR".
423
+ if (!col.dataType || (typeof col.dataType === "string" && col.dataType.trim().length === 0)) {
424
+ const colName = typeof col.name === "string" ? col.name.toUpperCase() : "";
425
+ const existingType = currentDataTypes.get(colName);
426
+ col.dataType = existingType ?? "VARCHAR";
427
+ }
428
+ // Ensure 'nullable' — required by the Coalesce PUT API
429
+ if (!("nullable" in col)) {
430
+ col.nullable = true;
431
+ }
432
+ // Ensure 'description' — required by the Coalesce PUT API
433
+ if (!("description" in col)) {
434
+ col.description = "";
435
+ }
436
+ // Generate columnID for columns that don't have one —
437
+ // the PUT API requires columnID on every column
438
+ if (!col.columnID || (typeof col.columnID === "string" && col.columnID.length === 0)) {
439
+ col.columnID = randomUUID();
440
+ }
441
+ // Strip passthrough transforms — if the transform just references
442
+ // the column's own name (e.g., "ALIAS"."COL" or {{ ref(...) }}."COL"),
443
+ // remove it so Coalesce auto-populates the source mapping.
444
+ if (typeof col.transform === "string" && typeof col.name === "string") {
445
+ if (isPassthroughTransform(col.transform, col.name)) {
446
+ delete col.transform;
447
+ }
448
+ }
449
+ // Ensure computed columns (new columns with a transform but no sources) get a
450
+ // synthetic sources entry so the Coalesce UI displays the transform correctly.
451
+ // The UI reads transforms from sources[0].transform, not the top-level transform field.
452
+ if (typeof col.transform === "string" &&
453
+ col.transform.trim().length > 0 &&
454
+ !Array.isArray(col.sources)) {
455
+ col.sources = [{ transform: col.transform, columnReferences: [] }];
456
+ }
457
+ // Strip properties that are not valid Coalesce column fields.
458
+ // Valid: name, dataType, transform, nullable, description, columnID,
459
+ // sources, placement, plus columnSelector attributes (isBusinessKey, etc.)
460
+ delete col.primaryKey;
461
+ delete col.foreignKey;
462
+ delete col.unique;
463
+ delete col.index;
464
+ }
465
+ }
466
+ // Ensure 'enabledColumnTestIDs' is present on metadata — required by the Coalesce PUT API
467
+ if (bodyMetadata && !Array.isArray(bodyMetadata.enabledColumnTestIDs)) {
468
+ const currentEnabled = currentMetadata && Array.isArray(currentMetadata.enabledColumnTestIDs)
469
+ ? currentMetadata.enabledColumnTestIDs
470
+ : [];
471
+ bodyMetadata.enabledColumnTestIDs = currentEnabled;
472
+ }
473
+ }
474
+ /**
475
+ * Validates that nodeType and materializationType are compatible
476
+ * Throws error with actionable message if incompatible
477
+ */
478
+ function validateNodeTypeMaterializationCompatibility(nodeType, materializationType) {
479
+ if (typeof nodeType !== "string" || typeof materializationType !== "string") {
480
+ return; // Skip validation if either field is missing or invalid type
481
+ }
482
+ const normalizedNodeType = nodeType.trim().toLowerCase().replace(/.*:::/, "");
483
+ const normalizedMaterialization = materializationType.toLowerCase();
484
+ // View nodes can ONLY be materialized as views
485
+ if (normalizedNodeType === "view" && normalizedMaterialization === "table") {
486
+ throw new Error(`Invalid configuration: nodeType "View" cannot use materializationType "table". ` +
487
+ `Either keep materializationType as "view" OR change nodeType to a table-capable type like "Dimension", "Fact", "Stage", or "Work".`);
488
+ }
489
+ // Note: Other node types (Dimension, Fact, Stage, Work, etc.) can be either table or view
490
+ // So we only need to check the View + table combination
491
+ }
492
+ //# sourceMappingURL=node-update-helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"node-update-helpers.js","sourceRoot":"","sources":["../../../src/services/workspace/node-update-helpers.ts"],"names":[],"mappings":"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"}